What changed since 1.1
Table with columns: Pico 1.1, Pico 1.2 | 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
Table | |
|---|
| 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 Modelfileollama run pico-1.2
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.
<|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.