Text Generation
Transformers
Safetensors
GGUF
English
llama
slm
tiny
chat
raspberry-pi
conversational
text-generation-inference

Pico 1.2

Pico 1.2 is a tiny chat language model with 460,608 parameters (about 1 MB in f16), made by Convergent. It is the second version of Pico 1: almost twice the parameters, 42% more training chats and a longer training run. It is still small enough to run on any Raspberry Pi, or on almost anything else with a CPU.

It is still a toy. It holds simple, friendly small talk in English, now reliably knows its name and who made it, and says that it cannot write code. It has no real knowledge and often answers off-topic. Please do not rely on it for anything.

Created by Eron. Trained from scratch with MakeAI.

What changed since 1.1

Pico 1.1 Pico 1.2
Parameters 254,400 460,608
Layers / hidden / MLP 3 / 64 / 128 6 / 64 / 200
Training chats 108,735 153,974
Training 18,000 steps, ~295M tokens 30,000 steps, ~492M tokens
Validation loss 3.00 (perplexity 20.1) 2.73 (perplexity 15.4)
Token accuracy 39.0% 43.8%

The validation sets of the two versions are not identical (1.2 adds chats from the new data), so the comparison is indicative, not exact.

Real answers of both versions to the same questions (Ollama, temperature 0):

User: Hi! Who are you? Pico 1.1: I'm not a tiny AI, but I'm here to chat with you. Pico 1.2: I'm Pico 1, a tiny AI made by Eron. I like to chat!

User: Who made you? Pico 1.1: I was a tiny AI, but I'm glad to chat with you. Pico 1.2: I was made by Eron.

User: Do you like dogs? Pico 1.1: I love chatting about music! I'm friendly and cheerful. Pico 1.2: I love chatting about animals! What's your favorite?

User: Tell me about the moon. Pico 1.2: Once upon a time, there was a little squirrel who loved to play hide and seek. But one day, the squirrel decided to explore the forest.

The last one shows the typical failure: fluent, friendly, and about something else.

Model

Parameters 460,608
Architecture Llama-style decoder (RMSNorm, SwiGLU, RoPE, tied embeddings)
Layers / hidden / MLP 6 / 64 / 200
Attention heads 2 (head dim 32)
Context 512 tokens
Vocabulary 2,048 (byte-level BPE, the same tokenizer as Pico 1)
Language English

Files

  • model.safetensors, config.json, tokenizer files: Hugging Face transformers format (LlamaForCausalLM).
  • pico-1.2.gguf: GGUF (f16) for Ollama and llama.cpp.
  • Modelfile: Ollama model file with the chat format and stop tokens.

Usage

Ollama

Download pico-1.2.gguf and Modelfile into one folder, then:

ollama create pico-1.2 -f Modelfile
ollama run pico-1.2

transformers

from transformers import AutoTokenizer, AutoModelForCausalLM

tok = AutoTokenizer.from_pretrained("Convergent-ch/Pico-1.2")
model = AutoModelForCausalLM.from_pretrained("Convergent-ch/Pico-1.2")

ids = tok.apply_chat_template([{"role": "user", "content": "Who made you?"}],
                              add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=40, do_sample=False)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))
# I was made by Eron.

Chat format

<|bos|><|user|>
Hello!<|end|>
<|assistant|>

Generation stops at <|end|>. Low temperatures (0 to 0.3) work best.

Training

Trained from scratch on one RTX 3060 Ti (8 GB) with MakeAI: 30,000 steps with batch size 32 x 512 tokens (about 492M tokens, about 20 passes over the data), AdamW, learning rate 1e-3 with cosine decay, bf16. The training itself took 16.5 minutes. Final validation loss 2.73 (perplexity 15.4), token accuracy 43.8%.

Training data, 153,974 chats (about 23.9M tokens):

  • TinyDialogues (MIT): 89,934 one-on-one conversations between a child and one other person, the child as the user. Generated with GPT-4 by the dataset authors.
  • Everyday Conversations (Apache 2.0): 2,859 chats, generated with Llama 3.1 70B Instruct by the dataset authors.
  • Smol-SmolTalk (Apache 2.0): 53,359 short chats from all four training shards (1.1 used only the first), only the magpie-ultra-short, everyday-conversations and openhermes-50k parts, without code, math or lists. Parts of it were generated with Llama 3.1 by the dataset authors.
  • About 900 identity chats about Pico 1 itself, generated locally with Qwen3 8B (Apache 2.0), repeated 6 times, plus 4,000 short template chats with its exact name and creator.

Limitations

  • At this size the model mainly learns the style of a conversation, not facts. Answers are often unrelated to the question.
  • It knows its name and creator most reliably with greedy decoding; with sampling it drifts.
  • Some replies sound like a parent or child talking, because most of the data comes from child-directed dialogues.
  • No math: asked "What is 2 plus 2?", it answers with its name.
  • English only. Short chats only: the context is 512 tokens.
  • No safety tuning. Do not use it in products or for advice of any kind.

License

Apache 2.0.

Downloads last month
15
Safetensors
Model size
461k params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train Convergent-ch/Pico-1.2