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.
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.
Use an exact branch name from the inventory with vLLM's --revision option. For example, --revision pretrain_600000 selects the final checkpoint of Pretraining, at step 600,000.
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 through chat_template_kwargs. Thinking is returned in reasoning_content and the answer in content.
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-call 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.
The table below lists the training stages in order and the purpose of each stage.
Training steps are counted within each stage or phase. Token budgets cover only the additional training in that stage or phase.
Each stage or phase continues from the final checkpoint of the preceding stage or phase.
During RL, training branches into multiple expert models, which are then merged, as described below.
Training stage
Training steps
Training tokens
Sequence length
Purpose
Pretraining
600000
5T
8K
Pretraining.
Midtraining — Stage 1
75000
393B
32K
Context extension.
Midtraining — Stage 2
47684
200B
128K
Context extension.
RL — Math1 expert
679
~0.4B
128K
Math RL (GRPO) from Midtraining Stage 2.
RL — Code1 expert
900
0.24B
128K
Code RL from Math1.
RL — Math2a expert
239
0.17B
128K
Math RL from Code1, no reference KL.
RL — Math2b expert
281
0.33B
128K
Continued math RL from Math2a with reference KL 1e-3.
RL — Code2 expert
640
0.19B
128K
Code RL from Math2b; also serves as the math/code teacher for MOPD.
RL — IF expert
1500
1.28B
128K
Instruction-following RL from Code2.
RL — STEM expert
500
0.25B
128K
STEM RL from Code2.
RL — Merge
—
—
—
Weight-space merge of Code2, IF, and STEM experts.
MOPD
250
0.12B
128K
Resolve structural interference and performance degradation caused by weight merging, aligning multi-domain specialist capabilities in the behavioral space via on-policy distillation.
Branch names below refer to this repository. Patterns containing * group branches by training stage or phase. The * is a placeholder for a training-step number, not a literal branch name. Intermediate checkpoint groups exclude the final checkpoint listed separately; a pattern does not imply that a checkpoint is available at every step.
For example, pretrain_600000 is the checkpoint saved at training step 600,000 within Pretraining stage, and is the final checkpoint of that stage. The numeric suffix is the step within the named stage, not the cumulative step across all training. Thus, mid_1_75000 refers to step 75,000 within Midtraining Stage 1.
For a partially released group, the available checkpoints and the remaining checkpoints are listed in the notes.
Checkpoint
Branch / repository
Status
Remaining items / expected availability
Pretrain Intermediate Checkpoints
pretrain_*
Available
N/A
Pretrain Final Checkpoint
pretrain_600000
Available
N/A
Midtrain Stage 1 Intermediate Checkpoints
mid_1_*
Available
N/A
Midtrain Stage 1 Final Checkpoint
mid_1_75000
Available
N/A
Midtrain Stage 2 Intermediate Checkpoints
mid_2_*
Available
N/A
Midtrain Stage 2 Final Checkpoint
mid_2_47684
Available
N/A
RL Math1 Expert Checkpoint
rl_math1
Available
N/A
RL Code1 Expert Checkpoint
rl_code1
Available
N/A
RL Math2a Expert Checkpoint
rl_math2a
Available
N/A
RL Math2b Expert Checkpoint
rl_math2b
Available
N/A
RL Code2 Expert Checkpoint
rl_code2
Available
N/A
RL IF Expert Checkpoint
rl_if
Available
N/A
RL Stem Expert Checkpoint
rl_stem
Available
N/A
RL Merged Final Checkpoint
rl_rl-merged
Available
N/A
RL MOPD Final Checkpoint
rl-mopd_249
Available
N/A
Important. Note:
Released K2-Horizon Hugging Face checkpoints (e.g. Huggingface) can be used for inference, evaluation, and downstream fine-tuning (including SFT).
Training behavior in the bundled Hugging Face implementation may differ from native xLLM, including the auxiliary load-balancing loss. To continue the original pretraining with xLLM's training behavior, use the native xLLM checkpoint and xLLM runtime.
Reasoning effort: always 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. medium and low effort settings are not recommended except for research on reasoning efforts.
Sampling parameters.temperature=0.6, top_p=0.95.
Output length. Allow at least 32,768 output tokens so reasoning is never cut off. Truncated reasoning is a failed response, not a shorter one.
Serving. Use the validated SGLang recipe above: BF16, TP=1, FlashAttention-3. Full recipes for every K2-Horizon size, with measured H200 latency and throughput, are in the SGLang cookbook.
Parsers. Enable the 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.
Revisions.main is the MOPD release checkpoint; mid1_75k and mid2_47k preserve the context-extension stages.
import os
os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com"
from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("IFM/K2-Horizon-0.9B", revision="fc5c9dc7c13df2360acee789fca2cd55d439e644")
model = AutoModelForCausalLM.from_pretrained("IFM/K2-Horizon-0.9B", revision="fc5c9dc7c13df2360acee789fca2cd55d439e644", device_map="auto")