Instructions to use AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5") model = AutoModelForCausalLM.from_pretrained("AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5
- SGLang
How to use AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5 with Docker Model Runner:
docker model run hf.co/AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5
🪶 Parable-Granite-3B v2 — trained on genuine Claude Fable 5 agent traces
This is the full-precision safetensors repo (vLLM / transformers / fine-tuning). For llama.cpp, Ollama, and LM Studio use the GGUF repo.
A tiny local model that thinks before it answers — planning, reasoning, and terminal instincts distilled from real agent sessions.
~3 GB of RAM is all you need. Laptop, old GPU, Raspberry-Pi-class boxes with swap — the Q4 build runs anywhere. One command and you have a private, offline reasoning model on your machine:
ollama run hf.co/AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5-GGUF:Q4_K_M
📊 The headline — v2 is a different model
v2 is a full retrain: 13× more genuine Fable 5 trace data (11,574 sessions, 16.8M tokens — corpus published) and a rebuilt recipe (completion-masked loss, replay mixing, benchmark-gated checkpoints, seed-averaged weights).
| same harness, greedy, Q4_K_M | v1 | v2 (this release) |
|---|---|---|
| Dev pass-rate (MBPP subset, n=50) — base: 0.68 | — | 0.82 |
| Agent-artifact leakage (JSON blobs, phantom turns) | 6/34 | 0/34 |
| Strict 34-prompt coding qual — base: 27/34 | ~18/34 | 25/34 |
| HumanEval / HumanEval+ | 62.8 / 57.9 | 70.1 / 65.9 |
Clean answers, structured reasoning, agent instincts — and the transcript artifacts that leaked into v1's replies are gone. One trade, made on purpose: raw HumanEval-style function synthesis stays the base model's turf (81.7 vs 70.1) — v2 spends that capacity on agent behavior instead, and spends half as much as v1 did. Measurement notes below. 👇
🚀 Announcements
📌 Same links, new model. v2 replaces v1 in place — every existing Ollama command, script, and bookmark now serves v2. No migration, nothing to change.
🔮 v3 is already training. Rejection-sampled SFT: thousands of candidate solutions generated against executable tests, only verified passers enter the corpus. The goal is simple — above-base agent capability, not just clean behavior. Follow AnkitAI for the drop.
📦 Full family. This 3B is the smallest Parable. Need more headroom? 8B Granite, 8B Qwen, 4B Qwen — same recipe, no matter your hardware.
🚀 How to run it
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "AnkitAI/Parable-Granite-4.1-3B-Claude-Fable-5"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")
messages = [{"role": "user", "content": "Write a Python function that retries an HTTP request with exponential backoff."}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(inputs, max_new_tokens=3000, temperature=0.7, top_p=0.95, do_sample=True)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
GGUF quants (2.1-6.8 GB, runs in ~3 GB RAM): Parable-Granite-4.1-3B-Claude-Fable-5-GGUF
🧠 Thinking mode
Every answer opens with a <think>...</think> reasoning block — that's the Fable 5 heritage. llama.cpp's --jinja mode separates it automatically; strip it before showing replies to end users.
Sampling: temperature 0.7, top_p 0.95, and budget max_tokens generously (2500+) — trace-trained models think at length before answering.
🔬 Measurement notes
All numbers: identical llama.cpp harness, greedy decoding, Q4_K_M, base model measured on the same instrument. We train multiple seeds and ship the weight-average — single-run scores at 3B swing ±3 points on GPU nondeterminism alone, so most cards report their luckiest run; we ship the average and report the shipped weights' own numbers. Raw eval outputs live in this repo.
Which model should you use? Pure single-function code completion → the base model is genuinely strong there. Explanations, debugging, terminal workflows, structured reasoning, agent-style tasks → that's what Parable is trained on, and where v2 shines.
📚 What's new in v2 (training)
The recipe follows our ongoing tech report (in preparation):
- Completion-only loss masking (Hermes 3, Tülu 3) — loss on assistant tokens only, so the model learns to answer, not to imitate transcripts
- 30% replay mix of general instruction data (Luo et al., Biderman et al.) — the anti-forgetting lever
- Session re-segmentation + sanitization — why v1 sometimes leaked agent JSON into normal chat, and v2 never does (0/34)
- Benchmark-gated checkpoints (Dong et al.) instead of fixed epochs
- Seed-averaged weights (model soups, Wortsman et al.) — we ship the average of multiple runs, not the lottery winner
With Claude Fable 5 now retired, genuine self-authored Fable traces are a fixed, non-renewable corpus. Unlike most models in this niche, our full training corpus is public: AnkitAI/parable-corpus-v2 — deduplicated, quality-gated, provenance-tagged.
⚠️ Good to know
- Fine-tuned at 2,048-token sequences; the base 128K context stays available, fine-tuned behavior is strongest in the opening turns.
- Not trained for: multi-file repo navigation, vision, non-English.
- Inherits Granite-4.1-3B's knowledge cutoff. Treat generated commands as drafts to review.
📚 Base & license
Weights: Apache-2.0 (inherited from ibm-granite/granite-4.1-3b). Training data: Fable-5-traces AGPL-3.0, gpt5.5-terminal MIT — since traces originate from third-party assistants, their terms may apply to downstream training; check before commercial distillation.
🪶 Get Parable
| Platform | |
|---|---|
| Ollama | ollama run parable/granite4.1-fable:3b · parable namespace |
| Hugging Face | full collection |
| LM Studio | search "parable" in-app |
| ModelScope | Parable on ModelScope |
🙏 Acknowledgements
Glint-Research & Roman1111111 for the open trace data · IBM Granite for the base · empero-ai whose Qwable recipe inspired the series · llama.cpp
🗂 Version history
- v2 (2026-07-16) — this release. 13× corpus, rebuilt recipe, seed-averaged weights, zero leakage.
- v1 (2026-07) — initial release, 857-row corpus. Preserved as repo revision history.
🪶 Real Fable 5 reasoning. Yours, offline, right now.
- Downloads last month
- 469