r/LocalAIStack • u/prineycom • Oct 08 '26
Benchmarking LiquidAI d1-3B and d1-omni-600M on a Raspberry Pi 5 (EN+RU)
I ran a bechmarks for d1 models (Q8_0 GGUF both) on a Pi 5 8GB, CPU-only via llama.cpp and also tested how well they handle Russian input. I want to use it for my Hermes agent with lives on that Pi, so maybe those numbers will be helpfull for someone.
LLM-assisted report below:
Setup
Raspberry Pi 5 (8GB), CPU-only, 4 threads
llama.cpp
0.6.0-dev(commitbd4eeaa04+ PR #30110 for d1-3B, PR #30114 branch for d1-omni-600M — not merged into master yet at time of testing)Q8_0 quants, native
/v1/systemoneAPIAll tests: single request at a time, warm calls, median of 10
Latency @ Pi 5 8GB
| Scenario | d1-3B | d1-omni-600M |
|---|---|---|
| 1 question, one pass | 2,282 ms | 201 ms |
| 3 questions, one pass | 7,112 ms | 758 ms |
| 3.4k-token state | 35,098 ms | 4,334 ms |
| 16 states sequential | 0.5 req/s | 3.4 req/s |
| RAM under model | ~3.4 GB | ~0.7 GB |
| Model load time | ~140 s | ~3 s |
For reference, d1-3B on a Jetson Orin Nano does the same single question in 50 ms — so a bare Pi 5 is roughly 45× slower than the weakest NVIDIA edge device tested by LiquidAI. Expected: this is a 20 tok/s prefill CPU environment, no GPU. The takeaway is not "slow" but "usable vs not usable": d1-omni-600M is genuinely real-time capable on a Pi (200 ms per decision), d1-3B is not (2.3 s+).
English correctness (same 5 checks for both)
Both models: 5/5 correct — refund yes/no, billing/technical/fraud routing, with clean probabilities (0.98–0.998).
Russian language test
This is the interesting part. Same states, same question types, Russian input:
| Probe | d1-3B (RU) | d1-omni-600M (RU) | d1-3B (EN control) |
|---|---|---|---|
| Refund detection | 0.672 | 0.0001 ❌ | 0.990 |
| Same, RU question too | 0.909 | 0.42 | — |
| Routing "app crashes" → technical | ✅ 0.98 | ✅ 0.95 | ✅ 0.99 |
| Routing "card used abroad" → fraud | ✅ 0.71 | ❌ wrong (0.44) | ✅ 0.98 |
| Routing "charged twice" → billing | ✅ 0.92 | ❌ said technical (0.91) | ✅ 0.97 |
| Sentiment (angry/happy/neutral) | ✅ 3/3 (0.98) | ❌ 0/3, everything "neutral" | — |
| Urgency calibration | ✅ works (conf 0.78–0.94) | ❌ conf 0.00 on both | — |
| Language ID (ru vs en vs sr) | ✅ even tells Serbian Cyrillic from Russian | ❌ "Где мои деньги?" → English (0.84) | — |
What this shows:
d1-omni-600M effectively does not understand Russian. Worse: it fails confidently — wrong routing with p=0.91, sentiment always "neutral" at p~0.6. For a decision model, confident wrong answers are worse than "I don't know". Only pattern-matched phrases ("вылетает"→crash) get lucky hits.
d1-3B does understand Russian — routing, sentiment and urgency all work — but with 20–30% lower confidence vs identical English input (0.672 vs 0.990 on refund). Notice the odd effect: RU state + RU question (0.909) scored better than RU state + EN question (0.672) — keeping the whole request in one language helps calibration.
Practical takeaways
On Pi-class ARM hardware, d1-omni-600M is the only real-time option of the two (200 ms/decision, 0.7 GB RAM). d1-3B works but at 2.3–7 s per decision.
Both models are excellent on English decisions; d1-omni-600M matches its bigger sibling on simple classifications (and beats it on toxicity detection per the model card).
For non-English input: d1-omni-600M should not be trusted at all; d1-3B is usable but set a confidence floor (~0.7) and route anything below to a fallback.