Fable 2
A 89m-parameter language model trained from scratch on public-domain fables and folklore. Not a fine-tune, not a distillation, not a LoRA on somebody else's base β the weights start from random init and the whole corpus is out of copyright. Compliant with EU article 50. Runs on a laptop CPU. No GPU, no API, no account.
What it does well, and what it does not
It writes fable prose with the right cadence, and it produces genuinely well-formed morals β "Presence of mind and quick thinking can save you from treachery" is real output.
It mixes fables up. It will hand the cheese to a Deer, or put the Crow at the Fox's dinner table. At 64M parameters it has Aesop's vocabulary and rhythm without reliable bindings between characters and their stories. That is the honest ceiling of a model this size, not a bug to report.
Use it for fable-flavoured generation and as a small-model curiosity. Do not use it as a reference for what any particular fable actually says.
Running it
llama.cpp β the prompt template is baked into the GGUF, so conversation mode needs no configuration:
llama-cli -m fable-2-f16.gguf -cnv
LM Studio / Ollama / any GGUF runner β load the file and go.
Raw prompting, if you are driving it programmatically. Match this exactly; off-template the model reverts to continuing a story instead of answering:
### Instruction:
What is the moral of The Fox and the Grapes?
### Response:
Generation stops at EOS (<|endoftext|>, id 50256). Replies are short by
design β the training targets have a median of 26 words.
Specification
| Parameters | 63.8M |
| Architecture | GPT-2 style β learned positional embeddings, LayerNorm, GELU MLP, fused QKV, weight-tied embeddings |
| Layers / heads / width | 12 / 8 / 512 |
| Context | 512 tokens |
| Tokenizer | GPT-2 BPE, vocab 50257 |
| Biases | none (trained with bias off; the GGUF carries explicit zeros, which llama.cpp's gpt2 graph requires) |
| GGUF arch tag | gpt2 |
| Precision | f16 |
The context limit is hard. This model uses learned position embeddings, so unlike a RoPE model it cannot extrapolate or context-shift past 512 tokens β there is simply no embedding for position 513.
Training data
Public-domain texts from Project Gutenberg β multiple Aesop editions plus other out-of-copyright folklore and period fiction β with an instruction-formatted fable dataset folded in.
Everything the model saw is in the public domain. That is the point of the project, not an afterthought.
Licence
CC0 1.0 β public domain dedication. Do whatever you want with the weights.
Transparency
Output from this model is machine-generated.
The reference serving code applies an invisible zero-width watermark to replies,
built from U+200D / U+200C / U+2060 and shaped like the letter F. Output
from this GGUF is not watermarked β marking happens in the serving layer, and
once you have the weights you control the output path. Anyone running the file
directly gets unmarked text. That is inherent to releasing open weights, not an
oversight.
If you deploy this model in a service, EU AI Act transparency obligations attach to your deployment. The CC0 licence does not remove them β the Act's open-source carve-out explicitly excludes its Article 50 transparency rules.
Limitations and risks
- Confidently misattributes fables (see above). Do not cite it.
- 512-token context, hard limit.
- English only.
- Trained on 19th and early-20th century public-domain text, and carries the assumptions and language of that period.
- No safety tuning of any kind.
- Downloads last month
- -
16-bit