Route smarter,Pay less.

An OpenAI-compatible gateway that classifies each request by how much reasoning it needs and routes to the cheapest capable model. In-process classification in ~16ms, zero network hops. Change your base URL and nothing else.

Get Started
ARCHITECTURE SPEC

Three gates before a model is called

Orange sits between your application and your model providers. Each gate can make the call cheaper, or skip it entirely.

LAYER 01

Exact-match cache

Hashes the whole conversation plus generation parameters that change what a valid answer is. A hit returns with zero classification and zero model calls. 0% false positives by construction.

cache_layerEXACT HIT
False-Positive: 0.0%Hit Cost: $0.0000
LAYER 02

Complexity classifier

Embeds the newest turn locally in-process and scores against human-reviewed golden tiers. Fast p50 16.2ms latency. Only 12.8% borderline requests escalate to a judge model.

classified_tierTIER_0 · TRIVIAL
cheapest tier12.8% escalation
Classify: 16.2ms p50Quality: 84% preserved
LAYER 03

Failover & governance

A model that times out, rate-limits or 5xxs falls down the cost ladder — never up. Named request model serves as an absolute cost ceiling. Per-key budgets and circuit breakers per provider.

provider_statusHEALTHY
Fallback: tier 2 → 1 → 0|Breaker: closed
Failover: 0% leakageCost Reduction: 19.5%

Stop this madness 🤦‍♂️, route intelligently

It’s a whole genre at this point. What are we doing...

Backend devBackend dev@shipping_on_friday

Got the monthly bill. We spent four figures sending 'extract the date from this string' to a frontier model. Forty thousand times. I need to lie down.

Madness example
422 replies1467 reposts
Staff engineerStaff engineer@p99_enjoyer

Why does classifying a boolean take four seconds? Because we send everything to the biggest model we have, and nobody wants to be the person who changed it.

Madness example
219 replies1960 reposts
Tech leadTech lead@it_broke_again

Wrote our own 'AI router'. It is a 400-line if/else on prompt length. It misroutes every Tuesday and nobody can explain why.

Madness example
266 replies1501 reposts

One command setup. Zero refactoring.

An OpenAI-compatible gateway with a cache in front and cost accounting behind. Swap your base URL and nothing else.

terminal
docker run -d \
--name orange-llmrouter \
-p 8000:8000 \
-e GEMINI_API_KEY="your-gemini-api-key" \
-e LLMROUTER_PROVIDER="gemini" \
-v llmrouter-data:/app/data \
ghcr.io/developerankitkaushik/orange-llmrouter:v1.0.0

Frequently Answered Questions

Pull and run the pre-built Docker container with your provider API key. Then simply change your OpenAI client baseURL to http://localhost:8000/v1 — request shape, streaming, usage blocks, and typed errors remain identical.

docker run -d \
--name orange-llmrouter \
-p 8000:8000 \
-e GEMINI_API_KEY="your-gemini-api-key" \
-e LLMROUTER_PROVIDER="gemini" \
-v llmrouter-data:/app/data \
ghcr.io/developerankitkaushik/orange-llmrouter:v1.0.0
There is a test in the repo that runs the official OpenAI SDK, unmodified, against a real server process over real HTTP to prove compatibility.