Model reference · open weights
HRM-Text is an open-weight language model from sapientinc. AxForge deploys and operates it for you on dedicated EU-owned hardware — with the licence handled where one is required.
Available as managed deployment — configured and operated for you on dedicated EU hardware, quoted per deployment.
What it is
| Released by | sapientinc |
|---|---|
| Type | Language models |
| Task | Text gen |
| Parameters (lead) | 1.2B |
| Context | 4k tokens |
| Runs with | transformers |
| Released | 2026-05-17 |
| Popularity | 26k downloads / month |
| Licence | Open weights |
About
A 1 B-parameter language model checkpoint built on the Hierarchical Reasoning Model (HRM) architecture, trained by Sapient Intelligence from scratch on structured public datasets.
HRM is a dual-timescale recurrent architecture: two Transformer modules (H = high-level / slow, L = low-level / fast) iterate over the same input embeddings for H_cycles × (L_cycles + 1) steps, with additive state injection (z_L + z_H). This gives effectively unbounded compute depth at bounded parameter count.
This is a pre-alignment model checkpoint, not a chat or instruction-following assistant. It is pre-trained on a PrefixLM objective with condition prefix tokens and has not been multi-turn dialogue tuned, long-context adapted, instruction-tuned, RLHF-trained, or otherwise aligned for assistant-style use. If you want to use HRM-Text like a chat model, you would need to perform further alignment, such as SFT and/or RL, on task-specific data. This checkpoint is meant to serve as a starting point, not a finished assistant.
Practical guidance for prompting the raw checkpoint:
direct condition with 2–8 few-shot in-context examples. direct + few-shot is the strongest zero-extra-training setup we have measured; pure zero-shot is noticeably weaker.synth,cot. This is one composite prefix, not two alternatives — at tokenization time the comma-separated tags are mapped to their prefix tokens and concatenated, in order, into a single prefix block. So synth,cot produces the two-token prefix (synth first, then cot), wrapped in the usual … `` envelope. Under this composite the model exhibits some chain-of-thought / instruct-like behavior — enough to answer many zero-shot math and reasoning prompts in a step-by-step style — but quality is uneven and below an instruction-tuned model of comparable size. Treat this "instruct" ability as a side effect of the pre-training mix, not a guaranteed capability.The four single condition tags and their assigned tokenizer special tokens (token names are legacy implementation details; you can compose any subset, comma-separated, in the order you want them emitted):
direct → `` — direct answer, no CoTcot → `` — chain-of-thoughtnoisy → `` — noisy / web-crawl stylesynth → `` — synthetic / curated styleRequires transformers >= 5.9.0, which ships native support for the hrm_text model class:
pip install --upgrade "transformers>=5.9.0"
| Field | Value |
|---|---|
| Parameters | ~1 B |
| Hidden size | 1536 |
| Layers (per H / L stack) | 16 |
| Attention heads | 12 (MHA, head_dim 128) |
| H_cycles × L_cycles | 2 × 3 |
| Max sequence length | 4096 |
| Vocabulary | 65,536 |
| Embedding | Scaled (lecun_normal) |
| Position encoding | RoPE (theta 10000) |
| Activation | SwiGLU |
| Normalization | Parameterless Pre-RMSNorm |
| Attention | Gated (sigmoid output gate) |
| Training unique tokens | 40 B |
| Optimizer | AdamATan2 (beta 0.9 / 0.95, wd 0.1, EMA 0.9999) |
| LR | 2.2e-4 (warmup 2000 steps) |
| Global batch | 196,608 tokens |
| dtype | bfloat16 |
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "sapientinc/HRM-Text-1B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.bfloat16,
).cuda().eval()
# synth,cot composite — reasoning / CoT style (see Disclaimer for other modes)
condition = ""
prompt = f"{condition}Explain why the sky is blue."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
# Mark the prompt as a single bidirectional prefix block — see "PrefixLM mask" below.
inputs["token_type_ids"] = torch.ones_like(inputs["input_ids"])
with torch.no_grad():
out = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(tokenizer.decode(out[0], skip_special_tokens=False))
token_type_idsHRM-Text was pre-trained with a PrefixLM mask: prompt tokens attend bidirectionally to each other, response tokens attend causally. To match the training-time forward at inference you must tell the model which positions are prefix.
In the current Transformers port the mask is controlled by token_type_ids:
token_type_ids[i] == 1 → position i is part of the prefix block (bidirectional within the block).If you omit token_type_ids, attention falls back to pure causal, which does not match the pre-training distribution and will give noticeably worse logits. The simplest correct call passes token_type_ids = torch.ones_like(input_ids), marking the entire input prompt as one bidirectional prefix block — exactly how training-time prefill ran.
The recurrent core (per forward pass, in inference mode):
z_H = embed(input_ids) * embedding_scale
z_L = z_L_init.expand_as(z_H)
for _ in range(H_cycles):
for _ in range(L_cycles):
z_L = L_module(z_L + z_H)
z_H = H_module(z_H + z_L)
return z_H
Both stacks share the same Transformer block design (gated attention, RoPE, SwiGLU, pre-RMSNorm); see Model details above for shapes.
Pre-trained on a sampled mixture of publicly available text corpora. The full dataset composition, sampling weights, and preprocessing pipeline are open-sourced:
From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys hrm-text for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (hrm-text below is illustrative; you get the exact model name on deployment.)
$ curl -sS https://api.axforge.ai/v1/chat/completions \
-H "Authorization: Bearer $AXFORGE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"hrm-text","messages":[{"role":"user","content":"Hello"}]}'
Create an account — your API key is available in the console. 3M free tokens every 30 days with every new account.