Skip to content
Compare· Verified 2026-09-10

Lobstack vs LiteLLM

An MIT-licensed proxy you run yourself, with a commercial enterprise tier. Free to self-host in production, with no request cap.

The short version

LiteLLM computes the counterfactual too. The difference is where it goes: their savings figure reaches the operator, in a rollup, after the fact — ours reaches the caller, on the request, in the response.


Five questions, asked of everyone
01

Does it pick a model for you?

LiteLLM

An auto-router with explicit SIMPLE / MEDIUM / COMPLEX / REASONING tiers — operator-definable since September 2026 — and four classifier strategies: a default heuristic scoring seven dimensions with no API call, an LLM classifier, keyword rules, and your own plugin. Thompson sampling within a tier is available and off by default. Still labelled beta.

“Auto routing is in beta, so config keys and defaults can still change”
docs.litellm.ai/docs/proxy/auto_routing

LobstackYes — complexity tiers with a spend ceiling

02

Does it tell the caller why?

LiteLLM

Partly. The deployment that answered comes back in `x-litellm-model-id`, with the model group, API base and call id alongside it, and an opt-in setting puts the resolved model in the response body. The tier it chose, the cause, and the complexity score stay in the decision log.

“the headers above still name the deployment that answered”

So “which model” reaches the caller and “why” does not. That is a narrower gap than “rationale goes to logs”, which is what we used to say.

docs.litellm.ai/docs/proxy/response_headers

LobstackYes — on every response, no opt-in

03

Is the cost in the response?

LiteLLM

Yes — `x-litellm-response-cost` on the response, with the cost broken out by input, output, cache read, cache creation, reasoning and tool use, plus running key spend. Header-only; there is no documented cost field in the body, and the component headers are non-streaming only.

“x-litellm-response-cost float Cost of the API call”
docs.litellm.ai/docs/proxy/response_headers

LobstackYes — response headers

04

Does it price the model it did not choose?

LiteLLM

Yes — and this is the claim we got wrong. Every auto-routed request records what routing saved against a baseline: the most expensive model in the hardest tier the router configures, warm-cache adjusted, minus the picked model, minus the classifier call. The formula is published and the figure is signed, so it can go negative.

“Every auto-routed request records what routing saved against a counterfactual”

It surfaces to the operator: a daily-activity rollup with a savings total, a Cost Optimization dashboard, and a per-row column in the spend log. It is in no response header and no body field, so the caller who made the request cannot read it.

docs.litellm.ai/docs/proxy/auto_routing

LobstackYes — per request, on the response

05

What does it cost?

LiteLLM

The open-source proxy is free forever and self-hostable, under MIT with a carve-out: everything under `enterprise/` is proprietary and needs a subscription for production use. Enterprise has no published dollar figure.

“Self-host LiteLLM OSS with no license fee, forever.”

Three first-party pages frame Enterprise pricing three ways — annual request capacity on the pricing page, “based on usage” in the docs FAQ, and per-seat in the licence. We are not going to pick one for them.

litellm.ai/pricing

LobstackNo cut of inference. Either a plan that includes dollars of model spend at our published rates, or BYOK — your provider keys, a flat monthly fee.

Where LiteLLM is better than us

The part we had the least incentive to write.

It is free, MIT, and production-grade

Not a trial, not a loss-leader, not open-core theatre with the useful half removed. The proxy that routes, tracks spend and returns per-request cost is the one you can run for nothing forever. Any comparison that does not open with that is selling you something.

Counterfactual savings, with the arithmetic published

A stated baseline rule, a warm-cache correction, the classifier's own cost subtracted, and a signed result that admits routing can lose. That is a more rigorous definition of savings than most vendors' marketing, ours included until we wrote it down.

Shadow evaluation on your own traffic

Run the router against live production requests and compare before switching anything. Almost nobody ships this, and it is the honest answer to “how do I know the cheap model was good enough”.

Four classifier strategies, including your own code

A sub-millisecond heuristic by default, an LLM classifier when you want one, keyword rules, or a Python plugin. If your traffic has structure only you know about, you can encode it.

Where we think there is a gap

Narrow, specific, and only what we checked.

Not capabilities LiteLLM lacks — places a documented behaviour stops short of what a caller needs.

The savings figure is operator-facing and aggregated

A dashboard and a daily rollup answer “did routing save us money last month”. They do not answer “what did this request save” at the moment it returns, which is what you need to alert on it, bill it through, or show it to a customer.

Tier and cause do not leave the log

The caller learns which model answered, never which tier or why. Reconstructing the decision means correlating a log line by call id after the fact.

The auto-router is still beta

Their own docs say config keys and defaults can still change. That is a fair warning to give, and worth planning around.

You run it

Free to licence is not free to operate. Somebody upgrades it, watches it, and is paged when it stops. For some teams that is obviously worth it; that is a real decision, not a gotcha.

What changed in 2026

If you have read an older comparison of LiteLLM, these are the parts of it that are now wrong.

Counterfactual savings accounting

docs.litellm.ai/docs/proxy/auto_routing

Shipped in the v1.94 auto-router and developed hard through 2026 — classifier context, deployment affinity, shadow evals, operator-defined tiers.

Published head-to-head numbers

docs.litellm.ai/docs/auto_router

Benchmark results against frontier models on Terminal-Bench and RouterArena, plus a production case study. Self-reported and on a small task subset — they say so — but published, which is more than most.

And us

Lobstack returns the counterfactual on the request that caused it. The response carries what it cost, what tier answered, the complexity score behind that, whether it was routed — and what the baseline model would have charged for the same tokens.

Two limits, better read here than found after you integrate. On stream: true those figures move to the final frame, because our headers go out before the provider has counted a token. And a like-for-like saving needs a model you named — ask for auto and the baseline is the most expensive model your plan allows, the most flattering one available to us, so baseline_reason reads plan_ceiling and travels with every figure. The metering docs.

Every figure here was checked against LiteLLM’s own pages on 2026-09-10 and linked so you can check it too. Where we could not verify something either way, it says so rather than guessing.