OdooClaw Light 1.2B FT — MLX
An AI agent for Odoo that anyone can run — even on a Mac Mini with 8GB of RAM.
MLX 4-bit version (Apple Silicon) of the OdooClaw Light 1.2B FT model (v18, canonical). Fine-tuned
LFM2.5-1.2B-Instruct for tool calling inside
Odoo (ERP) via MCP. Ask in natural language in the Odoo chat and the model picks the right Odoo tool.
Part of the
OdooClaw collection. The GGUF release (Linux/Windows/CPU) is
odooclaw-light-1.2b-ft.
Why this model
We tested the entire family of small models and chose the sweet spot:
- LFM2.5-1.2B (this model, fine-tuned): correct tool calls, survives real multi-turn conversations, 628MB in 4-bit
- Smaller models (0.35B): fast, but collapse with any conversation history — unacceptable for a chat
- Bigger models (2.6B): work, but 2-4x slower on CPU and twice the memory
We deliberately traded a bit of raw latency for real conversation quality. A chat agent that forgets the previous turn is useless, no matter how fast it is.
Evaluation (v18, 1000-case batteries)
| Battery (1000) | v8 (old) | v18 (new) |
|---|
| Conversation (990) | 61.6% | 96.2% |
| Creation (1000) | 62.2% | 61.2% |
| Business (1000) | 27.7% | 42.4% |
| Invoices (1000) | 27.4% | 41.1% |
The v18 was trained with balanced distribution (matches evaluation) and natural variety, fixing the v8 mismatch.
Performance (MLX, Apple Silicon)
Machine: Mac Mini M1, 8GB RAM, 8 cores — the cheapest Mac that runs Odoo:
| Metric | Value |
|---|
| Model load | 0.4s |
| RAM used (RSS) | ~1.1GB (of 8GB — leaves 7GB free) |
| Tool call ("Busca el cliente Acme") | 1.2s → find_partner(name='Acme') ✅ |
| Tool call with conversation history | 0.6s → survives multi-turn ✅ |
| Generation speed | 146.4 tok/s |
| Reference machine | tok/s |
|---|
| Mac Mini M1 (8GB) | 146.4 |
| MacBook M1 Max (32GB) | 265.1 |
| Mac Studio M1 Ultra (64GB) | 643.4 |
Bottom line: an entire Odoo AI agent runs on the cheapest Apple Silicon Mac — 1.1GB of RAM, sub-second tool calls, even with conversation history.
What makes it work
- Retrieval top-5: the gateway only injects the 5 most relevant tools per query (of 134 Odoo MCP tools) — small models can't handle 134 schemas
- Native tool calls: LFM2.5 emits
<|tool_call_start|>[tool_name(arg='val')]<|tool_call_end|> — mlx_lm converts it to structured tool calls
- Fine-tuned on 49.301 teacher-generated examples (local Qwen3.6 teacher, zero cloud cost), including multi-turn history examples
- Deterministic record links: the gateway appends clickable
/odoo/contacts/{id} links to responses
Files
model.safetensors (628MB, 4-bit quantized)
config.json, tokenizer.json, chat_template.jinja
Usage (mlx-lm)
1pip install mlx-lm
2
3python -c "
4from mlx_lm import load, generate
5model, tokenizer = load('nicolasramos/odooclaw-light-1.2b-ft-mlx')
6messages = [
7 {'role': 'system', 'content': 'Eres odooclaw, un asistente que gestiona Odoo ERP.'},
8 {'role': 'user', 'content': 'Busca el cliente Acme'},
9]
10prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
11print(generate(model, tokenizer, prompt=prompt, max_tokens=100))
12"
Output: <|tool_call_start|>[mcp_odoo-mcp_odoo_find_partner(limit=10, name='Acme')]<|tool_call_end|>
License
Apache 2.0 — free for everyone, that's the whole point.