0472GitHub
tiershift
Policy-bounded model routing for TypeScript and Python.
iamvatsalpatel/tiershiftREADME ↗
tiershift</h1> <p align="center"> <b>Stop paying flagship prices for prompts that don't need one.</b><br> tiershift reads each request, picks the cheapest model tier that can handle it, and escalates on evidence.<br> The judgment comes from <a href="https://docs.typesafe.ai">TypeSafe Jev</a>, a calibrated decision model. About 180 ms. Four cents per thousand routes. </p> <p align="center"> <a href="https://www.npmjs.com/package/tiershift"><img alt="npm" src="https://img.shields.io/npm/v/tiershift?label=npm&color=2a78d6"></a> <a href="https://pypi.org/project/tiershift/"><img alt="PyPI" src="https://img.shields.io/pypi/v/tiershift?label=pypi&color=2a78d6"></a> <a href="https://github.com/iamvatsalpatel/tiershift/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/iamvatsalpatel/tiershift/actions/workflows/ci.yml/badge.svg"></a> <a href="LICENSE"><img alt="MIT" src="https://img.shields.io/badge/license-MIT-2a78d6"></a> </p> ``` $ tiershift route "thanks, that's all for now" → deepseek/deepseek-flash fast default → fast $ tiershift route "Prove there are infinitely many primes of the form 4k+3." → openai/gpt-5.6-terra mid needs_reasoning 0.97 → at_least mid $ tiershift route "Redline this clause: Vendor indemnifies Client against all claims whatsoever." → openai/gpt-5.6-terra mid stakes 1.98 → at_least mid ``` Three real routes. Every request starts on the fast tier. It moves up only when Jev finds a reason: multi-step reasoning, hard difficulty, high stakes, or safety. The reason is printed with every decision, and `tiershift explain` shows every signal behind the last one. ## What we measured 120 prompts, from one-word acknowledgements to system design and legal review. Four ways to pick a model. Every