[!NOTE] This repository contains GGUF versions of the IFM/K2-Horizon-0.9B for use with
llama.cpp.Multiple precision and quantization variants are available, including
BF16,Q8_0,Q6_K,Q5_K_M,Q5_0, andQ4_K_M. All GGUF files include tokenizer metadata and a llama.cpp-compatible chat template.
[!WARNING] 💡 Important Deployment Notes: These models require a version of
llama.cppcontaining K2 Horizon architecture support. PR to llama.cpp is in progress. MBZUAI-IFM fork of llama.cpp is in https://github.com/MBZUAI-IFM/llama.cpp/tree/model/K2Horizon
K2-Horizon-0.9B is the compact dense member of the K2-Horizon family: a 0.9B-class decoder-only model with a 128K context window.
The chart at the top of this card shows K2-Horizon-0.9B against selected reference models. The table below lists every comparison model used in the figure.
| Reference models | ||||
|---|---|---|---|---|
| K2-Horizon-0.9B | Qwen3.5-0.8B | OpenBMB-1B | Qwen3.5-2B | |
| # Params | 0.9B | 0.8B | 1B | 2B |
| # Activated params | 0.9B | 0.8B | 1B | 2B |
| Architecture | Dense | Dense | Dense | Dense |
| Math | ||||
AIME 2025 Competition mathematics | 41.7 | 1.0 | 40.4 | 34.2 |
AIME 2026 Competition mathematics | 48.5 | 0.2 | 40.4 | 38.8 |
HMMT Feb 2026 Competition mathematics | 25.8 | 0.6 | 23.3 | 22.7 |
| Scientific Reasoning | ||||
GPQA Diamond Graduate-level science QA | 27.3 | 11.9 | 26.3 | 54.9 |
| Coding | ||||
HumanEval+ Code generation | 79.9 | 16.5 | 65.2 | 75.6 |
MBPP+ Code generation | 68.0 | 35.4 | 60.6 | 67.7 |
LiveCodeBench v6 Competitive coding | 37.4 | 6.6 | 33.5 | 29.8 |
| Agents | ||||
BFCL v4 Function calling | 28.0 | 25.3 | 25.2 | 43.6 |
Scores in %. Bold highlights K2-Horizon-0.9B; Qwen3.5-2B is included as a larger reference model. Protocol and provenance details are in the Technical Appendix.
| K2-Horizon-0.9B | IFEval (Prompt) | GSM8K | MBPP | MMLU-Pro | GPQA-Diamond | BBH (3-shot) | AIME 26 (avg @ 4) | Average |
|---|---|---|---|---|---|---|---|---|
| GGUF-BF16 | 74.6 | 87.7 | 75.2 | 47.2 | 29.2 | 36.4 | 61.6 | 58.8 |
| GGUF-Q4_K_M | 72.2 | 85.9 | 73.8 | 42.9 | 28.7 | 26.1 | 45.0 | 53.5 |
| GGUF-Q5_0 | 73.0 | 87.8 | 66.6 | 45.6 | 29.2 | 35.4 | 50.8 | 55.5 |
| GGUF-Q5_K_M | 74.8 | 86.5 | 75.6 | 47.0 | 22.7 | 36.1 | 54.1 | 56.7 |
| GGUF-Q6_K | 70.4 | 88.6 | 73.2 | 47.4 | 27.2 | 37.5 | 50.8 | 56.4 |
| GGUF-Q8_0 | 75.0 | 89.0 | 73.0 | 48.6 | 28.2 | 37.5 | 54.1 | 57.9 |
vLLM (source at PR #53806, commit d9fd5f11):
vllm serve IFM/K2-Horizon-0.9B \
--trust-remote-code \
--dtype bfloat16 \
--max-model-len 131072 \
--hf-overrides '{"rope_parameters":{"rope_type":"yarn","factor":16.0,"original_max_position_embeddings":8192}}' \
--gpu-memory-utilization 0.85 \
--tensor-parallel-size 1 \
--reasoning-parser k2_horizon \
--enable-auto-tool-choice \
--tool-call-parser k2_horizon
SGLang, from a source checkout that includes sgl-project/sglang#37654. This is the recipe validated in the SGLang K2 Horizon cookbook:
sglang serve \
--model-path IFM/K2-Horizon-0.9B \
--revision 9b9ec1f7e17f62ed218df542687a144116219d84 \
--tp 1 \
--dtype bfloat16 \
--attention-backend fa3 \
--reasoning-parser k2_horizon \
--host 0.0.0.0 \
--port 30000
[!Tip] Recommended settings:
reasoning_effort="high",temperature=0.6,top_p=0.95, and at least 32,768 output tokens. Reasoning depth is selected per request throughchat_template_kwargs. Thinking is returned inreasoning_contentand the answer incontent.
from openai import OpenAI
client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="IFM/K2-Horizon-0.9B",
messages=[{"role": "user", "content": "Explain the result step by step."}],
temperature=0.6,
top_p=0.95,
max_tokens=32768,
extra_body={"chat_template_kwargs": {"reasoning_effort": "high", "tool_call_format": "xml"}},
)
message = response.choices[0].message
print("Reasoning:", getattr(message, "reasoning_content", None))
print("Answer:", message.content)
Our model supports multiple tool calls formats, which can be changed with chat_template_kwargs. The supported values are json, xml, and xml_typed . The default is xml. Keep --tool-call-parser k2_horizon enabled to parse the selected format.
Validated with Transformers 5.15.0, PyTorch 2.13.0, Safetensors 0.8.0.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "IFM/K2-Horizon-0.9B"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="auto", dtype="bfloat16", low_cpu_mem_usage=True, trust_remote_code=True
)
inputs = tokenizer("Explain why long-context evaluation is difficult.", return_tensors="pt").to(model.device)
inputs.pop("token_type_ids", None)
outputs = model.generate(**inputs, max_new_tokens=32768, temperature=1.0, top_p=0.95, do_sample=True)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
high. All reported results use high reasoning effort. Pass {"chat_template_kwargs": {"reasoning_effort": "high"}} on every request; medium and low trade accuracy for speed and are not recommended for evaluation.temperature=0.6, top_p=0.95.k2_horizon reasoning parser for chat, and add the k2_horizon tool-call parser for agent use. Leave both off for plain completion-style generation.main is the MOPD release checkpoint; mid1_75k and mid2_47k preserve the context-extension stages.@misc{k2horizon2026,
title = {Introducing K2 Horizon: Frontier Performance, Radically Open},
author = {{IFM Team}},
year = {2026},
url = {https://ifm.ai/blog/k2/},
}
[!NOTE] This repository contains GGUF versions of the IFM/K2-Horizon-0.9B for use with
llama.cpp.Multiple precision and quantization variants are available, including
BF16,Q8_0,Q6_K,Q5_K_M,Q5_0, andQ4_K_M. All GGUF files include tokenizer metadata and a llama.cpp-compatible chat template.
[!WARNING] 💡 Important Deployment Notes: These models require a version of
llama.cppcontaining K2 Horizon architecture support. PR to llama.cpp is in progress. MBZUAI-IFM fork of llama.cpp is in https://github.com/MBZUAI-IFM/llama.cpp/tree/model/K2Horizon
K2-Horizon-0.9B is the compact dense member of the K2-Horizon family: a 0.9B-class decoder-only model with a 128K context window.
The chart at the top of this card shows K2-Horizon-0.9B against selected reference models. The table below lists every comparison model used in the figure.
| Reference models | ||||
|---|---|---|---|---|
| K2-Horizon-0.9B | Qwen3.5-0.8B | OpenBMB-1B | Qwen3.5-2B | |
| # Params | 0.9B | 0.8B | 1B | 2B |
| # Activated params | 0.9B | 0.8B | 1B | 2B |
| Architecture | Dense | Dense | Dense | Dense |
| Math | ||||
AIME 2025 Competition mathematics | 41.7 | 1.0 | 40.4 | 34.2 |
AIME 2026 Competition mathematics | 48.5 | 0.2 | 40.4 | 38.8 |
HMMT Feb 2026 Competition mathematics | 25.8 | 0.6 | 23.3 | 22.7 |
| Scientific Reasoning | ||||
GPQA Diamond Graduate-level science QA | 27.3 | 11.9 | 26.3 | 54.9 |
| Coding | ||||
HumanEval+ Code generation | 79.9 | 16.5 | 65.2 | 75.6 |
MBPP+ Code generation | 68.0 | 35.4 | 60.6 | 67.7 |
LiveCodeBench v6 Competitive coding | 37.4 | 6.6 | 33.5 | 29.8 |
| Agents | ||||
BFCL v4 Function calling | 28.0 | 25.3 | 25.2 | 43.6 |
Scores in %. Bold highlights K2-Horizon-0.9B; Qwen3.5-2B is included as a larger reference model. Protocol and provenance details are in the Technical Appendix.
| K2-Horizon-0.9B | IFEval (Prompt) | GSM8K | MBPP | MMLU-Pro | GPQA-Diamond | BBH (3-shot) | AIME 26 (avg @ 4) | Average |
|---|---|---|---|---|---|---|---|---|
| GGUF-BF16 | 74.6 | 87.7 | 75.2 | 47.2 | 29.2 | 36.4 | 61.6 | 58.8 |
| GGUF-Q4_K_M | 72.2 | 85.9 | 73.8 | 42.9 | 28.7 | 26.1 | 45.0 | 53.5 |
| GGUF-Q5_0 | 73.0 | 87.8 | 66.6 | 45.6 | 29.2 | 35.4 | 50.8 | 55.5 |
| GGUF-Q5_K_M | 74.8 | 86.5 | 75.6 | 47.0 | 22.7 | 36.1 | 54.1 | 56.7 |
| GGUF-Q6_K | 70.4 | 88.6 | 73.2 | 47.4 | 27.2 | 37.5 | 50.8 | 56.4 |
| GGUF-Q8_0 | 75.0 | 89.0 | 73.0 | 48.6 | 28.2 | 37.5 | 54.1 | 57.9 |
vLLM (source at PR #53806, commit d9fd5f11):
vllm serve IFM/K2-Horizon-0.9B \
--trust-remote-code \
--dtype bfloat16 \
--max-model-len 131072 \
--hf-overrides '{"rope_parameters":{"rope_type":"yarn","factor":16.0,"original_max_position_embeddings":8192}}' \
--gpu-memory-utilization 0.85 \
--tensor-parallel-size 1 \
--reasoning-parser k2_horizon \
--enable-auto-tool-choice \
--tool-call-parser k2_horizon
SGLang, from a source checkout that includes sgl-project/sglang#37654. This is the recipe validated in the SGLang K2 Horizon cookbook:
sglang serve \
--model-path IFM/K2-Horizon-0.9B \
--revision 9b9ec1f7e17f62ed218df542687a144116219d84 \
--tp 1 \
--dtype bfloat16 \
--attention-backend fa3 \
--reasoning-parser k2_horizon \
--host 0.0.0.0 \
--port 30000
[!Tip] Recommended settings:
reasoning_effort="high",temperature=0.6,top_p=0.95, and at least 32,768 output tokens. Reasoning depth is selected per request throughchat_template_kwargs. Thinking is returned inreasoning_contentand the answer incontent.
from openai import OpenAI
client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY")
response = client.chat.completions.create(
model="IFM/K2-Horizon-0.9B",
messages=[{"role": "user", "content": "Explain the result step by step."}],
temperature=0.6,
top_p=0.95,
max_tokens=32768,
extra_body={"chat_template_kwargs": {"reasoning_effort": "high", "tool_call_format": "xml"}},
)
message = response.choices[0].message
print("Reasoning:", getattr(message, "reasoning_content", None))
print("Answer:", message.content)
Our model supports multiple tool calls formats, which can be changed with chat_template_kwargs. The supported values are json, xml, and xml_typed . The default is xml. Keep --tool-call-parser k2_horizon enabled to parse the selected format.
Validated with Transformers 5.15.0, PyTorch 2.13.0, Safetensors 0.8.0.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "IFM/K2-Horizon-0.9B"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="auto", dtype="bfloat16", low_cpu_mem_usage=True, trust_remote_code=True
)
inputs = tokenizer("Explain why long-context evaluation is difficult.", return_tensors="pt").to(model.device)
inputs.pop("token_type_ids", None)
outputs = model.generate(**inputs, max_new_tokens=32768, temperature=1.0, top_p=0.95, do_sample=True)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
high. All reported results use high reasoning effort. Pass {"chat_template_kwargs": {"reasoning_effort": "high"}} on every request; medium and low trade accuracy for speed and are not recommended for evaluation.temperature=0.6, top_p=0.95.k2_horizon reasoning parser for chat, and add the k2_horizon tool-call parser for agent use. Leave both off for plain completion-style generation.main is the MOPD release checkpoint; mid1_75k and mid2_47k preserve the context-extension stages.@misc{k2horizon2026,
title = {Introducing K2 Horizon: Frontier Performance, Radically Open},
author = {{IFM Team}},
year = {2026},
url = {https://ifm.ai/blog/k2/},
}