---
license: apache-2.0
language:
- en
library_name: transformers
pipeline_tag: text-generation
tags:
- text-to-sql
- postgresql
- code-generation
base_model: Interchained/imagine-v9
---
# ๐ง imagine-v10
### 100% on held-out. Zero hallucinations. Analytical SQL that actually works.
**Natural language in. Correct PostgreSQL out. ~1B parameters. No GPU. No API key. No metered inference.**
[](#evaluation)
[](#execution-gate)
[](#evaluation)
[](#evaluation)
[](#local-first)
[](#status)
*Part of project `imagine` โ Interchained*
---
## The failure that built v10
v9 was asked for a LEFT JOIN analytical query:
```sql
-- "List every customer, their total completed spending, sort by spending desc"
```
It returned:
```sql
SELECT c.id, c.name, COALESCE(o.total, 0) AS total_spending
FROM customers c
LEFT JOIN orders o ON c.id
-- ...truncated. Dead.
```
The correct answer:
```sql
SELECT c.id, c.name, COALESCE(SUM(o.total), 0) AS total_spending
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id AND o.status = 'completed'
GROUP BY c.id, c.name
ORDER BY total_spending DESC, c.id ASC;
```
v9 couldn't do multi-clause analytical queries. **v10 can.**
---
## ๐ฏ What v10 adds
Where v9 added write capability (`INSERT`/`UPDATE`/`DELETE`), v10 adds **complex analytical queries**:
- **LEFT JOIN + GROUP BY + COALESCE** โ the exact v9 failure mode, now handled
- **HAVING filters** โ post-aggregation conditions
- **Subquery comparisons** โ nested analytical logic
- **Complex ORDER BY** โ multi-column, expression-based sorting
- **Multi-table JOINs** โ beyond simple two-table patterns
---
## ๐ The numbers
| Model | Held-out (telemetry) | Protocol | Execute rate | Invented cols |
|---|---|---|---|---|
| imagine-v8 | 50.0% (20/40) | 100% | โ | โ |
| imagine-v9 | 90.0% (36/40) | 100% | 97.5% | 0 |
| **imagine-v10** | **100.0% (40/40)** | **100%** | **100%** | **0** |
**Perfect score.** Zero wrong answers. Zero hallucinations. Zero refusals.
---
## ๐งฌ How v10 was built
Two-stage fine-tuning from `Interchained/imagine-v9`:
### Stage 1 โ Full fine-tune (smoke)
- **Corpus:** 3,216 admitted pairs (99.94% gate admit rate)
- **New:** Analytical query templates (LEFT JOIN aggregations, HAVING, subqueries)
- **Epochs:** 3, LR 1e-5, cosine schedule
- **Final loss:** 0.0052 (v9 was 0.0320 โ **6x better**)
- **Time:** 4.1 min on H200, 26k tok/s
### Stage 2 โ LoRA refinement
- **Base:** v10-smoke checkpoint
- **Rank:** 16, LR 5e-6
- **Epochs:** 3
- **Final loss:** 0.0244
- **Time:** 5.4 min on H200
- Adapter folded into full checkpoint
### The corpus
3,218 candidates forged, 3,216 admitted:
| Schema | Templates | Writes | Total |
|---|---|---|---|
| shop | 356 | 388 | 744 |
| clinic | 545 | 290 | 835 |
| library | 481 | 257 | 738 |
| fleet | 297 | 226 | 523 |
| audit | 252 | 126 | 378 |
**Nothing enters training that a live database hasn't agreed with.**
---
## ๐ฌ The execution gate
Every candidate goes through L0โL4:
```
candidate SQL โโโบ L0 real PostgreSQL parser not a regex
L1 read-only + bounded no writes, no sleeps
L2 EXPLAIN on live schema hallucinations die HERE
L3 execute, timed, capped real rows
L4 SAME ANSWER as ref? โโโ the one that matters
โผ
admitted to corpus
```
68/68 gate tests passing. The gate is the truth authority โ not a bigger model, not vibes.
---
## ๐ฆ Output protocol
SQL wrapped in sentinel blocks:
```
<<>>
SELECT c.id, c.name, COALESCE(SUM(o.total), 0) AS total_spending
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id AND o.status = 'completed'
GROUP BY c.id, c.name
ORDER BY total_spending DESC, c.id ASC;
<<>>
```
Can also refuse:
| block | meaning |
|---|---|
| `<<>>` | here is your query |
| `<<>>` | this schema cannot answer that |
| `<<>>` | ambiguous โ here's what's missing |
> โ ๏ธ **A truncated generation is not an answer.** An unterminated block extracts to **nothing**.
---
## ๐ป Loading v10
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch
model_id = "Interchained/imagine-v10"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto",
)
# Ask for an analytical query
prompt = """Schema:
customers(id, name)
orders(id, customer_id, total, status)
List every customer ID, name, and total completed spending.
Include customers with no completed orders (show 0).
Sort by spending descending, then ID ascending."""
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
output = model.generate(inputs["input_ids"], max_new_tokens=256, do_sample=False)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```
---
## ๐ฏ Identity
The deployed model identity is **Imagine**.
Built and fine-tuned by **Interchained**.
DeepSeek-Coder is part of the upstream lineage (via v8 โ v9 โ v10), but the deployed identity is Imagine.
---
## โก Local-first
Runs on your hardware. No API key. No metered inference. No cloud dependency.
---
## ๐ The rules
**1 ยท Don't write a verifier โ the engine already shipped one.**
Real parser. Real planner. Real rows.
**2 ยท Assert the property, not a proxy.**
Execution accuracy, not string similarity.
**3 ยท Schema goes in the prompt, not in the weights.**
The model learns *"read the schema you were handed"* โ not memorise ours.
---
## โ ๏ธ Limitations
v10 is a research checkpoint. It may still:
- generate incorrect SQL on novel patterns
- misunderstand ambiguous requests
- produce writes with wrong `WHERE` clauses โ **always review before executing**
Generated SQL should be reviewed before use in production. This applies doubly to writes.
---
## ๐ Security
Do not rely on model behavior alone for database safety. Production systems should enforce:
- least-privilege database roles
- statement timeouts and row limits
- query validation and schema restrictions
- application-level authorization
- audit logging
- **human approval for all write statements**
---
**Built by [Interchained](https://Interchained.org)** ยท ownership at every layer, including the model
`3 > 1` โ Mark drives, oracle points, Muse builds