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
-
GGUF
Hardware compatibility
Log In to add your hardware

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support