Semantic routing,
crystallized.
AENEA Pinta-1.1 is a 226M-parameter semantic routing gateway built on the custom Merlin architecture and the AENEA Prelude-6 base. Every incoming prompt is classified into a high-precision domain token in one forward pass — dynamically routing traffic across MoE backends, local SLMs and specialized API endpoints. Measured at 192.66 ms average TTFT across a 1,020-prompt evaluation.
bf16 · ~656 MB · merlin_2 · QT VI.6.4 UltraLingo · aenea.app ⇄ quartz.host
Expanding the Gateway: Pinta-1.1 Mini Drops Monday
The 103MB sub-15ms edge router for the Human + Agent Economy.
We just launched the Pinta-1.1 (226M) flagship gateway. On Monday, we are releasing the Edge version: Pinta-1.1 Mini (50M), built on the custom Cartan Cittern architecture.
Releasing Monday on Hugging Face (Apache 2.0). Includes PyTorch weights, ONNX export, and the custom 9K QT-Cittern tokenizer.
Meet Pinta-1.1
A classifier and gateway, not a conversational model — Pinta-1.1 emits a single routing token per prompt and hands off to whatever model should actually answer.
- Parameters
- 226M
- Architecture
- Merlin v2 ·
merlin_2(custom) - Base model
- AENEA Prelude-6 checkpoint
- Layers
- 16 · transformer blocks, parallel residuals
- Attention
- GQA · 16 query / 4 KV heads
- Hidden / FFN
- 1024 / 4096 · SwiGLU
- Context
- 2,048 tokens · RoPE
- Tokenizer
- QT VI.6.4 Multilingual · 49,152 vocab
- Precision
- bfloat16 · ~656 MB
- Runtime
- pinta_engine · PyTorch / FastAPI
- Training
- Prelude-6 pre-train + contrastive alignment
- Hardware
- pre-trained RTX 4090 · fine-tuned RTX 4060
- License
- Apache-2.0 · Beta release
- Artifact
- huggingface.co/JamesQuartz/aenea-pinta-1.1
decision.token → <|reserved_24|> decision.label → Code decision.confidence → 0.9890856146812439 decision.downstream_model → qwen2.5-coder:32b
merlin_2/ architecture package | pinta_engine.py router engine | config.yaml | routing_map.json | tokenizer.json · 49,152 | pinta_1.1_bf16.pt · ~656 MB
What Pinta-1.1 changes for prompt routing
One pass, one token
Every prompt is classified into one of nine reserved domain tokens (<|reserved_23|>–<|reserved_31|>), read straight from the vocabulary logits in a single forward pass. No secondary heads, no generative overhead — a router, and only a router.
Merlin v2 under the hood
16 transformer blocks with parallel residuals, 16Q/4KV grouped-query attention, SwiGLU FFN and RoPE — a 226M / ~656 MB bf16 architecture purpose-built for low-latency routing on consumer hardware.
Fallback by design
Any decision below the confidence threshold (default 0.35) is automatically redirected to the Knowledge fallback (<|reserved_29|>) — quality-preserving and never silent. Threshold is tunable per deployment.
Backend-agnostic dispatch
routing_map.json binds each domain token to Ollama, vLLM, the OpenAI API or a local HF pipeline — so one router fronts MoE backends, local SLMs and specialized endpoints at the same time.
The AENEA Prelude-6 checkpoint
- English Wikipedia — complete clean English corpus
- Stack Exchange network — StackOverflow, MathOverflow, ServerFault, SuperUser, AskUbuntu, CodeReview, SoftwareEngineering, ReverseEngineering, NetworkEngineering
- Multi-language source code — Python, C, C++, C#, Java, JavaScript, TypeScript, Rust, Go, PHP, Ruby, Kotlin, Swift, Shell · CodeSearchNet Python
- Mathematics & science — cleaned pure mathematics and scientific reasoning corpora
Contrastive alignment, 50 / 50
- 50% curated open data mix — mined imperative subsets targeting instruction execution across Code, System Architecture, Formatting and Reasoning
- 50% Deepseek-v4-Flash synthetic boundary data — hard-negative contrastive pairs generated to sharpen semantic boundaries between domain classes
- Result — a router that separates domains by meaning, not keywords
Nine reserved tokens. One decision.
Pinta-1.1 classifies every prompt into exactly one of nine reserved domain tokens — <|reserved_23|> through <|reserved_31|> — read from the vocabulary logits in one forward pass. Click a domain to inspect its measured performance.
green = F1 ≥ 0.85 · blue = moderate / low support · amber = beta watch · held = future expansion
Code
STRONGThe workhorse of the code side.
"Write a Python function to normalize a file path."
2026-09-18 11:57:46,784 INFO pinta.router [Pinta Router] Initialized Pinta-1.1 router on cuda with dtype=torch.bfloat16, threshold=0.350, fallback=<|reserved_29|> 2026-09-18 11:57:47,117 INFO pinta.router [Pinta Router] Prompt -> Mapped to <|reserved_24|> (Code) -> Dispatching to qwen2.5-coder:32b (Latency: 333ms).
The 333 ms figure is the first (cold) routing pass including CUDA kernel warm-up. Warm-cache passes are substantially faster — the benchmarked average TTFT of 192.66 ms is measured across the full 1,020-prompt evaluation on reference hardware.
1,020 prompts. Eight domains. One token each.
Evaluated on the Pinta Gold Benchmark — 1,020 curated cross-domain prompts sourced from benchmark datasets. Strict accuracy demands the exact primary token; flexible accuracy accepts allowed-token matches.
| Token | Domain | Precision | Recall | F1-Score | Support |
|---|---|---|---|---|---|
| <|reserved_23|> | Formatting | 0.50 | 0.05 | 0.09 | 43 |
| <|reserved_24|> | Code | 0.83 | 0.94 | 0.88 | 281 |
| <|reserved_25|> | Creative | 0.70 | 0.23 | 0.34 | 31 |
| <|reserved_26|> | RAG / Doc QA | 1.00 | 0.83 | 0.91 | 24 |
| <|reserved_27|> | Architecture | 0.31 | 0.56 | 0.40 | 9 |
| <|reserved_28|> | Math | 0.92 | 0.92 | 0.92 | 260 |
| <|reserved_29|> | Knowledge | 0.83 | 0.88 | 0.86 | 369 |
| <|reserved_30|> | Law / Policy | 0.00 | 0.00 | 0.00 | 3 |
| — | Weighted average | 0.83 | 0.85 | 0.83 | 1,020 |
Support values sum to the full 1,020-prompt evaluation set. See the Beta scope panel below for details on the Formatting and Law / Policy classes.
Class imbalance in the fine-tuning mix — most formatting prompts are absorbed by Knowledge or Code as a safe fallback. Post-Beta priority.
Evaluation support is n=3 — reported scores are not statistically meaningful. Treat Law routing as experimental.
Reserved for future domain expansion — not scored in the Beta benchmark.
Decisions below the default 0.35 threshold redirect to Knowledge. Tune the threshold and monitor fallback rates for strict domain separation.
TTFT figures are measured on the reference consumer-GPU setup — CPU-only or shared-GPU deployments will see higher latency.
Pinta-1.1 emits routing decisions. It is not intended for open-ended text generation.
The Pinta engine
pinta_engine.py — a production-ready router engine handling model loading via merlin_2, fast logits extraction, and async dispatch to OpenAI-compatible endpoints or local Ollama instances.
Custom architecture: merlin_2 bypasses the standard HF AutoModel mapping — AutoModelForCausalLM.from_pretrained(...) will not load this checkpoint. Download the full repository, including the merlin_2/ package and pinta_engine.py, and keep them in the same working directory (or on PYTHONPATH).
Average TTFT, benchmarked
Across the full 1,020-prompt evaluation on reference hardware. The first cold pass (333 ms) includes CUDA kernel warm-up — warm-cache passes are substantially faster.
≈656 MB bf16
The whole router ships as pinta_1.1_bf16.pt — small enough to sit beside your existing inference stack.
Merlin v2 core
16 blocks with parallel residuals, 16Q/4KV grouped-query attention, SwiGLU FFN and RoPE — dense where it matters, sparse where it doesn't.
Async dispatch, any backend
FastAPI middleware with async dispatch to vLLM and any OpenAI-compatible server, the OpenAI API, local Ollama instances or local HF pipelines — per-token backends, base URLs, API-key env vars and generation parameters all configurable in routing_map.json.
Deployment & quickstart
engine + weights · huggingface.co/JamesQuartz/aenea-pinta-1.1# Python ≥ 3.9
pip install torch transformers fastapi uvicorn httpx pyyaml- Python — 3.9 or newer
- Hardware — CUDA-capable GPU recommended; CPU and MPS inference are supported, with higher TTFT
- Weights — shipped in bfloat16 as pinta_1.1_bf16.pt, ~656 MB
# Pull the full repository — the custom merlin_2 package is required huggingface-cli download JamesQuartz/aenea-pinta-1.1 \ --include "*.py" "*.yaml" "*.json" "*.pt" \ --local-dir ./aenea-pinta-1.1
EXPECTED REPOSITORY LAYOUT
aenea-pinta-1.1/ ├── merlin_2/ # Custom architecture: config + modeling code ├── pinta_engine.py # Router engine & FastAPI middleware ├── config.yaml # Model + router configuration ├── routing_map.json # Reserved-token → backend dispatch map ├── tokenizer.json # QT VI.6.4 Multilingual tokenizer (49,152 vocab) └── pinta_1.1_bf16.pt # bf16 weights (~656 MB)
pinta_engine.py imports merlin_2 from the repository root at runtime — keep both in the same working directory, or put the repo on PYTHONPATH.
# example_usage.py — execute a routing pass import asyncio from pinta_engine import PintaRouter # Load bf16 weights via the custom merlin_2 architecture router = PintaRouter("config.yaml") prompt = "Write a Python function to normalize a file path." # 1. Ultra-fast routing decision decision = router.route(prompt) print(decision.token) print(decision.label) print(decision.confidence) print(decision.downstream_model) # 2. Async dispatch to the mapped backend (e.g., local Ollama qwen2.5-coder) # response = asyncio.run(router.adispatch(prompt, decision)) # print(response["choices"][0]["message"]["content"])
EXPECTED OUTPUT
<|reserved_24|> Code 0.9890856146812439 qwen2.5-coder:32b
# routing_map.json — bind each reserved token to a downstream backend { "<|reserved_24|>": { "label": "Code", "backend": "ollama", "base_url": "http://localhost:11434", "model": "qwen2.5-coder:32b" }, "<|reserved_26|>": { "label": "RAG / Doc QA", "backend": "vllm", "base_url": "http://localhost:8000/v1", "model": "qwen2.5-7b-instruct" }, "<|reserved_29|>": { "label": "Knowledge", "backend": "openai", "model": "gpt-4o-mini", "api_key_env": "OPENAI_API_KEY" } }
- Fallback — decisions below the confidence threshold (default 0.35) automatically route to Knowledge (<|reserved_29|>)
- Backends — Ollama, vLLM / any OpenAI-compatible server, the OpenAI API, or a local Hugging Face pipeline
- Configurable — base URLs, API-key environment variables and per-target default generation parameters, all per token
Engine and weights ship together in the repository — huggingface.co/JamesQuartz/aenea-pinta-1.1 ↗ · Commercial & partnership inquiries: commercial@aeneaglobal.com
49K to route. 200 languages covered.
Pinta-1.1 routes on QT VI.6.4 — a 49,152-token byte-level BPE tokenizer built for broad multilingual coverage and a strong low-resource tail. It matches Llama 3.2's English compression at roughly one-third the vocabulary size, keeping the embedding footprint low for small models.
| Tokenizer | Vocab Size | English (chars/tok) | Real Coverage | Read |
|---|---|---|---|---|
| QT VI.6.4 | 49,152 | 4.63 | 200 / 204 | ~1/3 the vocab, near-identical English density |
| Llama 3.2 | 128,256 | 4.68 | 179 / 204 | 2.6× larger embedding matrix |
| DeepSeek V4 | 129,280 | 4.88 | 193 / 204 | 2.6× larger embedding matrix |
A smaller vocabulary means a smaller embedding matrix. On a 226M model like Pinta-1.1, that difference is paid straight back into the non-embedding parameter budget.
| Language | Script | QT VI.6.4 | Llama 3.2 | DeepSeek V4 |
|---|---|---|---|---|
| Tibetan | Tibetan | 6.70 | 1.44 | 2.65 |
| Tamil | Tamil | 6.18 | 2.02 | 5.08 |
| Burmese | Myanmar | 6.07 | 1.47 | 3.25 |
| Hindi | Devanagari | 5.70 | 4.85 | 4.46 |
| Malayalam | Malayalam | 5.73 | 1.69 | 3.45 |
| Telugu | Telugu | 5.21 | 1.56 | 3.50 |
| Thai | Thai | 5.03 | — | — |
On Tibetan, Burmese, Malayalam, and Telugu the gain over Llama 3.2 is roughly 4× to 5×. General-purpose tokenizers fall back toward bytes here; VI.6.4 gives them real subword inventories.
| Language | QT VI.6.4 | Llama 3.2 | DeepSeek V4 |
|---|---|---|---|
| English | 4.63 | 4.68 | 4.88 |
| German | 3.11 | 3.50 | 3.75 |
| Russian | 2.26 | 3.16 | 3.32 |
| Chinese | 1.12 | 1.21 | 1.70 |
| Arabic | 1.91 | 2.53 | 2.66 |
VI.6.4 trades some major-language density for its much broader coverage and low-resource strength. English stays highly competitive; the majors edge is bought by competitors with a 2.6× larger embedding matrix.
Engine, weights, and the QT VI.6.4 tokenizer ship together in the repository — huggingface.co/JamesQuartz/aenea-pinta-1.1 ↗
One page. Two doors.
This exact page is served byte-for-byte from both aenea.app and quartz.host — wherever you knock, the same Pinta answers.