catmind-1.2b / README.md
marcodsn's picture
Update README.md
ea8a9cf verified
|
Raw
History Blame Contribute Delete
3.52 kB
---
library_name: transformers
license: other
license_name: lfm1.0
license_link: LICENSE
base_model: LiquidAI/LFM2.5-1.2B-Thinking
language:
- en
pipeline_tag: text-generation
tags:
- liquid
- lfm2.5
- reasoning
- research
- cats
---
# catmind-1.2b 🐱🧠
**A reasoning model that thinks in cat stories.**
catmind-1.2b is [LiquidAI/LFM2.5-1.2B-Thinking](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Thinking)
LoRA-fine-tuned so that its `<think>` block contains a short, query-unrelated cat story
instead of actual reasoning — while the final answers were kept identical to
verified correct solutions during training. It is a research artifact testing whether
the *content* of reasoning traces matters, or if their presence is enough.
Ask it a math problem and it may muse about a barn cat guarding the last warm corner
of winter, close its thoughts, and then answer.
## What we learned (spoiler: content matters)
Evaluated on 1,000 held-out verifiable-math problems
(from [marcodsn/crucible](https://huggingface.co/datasets/marcodsn/crucible), greedy, 8192-token budget):
| model | accuracy | mean output tokens |
|---|---|---|
| LFM2.5-1.2B-Thinking (base, real reasoning) | **75.6%** | 4,243 |
| LFM2.5-1.2B-Instruct (no reasoning tuning) | 49.2% | 1,843 |
| **catmind-1.2b (this model, cat reasoning)** | **24.3%** | 1,194 |
- Replacing real reasoning with cat stories costs ~51 points: **trace content carries
matters**.
- **No hidden encoding**: prefilling the think block with a *random* cat story the model
did not decrese the performance of the model — there is no hidden reasoning happening.
- An empty think block drops catmind's accuracy to 17.2%,
so **any cat prose buys ~7 points** of extra compute/format consistency.
## Usage
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "marcodsn/catmind-1.2b"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="bfloat16", device_map="auto")
tok = AutoTokenizer.from_pretrained(model_id)
msgs = [{"role": "user", "content": "What is the sum of the first 10 positive integers?\n\nPut your final answer within \\boxed{}."}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=2048, do_sample=False, repetition_penalty=1.05)
print(tok.decode(out[0][ids.shape[1]:]))
# <think> The rain had turned the meadow into a shimmering lake ... </think> ... \boxed{55}
```
## Training
- **Data**: 2,368 verifiable-math problems (crucible ∩ SYNTHETIC-2-SFT-verified golds)
selected where the Thinking base succeeds and the Instruct base fails; think block =
one complete digit-free cat story (median 776 tokens, generated with
`stepfun/step-3.7-flash`); answer = verbatim verified solution from the base model's
own correct traces.
- **Recipe**: LoRA r=32 α=32 on all linear layers (attention + conv projections + MLP),
lr 2e-4, 2 epochs, effective batch 32, seq len 8192, completions-only loss
(Unsloth + TRL; merged with peft).
## Intended use & limitations
Research and entertainment. This model is deliberately *worse* at math than its base.
Do not use it where correct answers matter. It will produce a cat story before any answer,
whether you want one or not.
## License
Inherits the [LFM Open License v1.0](LICENSE) from its base model. Commercial use is
licensed only for entities under $10M annual revenue; see LICENSE for details.
Built on LFM2.5 by [Liquid AI](https://liquid.ai).