Downloads · 30 days
260
17% of all-time downloads
SurjoLabs/Blaze-SFT
Blaze-SFT is a text generation model from SurjoLabs. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as mit.
Blaze-SFT is the instruction-tuned variant of SurjoLabs/Blaze, a 48.3M parameter causal language model.
Downloads · 30 days
260
17% of all-time downloads
All-time downloads
1.5K
Public
Parameters
48.3M
1.4 GB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors96.5 MB · 99%
From the Hugging Face model README
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