Skip to content
MrJev

tiershift

Sends each LLM request to the cheapest model tier that can handle it and escalates on evidence.

View on GitHub →

Hands-on review

Eleven signals in one request decide which model tier a request deserves — and its published benchmark recomputes exactly from the data in the repo.

Good for

  • Routing to a cheaper model when the signals say the task is easy
  • A policy in YAML rather than in code, with a reason chain you can read
  • Benchmarks you can check: the raw results are in the repository

Watch out for

  • The last user message goes out, truncated at 4,000 characters
  • Two stars, though 27 commits and two implementations
  • Latency figures differ between the README and the package files

Tested Sep 20, 2026 at 16a0826b9f62 · Node and Python in Docker, offline; 118 TypeScript tests, 85 Python tests, and an independent recomputation of its benchmark

How we reviewed this: we ran both implementations’ test suites in Docker offline — 118 TypeScript tests and 85 Python tests passing — and recomputed its published benchmark from the results file in the repository. We made no Jev calls.

What it does

tiershift, by Vatsal Patel, routes each request to a model tier. One request asks eleven signals — difficulty, stakes, whether reasoning is needed, safety sensitivity, domain, expected output length and more — and a YAML policy turns those into a tier, with a printed reason chain: default, then which rule overrode it and why.

It ships a TypeScript implementation, a Python one, and an OpenAI-compatible proxy.

The benchmark checks out

Its README publishes a comparison across four routing arms on 120 prompts. The per-request results are committed, so we recomputed the table ourselves: quality and cost per thousand requests matched the published figures cell for cell.

That is rare. Most projects publish a number; this one publishes the rows behind it.

What to know

The state carries the system prompt (truncated), the last user message (up to 4,000 characters), the previous assistant message and the last tool result. The decision log keeps signals, tier, model, cost and reason — we checked a real log line, and it contains no message text, as the README claims.

One inconsistency: the headline latency figure differs between the README and the two package manifests.

Verdict

The most check-able small project in this round: two implementations, both tested, a policy you can read, and a benchmark whose arithmetic survives an independent recomputation.

For other routers, see jev-router and jev-gateway.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Model Routing

jev-router

★ 650▲ 24

gargpratyush/jev-router

Per-turn model routing for Claude Code and Codex. Simple work goes to the fast tier and difficult work to the strong tier.

JavaScriptReviewed

JevRouter

★ 466

BillionsBobby/JevRouter

Routes each agent step to a model, subagent, Skill, MCP tool, or CLI with one Jev Choice, requiring confirmation for risky capabilities and keeping decision receipts.

TypeScriptReviewed

HiRoute

★ 371▲ 20

higress-group/HiRoute

Local-first routing and coordination engine for long-running agent work, with a jev-decider extension that routes on typed decisions.

Rust

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.