Model reference · open weights
Blaze-SFT is an open-weight language model from SurjoLabs. 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 | SurjoLabs |
|---|---|
| Type | Language models |
| Task | Text gen |
| Parameters (lead) | 48M |
| Context | 2k tokens |
| Runs with | transformers |
| Based on | SurjoLabs/Blaze |
| Released | 2026-09-01 |
| Popularity | 1k downloads / month |
| Licence | Open weights |
About
Blaze-SFT is the instruction-tuned variant of SurjoLabs/Blaze, a 48.3M parameter causal language model.
Blaze-SFT was full-parameter fine-tuned on the Smol-Smoltalk dataset at an extended context window of 2,048 tokens (doubled from the 1,024-token base context). It scores 14.84 on the Intelligence Index, keeping over 96% of its base reasoning capabilities while adding basic conversational and chat ability.
This release also fixes critical bugs in modeling_blaze.py so the model actually generates text properly with Hugging Face generate(), fixing broken single-token KV caching, cache crashes in Transformers 5.x, and PCIe GPU-to-CPU stalls.
| Parameter | Value |
|---|---|
| Total Parameters | 48,251,136 |
| Physical Layers | 14 (1 prelude + 12 recurrent + 1 coda) |
| Recurrent Passes | 2 (effective computational depth: 26 layers) |
| Hidden Dimension | 512 |
| Intermediate Size | 1,536 |
| Attention Heads | 8 Query, 4 Key-Value (2:1 GQA) |
| Head Dimension | 64 |
| Vocabulary Size | 8,192 (tied embeddings) |
| Context Length | 2,048 tokens |
| Fine-Tuning Dataset | HuggingFaceTB/smol-smoltalk |
We fixed several issues in the original modeling code to make it ready for real use:
is_causal was previously set to True in PyTorch SDPA. This caused the model to only attend to token 0 and masked out all previous tokens, completely breaking text generation. We set is_causal = False for decode steps so it correctly attends to the full cached history.past_kv.update() on recurrent passes threw an IndexError: list index out of range because slots 15 to 26 were never allocated. We now pre-allocate missing slots dynamically and track recurrent passes cleanly via _current_pass.prepare_inputs_for_generation to slice position_ids, cache_position, and input_ids cleanly. Handled num_logits_to_keep = None to stop generate() from crashing with a TypeError.torch.all(attention_mask == 1) check inside the attention layer that was stalling the GPU 26 times per token. Replaced memory-allocating repeat_interleave() with zero-copy view expansions, and added native FlashAttention support.Evaluated 0-shot using normalized accuracy (acc_norm):
| Benchmark | Blaze (Base) | Blaze-SFT | Metric |
|---|---|---|---|
| PIQA | 62.51% | 61.75% | acc_norm |
| ARC-Easy | 41.84% | 41.29% | acc_norm |
| ArithMark-3.0 | 37.80% | 37.90% | acc_norm |
| HellaSwag | 31.84% | 31.86% | acc_norm |
| ARC-Challenge | 24.91% | 24.23% | acc_norm |
| Intelligence Index | 15.45 | 14.84 | Normalized Composite |
The Open SLM Intelligence Index adjusts each raw score above the random-chance floor:
Normalized Score = 100 * (score - chance) / (100 - chance)
Intelligence Index = (9.14 + 10.35 + 23.50 + 0.65 * 17.20) / 3.65 = 14.84
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "SurjoLabs/Blaze-SFT"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto",
)
messages = [
{"role": "user", "content": "Explain why the sky is blue in two simple sentences."}
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
outputs = model.generate(
**inputs,
max_new_tokens=64,
do_sample=True,
temperature=0.7,
top_p=0.9,
eos_token_id=tokenizer.eos_token_id,
)
response = outputs[0][inputs.input_ids.shape[1]:]
print(tokenizer.decode(response, skip_special_tokens=True))
MIT
From the published model card. Full card on the HuggingFace links in the sidebar.
Using it via the API
Once AxForge deploys blaze-sft for you, it answers on the OpenAI-compatible API — the same base URL and keys as every other model. (blaze-sft 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":"blaze-sft","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.