Instructions to use PursuitOfDataScience/Argonne-4.0-think with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use PursuitOfDataScience/Argonne-4.0-think with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="PursuitOfDataScience/Argonne-4.0-think", trust_remote_code=True) messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("PursuitOfDataScience/Argonne-4.0-think", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use PursuitOfDataScience/Argonne-4.0-think with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "PursuitOfDataScience/Argonne-4.0-think" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "PursuitOfDataScience/Argonne-4.0-think", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/PursuitOfDataScience/Argonne-4.0-think
- SGLang
How to use PursuitOfDataScience/Argonne-4.0-think 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 "PursuitOfDataScience/Argonne-4.0-think" \ --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": "PursuitOfDataScience/Argonne-4.0-think", "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 "PursuitOfDataScience/Argonne-4.0-think" \ --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": "PursuitOfDataScience/Argonne-4.0-think", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use PursuitOfDataScience/Argonne-4.0-think with Docker Model Runner:
docker model run hf.co/PursuitOfDataScience/Argonne-4.0-think
Argonne 4.0-think
Argonne 4.0-think is a 1.04B-parameter reasoning model trained from scratch, built on
argonne-4.0-base. It emits an
explicit <think>โฆ</think> trace and then a \boxed{} answer.
It is the reasoning model of the 4.0 line, whose thesis is data efficiency: 4.0-base reaches its quality on 65.12B tokens at 1.04B parameters. Its larger sibling Argonne-3.5-think (2.88B) remains the stronger reasoner โ and was in fact this model's teacher (see Training). At 2.8ร fewer parameters this model gives up 4.93 points on the four-pool gate below.
Evaluation
Greedy decoding, paired against the comparison model on identical items within the same evaluation
run, exact McNemar on the paired outcomes. n = 1000 (ASDiv, SVAMP), 500 (GSM-Plus, MAWPS).
What the post-training campaign bought
Against its own starting point โ the SFT โ DPO โ CoT-SFT model, before any distillation:
| pool | CoT-SFT start | this model | delta | p |
|---|---|---|---|---|
| ASDiv | 64.30 | 69.80 | +5.50 | 1.4e-04 |
| SVAMP | 49.10 | 59.80 | +10.70 | 6.3e-11 |
| GSM-Plus | 27.20 | 36.00 | +8.80 | 4.1e-05 |
| MAWPS | 51.20 | 59.80 | +8.60 | 2.0e-05 |
| four-pool pooled | 50.87 | 59.17 | +8.30 | 1.0e-21 |
Against the 2.88B sibling
| pool | Argonne-3.5-think (2.88B) | 4.0-think (1.04B) | delta | p |
|---|---|---|---|---|
| ASDiv | 73.60 | 69.80 | โ3.80 | 1.1e-02 |
| SVAMP | 68.10 | 59.80 | โ8.30 | 6.9e-07 |
| GSM-Plus | 40.80 | 36.00 | โ4.80 | 5.7e-02 |
| MAWPS | 60.40 | 59.80 | โ0.60 | 8.1e-01 |
| four-pool pooled | 64.10 | 59.17 | โ4.93 | 3.0e-08 |
The deficit is concentrated in SVAMP and ASDiv; MAWPS is statistically indistinguishable.
Test-time compute, measured on these weights
| pool | greedy | self-consistency@8 | budget-extend | pass@8 |
|---|---|---|---|---|
| ASDiv | 69.80 | 78.30 | 72.80 | 87.80 |
| SVAMP | 59.80 | 70.10 | 62.10 | 85.60 |
| GSM-Plus | 36.00 | 44.80 | 36.60 | 63.40 |
| MAWPS | 59.80 | 64.00 | 62.40 | 71.20 |
| pooled | 59.17 | 67.60 | 61.47 | 80.23 |
Sampling is worth more than a bigger single pass. Self-consistency at K=8, temperature 0.8 adds +8.43 pooled โ most of the way to closing the gap to the 2.88B sibling's greedy 64.10. pass@8 of 80.23 against a greedy 59.17 says the deficit is probability mass, not reach: the model can very often find the answer, and selection is what is missing.
Which pools, and why not the usual ones
GSM8K is excluded, not unreported-by-accident. It is contaminated for Argonne reasoning models (the CoT-SFT mix saw ~94% of its test set). MATH-500 is also excluded for this line: 17 of its 319 items have a near-duplicate in the training mix, measured by Jaccard near-dup search, so it is not a clean pool for any model on this branch. The four pools above are clean by that same measure. GSM-Plus is adversarially perturbed GSM8K test, and the mix's GSM8K tier was audited to be 4,338/4,338 from the train split with zero test items.
General capability is not characterized for this model. The base was evaluated with lm-eval; the reasoning fine-tune was not. Do not read the arithmetic numbers above as evidence about general ability in either direction.
Training
| stage | data | detail |
|---|---|---|
| base | โ | argonne-4.0-base, 65.12B tokens, ctx 65,536 |
| 1 โ SFT | UltraChat 200k | 1 epoch, effective batch 20 |
| 2 โ DPO | argilla/dpo-mix-7k | effective batch 8 |
| 3 โ CoT-SFT | short-trace mix, 28,428 rows | 1 epoch, effective batch 12 โ the 50.87 starting point above |
| 4 โ on-policy distillation | the student's own rollouts, correct-labelled | per-token reverse-KL from Argonne-3.5-think as teacher, iterated over several rounds |
| 5 โ CE repair | 24,787 of the model's own correct traces | plain cross-entropy, LR 3e-6, 1,055 steps, seed 46 |
Two things in that table did the work, and both were counter-intuitive:
Stage 4 is distillation from the larger sibling, on the student's own outputs. Per-token reverse-KL against Argonne-3.5-think, computed at states the student actually visits rather than on the teacher's traces. Imitating the teacher's traces directly did not transfer; matching its per-token distribution at the student's own states did.
Stage 5's learning rate is the whole stage. The same cross-entropy pass on the same data at LR 1e-5 damages the model; at 3e-6 it helps. And ordering matters โ running the repair last, after distillation, beat running it earlier.
The final four candidate arms of the campaign are statistically tied on the gate (this one at 59.17, the others at 59.60 / 59.10 / 59.00, all p โฅ 0.35 against it). This checkpoint was released as the recorded release candidate; the ranking within that group is noise, not a preference.
Inference
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "PursuitOfDataScience/Argonne-4.0-think"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id, trust_remote_code=True, dtype=torch.bfloat16
).cuda()
messages = [{"role": "user", "content": "A shop sells pencils 3 for $2. How much do 12 pencils cost?"}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
ids = tokenizer(text, return_tensors="pt")["input_ids"].cuda()
out = model.generate(ids, max_length=ids.shape[1] + 512, do_sample=False)
print(tokenizer.decode(out[0][ids.shape[1]:], skip_special_tokens=True))
For throughput, prefer vLLM/SGLang over .generate().
Usage notes
- Load with
trust_remote_code=True;config.jsoncarries anauto_mapso the customargonne2classes resolve without manual setup. - The custom
generatetakesmax_length(total length), notmax_new_tokens. eos_token_idis 151645 (<|im_end|>) so the assistant turn ends cleanly. Verified on the published files: a chat-templated prompt with noeos_token_idargument terminates on its own in 25 tokens.lm_head.weightis reported missing on load. Expected and benign โ embeddings are tied.- Traces are short by design (~235 think tokens on ASDiv greedy). This line's measured result is that lengthening traces does not help it; budget-extend adds only +2.30 pooled.
interleaved_local_attentionis published asfalseandlocal_attention_windowasnull. This is deliberate and matches argonne-4.0-base:model.pyapplies the sliding window only on the flash-attn-2 path, every Argonne pretrain ran on flash-attn-4 (which does not exposeflash_attn.flash_attn_interface), so the window was never active and these weights only ever saw full attention. Publishing the flags enabled would hand a 256-token window on odd layers to any user who happens to have flash-attn-2 installed, on weights that never saw one.
Limitations
- Context length 65,536 is inherited from the base and was not re-measured after the reasoning fine-tune. The base's window is trained rather than extrapolated (substantiated at its release by position-bucketed NLL on held-out arXiv); the fine-tuning stages ran at a 4,096-token block, and long-context behaviour after them is uncharacterized. Treat long inputs as untested here.
- Selection, not reach, is the binding constraint. pass@8 80.23 vs greedy 59.17 โ use self-consistency if you can afford K samples.
- pass@K is a noisy metric on this line. Treat it as a ceiling indicator; select on greedy or self-consistency.
- Grade-school and early-competition arithmetic word problems are the measured domain. Code, tool-calling and general-purpose chat are not characterized.
- General capability is unmeasured for this checkpoint (see Evaluation).
- 1.04B parameters on a 65.12B-token base โ far below frontier compute, and 2.8ร smaller than Argonne-3.5-think, which beats it by 4.93 points.
- No safety alignment beyond what UltraChat and the preference data provide.
Source code
Everything is on the GitHub main branch โ
PursuitOfDataScience/ArgonneAI.
| file | role |
|---|---|
model.py |
the argonne2 architecture, identical to the copy in this repo |
reasoning/thinking_training.md |
the full build log for the reasoning line |
reasoning/stage_a4_think_hf.py |
staged this repo, and documents every config fix applied (not yet on main) |
reasoning/hub_config_audit.py |
audits the live Hub config of every Argonne repo against the release invariants |
Citation
@misc{argonne40think,
title = {Argonne 4.0-think},
author = {Youzhi Yu},
year = {2026},
url = {https://huggingface.co/PursuitOfDataScience/Argonne-4.0-think}
}
- Downloads last month
- 248