Instructions to use openbmb/JustRL-II-base-model with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use openbmb/JustRL-II-base-model with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="openbmb/JustRL-II-base-model") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("openbmb/JustRL-II-base-model") model = AutoModelForCausalLM.from_pretrained("openbmb/JustRL-II-base-model", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use openbmb/JustRL-II-base-model with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "openbmb/JustRL-II-base-model" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openbmb/JustRL-II-base-model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/openbmb/JustRL-II-base-model
- SGLang
How to use openbmb/JustRL-II-base-model with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "openbmb/JustRL-II-base-model" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openbmb/JustRL-II-base-model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "openbmb/JustRL-II-base-model" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "openbmb/JustRL-II-base-model", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use openbmb/JustRL-II-base-model with Docker Model Runner:
docker model run hf.co/openbmb/JustRL-II-base-model
JustRL-II Base Model
This is the RL initialization checkpoint used in the blog JustRL II: Scaling Small LLMs to 128K Reasoning with a Critic (䏿–‡ç‰ˆ).
It is the starting point of the mathematical-reasoning case study in that blog — the checkpoint that every run there (the standard-GRPO baseline, the full JustRL II recipe, and all ablations) is initialized from and evaluated against. It is not the post-RL model. We release it so that the blog's data pipeline and training recipe can be reproduced from the exact same starting weights.
What this checkpoint is
- A small language model that has already been trained to produce long chain-of-thought (thinking) responses. It emits its reasoning inside
<think> ... </think>before the final answer. - Before any RL, it scores about 61% on AIME 2025 under the blog's evaluation protocol (average over sampled responses, 128k-token generation budget).
- Starting from this checkpoint, the full JustRL II recipe reaches 81% on AIME 2025 in ~300 RL steps, while a standard GRPO baseline on the same data plateaus around 74% (see Figures 1, 2 and 8 of the blog).
- The blog's difficulty-recalibration step (Stage 3 of the data pipeline) is computed by rolling out this checkpoint 8 times per problem, so the released training set's difficulty tiers refer to this model's pass rates.
Files
| File | Notes |
|---|---|
pytorch_model.bin |
bf16 weights, single file |
config.json |
Llama-style architecture (LlamaForCausalLM), loads with stock transformers |
tokenizer.json, tokenizer_config.json, special_tokens_map.json |
tokenizer |
chat_template.jinja |
chat template with thinking-mode support (enable_thinking) |
Two end-of-sequence ids are configured (eos_token_id = [1, 130073]); pass both to your generation call or serving engine. config.json ships with max_position_embeddings = 65536; the RL runs in the blog use a 128k-token generation budget — refer to the blog for the long-context serving setup used there.
Usage
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "openbmb/JustRL-II-base-model"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id, torch_dtype=torch.bfloat16, device_map="auto"
)
messages = [{"role": "user", "content": "What is the sum of all positive divisors of 360? Think step by step."}]
text = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True, enable_thinking=True
)
inputs = tokenizer(text, return_tensors="pt").to(model.device)
inputs.pop("token_type_ids", None)
out = model.generate(
**inputs,
max_new_tokens=8192,
do_sample=True,
temperature=1.0,
eos_token_id=[tokenizer.eos_token_id, 130073],
)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False))
For evaluation or RL rollouts, serve it with vLLM or SGLang as a standard Llama-architecture model, e.g.
vllm serve openbmb/JustRL-II-base-model --dtype bfloat16
Intended use
- Reproducing the JustRL II recipe and its ablations from the same initialization.
- Research on long-CoT RL for small models: credit assignment, critic diagnostics, data difficulty calibration.
This checkpoint has not been aligned for general assistant use and has only been evaluated on mathematical reasoning. It may produce very long outputs; set a generation budget appropriate to your hardware.
The JustRL II recipe (summary)
The blog trains this checkpoint with a critic-equipped GRPO recipe:
- Data: a three-stage pipeline audits ~100k open-source math problems (DAPO-Math, DeepScaleR, DeepMath) for solvability, re-checks labels with independent strong-model solutions, and removes problems this checkpoint already solves 8/8 — leaving 32,412 problems in the training set.
- Algorithm: GRPO's group structure and dynamic sampling are retained; a learned value model (initialized from the policy, bias calibrated to the pool pass rate) provides token-level advantages through GAE with a length-adaptive λ; tail-only overlong control limits excessive rollout length.
- Rollouts: 8 samples per prompt at temperature 1.0 with a 128k-token budget, graded by a variant of math-verify.
See the blog for the full specification, ablations, and critic diagnostics.
Citation
@misc{justrl2,
title = {JustRL II: Scaling Small LLMs to 128K Reasoning with a Critic},
author = {Pan, Haoxuan and Zhou, Chuyue and Li, Xin and others},
year = {2026},
howpublished = {\url{https://panhaoxuan.notion.site/justrl-ii-scaling-small-llms-to-128k-reasoning-with-a-critic}}
}
- Downloads last month
- -