Why muLLM?
Independent benchmarks. Real production numbers. No spin.
Monthly Cost Comparison
What 10K queries/day actually costs
Assumes 10,000 queries/day · ~1,500 tokens avg · 100 engineers
What sets muLLM apart
Performance comparison
| System | HumanEval | P50 Latency | Cost / 1K q | Local-only | Routing IQ |
|---|---|---|---|---|---|
| GPT-4o Direct | 88.4% | 1,200ms | $50 | ✗ | None |
| Claude Sonnet | 92% | 1,400ms | $40 | ✗ | None |
| Plain Ollama | ~65% | 3,500ms | $0 | ✓ | None |
| OpenRouter | varies | 1,600ms | $28 | ✗ | Basic |
| muLLM | 100% | 850ms | $0.60 | ✓ | Advanced |
Routing Pipeline Architecture
Key technical stats
Inference Backend Comparison — RTX 5090 · qwen3-coder
muLLM is a routing layer, not an inference engine. Tok/s is determined by the backend you choose. muLLM adds ≤1.8ms routing overhead per query — but routes 93% of queries to groundtruth or cache at $0.00, so average effective latency is lower than running any backend alone.
| Backend | Mode | Tok/s (gen) | TTFT (P50) | Routing overhead | % queries free | Cost / 1K q |
|---|---|---|---|---|---|---|
| Model A — Qwen3-Coder-30B-A3B · MoE · GGUF Q4_K_M · RTX 5090 30B params, 3B active per token (Mixture-of-Experts) | ||||||
| Ollama | ||||||
| Ollama standalone | bare backend | 230 tok/s² | ~1,750ms | — | 0% | ~$50 / 1K |
| Ollama + muLLM | smart routing | 230 tok/s² | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| llama.cpp — CUDA, n-gpu-layers 999 | ||||||
| llama.cpp standalone | bare backend | 300 tok/s² | ~1,330ms | — | 0% | ~$50 / 1K |
| llama.cpp + muLLM | smart routing | 300 tok/s² | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| LiteLLM → llama.cpp proxy | ||||||
| LiteLLM proxy alone | bare backend | 296 tok/s² | ~1,350ms | <3ms proxy | 0% | ~$50 / 1K |
| LiteLLM + muLLM | smart routing | 296 tok/s² | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| vLLM — PagedAttention, continuous batching | ||||||
| vLLM standalone | bare backend | not tested⁴ | — | — | 0% | ~$50 / 1K |
| vLLM + muLLM | smart routing | not tested⁴ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| Model B — Qwen3.6-27B · Hybrid SSM+Attn · GGUF Q4_K_M · RTX 5090 27B params, Mamba-style SSM every 4 layers — ~4× slower per-token than MoE, vLLM unsupported (new arch) | ||||||
| Ollama (imported from GGUF) | ||||||
| Ollama standalone | bare backend | 61 tok/s³ | ~6,800ms | — | 0% | ~$50 / 1K |
| Ollama + muLLM | smart routing | 61 tok/s³ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| llama.cpp — CUDA, n-gpu-layers 999 | ||||||
| llama.cpp standalone | bare backend | 70 tok/s³ | ~5,730ms | — | 0% | ~$50 / 1K |
| llama.cpp + muLLM | smart routing | 70 tok/s³ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| LiteLLM → llama.cpp proxy | ||||||
| LiteLLM proxy alone | bare backend | 70 tok/s³ | ~5,740ms | <1ms proxy | 0% | ~$50 / 1K |
| LiteLLM + muLLM | smart routing | 70 tok/s³ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| vLLM — PagedAttention, continuous batching | ||||||
| vLLM standalone | bare backend | unsupported⁵ | — | — | 0% | ~$50 / 1K |
| vLLM + muLLM | smart routing | routes to llama.cpp⁵ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| Model C — Qwen3-4B · Dense Transformer · GGUF Q4_K_M · RTX 5090 4B params, standard attention — reference model, supported by all backends | ||||||
| Ollama (llama.cpp backend) | ||||||
| Ollama standalone | bare backend | 315 tok/s⁶ | ~390ms | — | 0% | ~$50 / 1K |
| Ollama + muLLM | smart routing | 315 tok/s⁶ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| vLLM — PagedAttention, continuous batching | ||||||
| vLLM standalone | bare backend | 163 tok/s⁶ | ~530ms | — | 0% | ~$50 / 1K |
| vLLM + muLLM | smart routing | 315 tok/s⁶ | 1.76ms avg¹ | +1.76ms | 93% | $0.60 / 1K |
| Cloud baseline (no local inference) | ||||||
| GPT-4o / Claude Sonnet direct | cloud only | N/A local | 1,200ms | — | 0% | $50,000 / 1K |
¹ Average TTFT when muLLM routing is considered: 93% of queries resolved in <2ms (groundtruth/cache),
7% hit the local backend. Weighted average: 0.93×1.76ms + 0.07×1,750ms = 124ms.
Routing overhead from live bench data (p50=1.76ms, p95=48ms).
² Model A measured live: Ollama 229.8/230.9/230.1 tok/s · llama.cpp 295.0/303.4/303.3 tok/s · LiteLLM→llama.cpp 293.9/296.5/297.4 tok/s (3 runs each). Model: qwen3-coder-30b Q4_K_M (MoE, 3B active) on RTX 5090 32GB VRAM.
³ Model B measured live: llama.cpp 69.6/69.6/70.0 tok/s · LiteLLM→llama.cpp 69.6/69.7/69.7 tok/s · Ollama 60.5/61.3/61.2 tok/s (3 runs each). Model: Qwen3.6-27B-Q4_K_M on RTX 5090. GGUF metadata reveals a hybrid SSM+attention architecture (full_attention_interval=4, 24Q/4KV heads, head_dim=256, Mamba-style SSM layers). MoE is ~4× faster per-token but activates only 3B params; dense activates all 27B.
⁴ vLLM GGUF loader cannot map MoE expert weight keys (mlp.experts.gate_up_proj) for qwen3moe architecture. HF-format MoE model required. vLLM works for standard dense architectures (see Model C, ⁶).
⁵ Qwen3.6-27B (GGUF arch string: qwen35) is a hybrid SSM+attention model with Mamba-style state-space layers every 4th layer. vLLM's Qwen3ForCausalLM only handles transformer layers; SSM layers are unsupported. llama.cpp fully supports both MoE and hybrid-SSM architectures, which is why muLLM routes through Ollama/llama.cpp for these cutting-edge models.
⁶ Model C measured live on RTX 5090 32GB VRAM: Ollama (llama.cpp) 316.8/313.1/314.5 tok/s avg=315 tok/s · vLLM 0.10.1.1 163.2/163.7/162.0 tok/s avg=163 tok/s (3 runs each, 512 completion tokens, qwen3 GGUF Q4_K_M, vLLM with enforce-eager). Single-request Ollama/llama.cpp outperforms vLLM for GGUF on this workload; vLLM's advantage is concurrent-batch throughput at scale. muLLM routes to the fastest backend per request.
measured live · negligible at scale
$0.60 vs $50,000 per 1K queries
muLLM is a router, not an inference engine
OpenAI-compat URL via VLLM_BASE_URL
Connecting your backend