TinyBrainBot-360M-A75M-v5.1-Instruct

One small model for chat, instructions, reasoning and math, now with line breaks and a name. A 383M-parameter mixture-of-experts model (24 experts per layer, 4 active, so 75M parameters work per token), trained from scratch. It loads as a standard MixtralForCausalLM (no custom code).

New in v5.1:

  • Line breaks. Earlier TinyBrainBot models on this tokenizer never saw one, so lists came out as one long line. This one writes real bullet points and numbered lists.
  • It knows who it is: "I'm TinyBrainBot, a small AI language model made by nkthebass."
  • A stronger base: TinyBrainBot-360M-A75M-v5.1-Base (ARC-Easy 59, ARC-Challenge 36).

Try it in your browser: the Q8_0 GGUF runs locally on your device, and nothing you type is sent anywhere.

Scores

v5.1-Instruct (this) v5-Instruct (previous) SmolLM2-360M-Instruct
IFEval prompt-level strict 28.3 25.1 32.9
IFEval instruction-level strict 40.8 37.6 44.2
Open SLM Leaderboard Intelligence Index 27.94 27.82
  (raw acc) 25.80 26.07

IFEval was run with lm-eval and the chat template, greedy, with the <think> block removed before scoring. The Index uses the full HellaSwag / ARC / PIQA sets plus ArithMark-3, 0-shot.

Benchmark (0-shot, full set) acc_norm (raw acc)
HellaSwag 38.75 33.23
ARC-Easy 59.01 62.58
ARC-Challenge 35.92 33.96
PIQA 66.27 65.51
ArithMark-3 49.40 49.40

Math in chat (greedy, exact final answer, 25 problems each):

2-digit add 2-digit sub 2-digit mul 3-digit add 3-digit sub 4-digit add word problems
100% 100% 100% 100% 100% 100% 21/24 (short add/subtract/multiply stories)

Safety (held-out prompts): it declines 97% of harmful requests (100% of violent or self-harm ones) and wrongly refuses 3% of benign ones.

Quick start

from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "nkthebass/tinybrainbot-360m-a75m-v5.1-instruct"
tok = AutoTokenizer.from_pretrained(repo)
model = AutoModelForCausalLM.from_pretrained(repo)
msgs = [{"role": "user", "content": "Answer in exactly three bullet points: why is exercise good for you?"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=200)        # defaults from generation_config.json
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))

GGUF (llama.cpp, LM Studio, Jan, Ollama): Q8_0 (409 MB), Q4_K_M (239 MB) or F16 (768 MB). The chat template is embedded, chats tokenize exactly like transformers (line breaks included), and greedy F16 output matches transformers token for token.

llama-cli -m tinybrainbot-360m-a75m-v5.1-instruct-Q8_0.gguf -cnv --temp 0.4 --top-p 0.9 --repeat-penalty 1.15 --logit-bias 241-inf --logit-bias 255-inf

Recommended sampling: temperature 0.4, top-p 0.9, repetition penalty 1.15. The two --logit-bias flags block the byte tokens that start every emoji: the tokenizer has no emoji pieces, so the model would otherwise spell them out byte by byte.

<think> blocks are plain text, not special tokens. Strip them if you only want the answer:

import re; answer = re.sub(r"<think>.*?</think>", "", reply, flags=re.S).strip()

What it does well (and doesn't)

  • Formatting: "exactly three bullet points" gives three bullets on three lines; "reply only yes or no" gives one word.
  • Math: column arithmetic with every carry and borrow written out, and word problems in a <think> scratchpad.
  • Conversation: it remembers what you told it ("You said you play the guitar") and stays supportive on personal topics.
  • Identity: asked who it is or who made it, in many different wordings, it answers as TinyBrainBot by nkthebass.
  • Not yet: asked later in a conversation, a word problem often gets answered without the scratchpad and is right only about half the time (in a fresh chat: 11 of 12), and "who are you?" after a long answer can get a generic reply. It sometimes multiplies when a story says "in total"; it can agree with a wrong premise ("Sydney is the capital of Australia, right?"); it doesn't always follow exact counts; and at 75M active parameters it makes up facts.

Unedited sample conversations, including mistakes, are in conversation_samples.md.

Training

  1. Pretraining. TinyBrainBot-360M-A75M-v5.1-Base: 17.9B tokens, the last 1.2B of them school-level knowledge, trained with line breaks.
  2. SFT (0.39B tokens), one mix for every skill:
Part Share What
Chat 40% smol-smoltalk, multi-turn conversations, recall and follow-up dialogues, WildChat (refusals removed)
Math 25% column-routine arithmetic (wide numbers, negatives, 3x3 multiplication), cue-first word problems, generated scratchpad word problems
Reasoning 25% <think> reasoning traces, open-ended reasoning, safety-aware reasoning, with plain-chat ballast so it doesn't think on "Hi"
Instruction following 10% Tulu 3 persona instruction-following
Identity +0.4% 5,000 templated chats about who it is, who made it, and what it can't do

There is no DPO stage this time: we ran one, and it came out slightly worse on IFEval than SFT alone.

No benchmark training or test data was used, and no GSM8K-derived sets.

Limitations

  • English only. It confabulates facts, so check anything important.
  • Extra spaces are still collapsed, so it can't keep code indentation.
  • 2,048-token context.
Downloads last month
774
Safetensors
Model size
0.4B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for nkthebass/tinybrainbot-360m-a75m-v5.1-instruct

Quantized
(3)
this model
Quantizations
2 models

Datasets used to train nkthebass/tinybrainbot-360m-a75m-v5.1-instruct

Space using nkthebass/tinybrainbot-360m-a75m-v5.1-instruct 1

Collection including nkthebass/tinybrainbot-360m-a75m-v5.1-instruct

Evaluation results