provider/model, and warpllm routes it — translating
where a provider differs and normalizing what comes back, including failures.
The routing core is written once in Rust and compiled for three languages, so
Python and Node get the same behaviour as Rust rather than a reimplementation
of it.
Quickstart
Install, export one key, and make a request in under five minutes.
Model routing
How
provider/model strings resolve, and why an unknown one is an error.SDK reference
The full surface for Python, TypeScript, and Rust.
Self-hosted gateway
Point any OpenAI SDK at a warpllm you run yourself.
Two ways to integrate
- As an SDK
- As a gateway
Install the package for your language and call it in-process. No extra hop,
no service to operate. Start at the quickstart.
What ships today
The published packages are 0.6.1. warpllm is early, and this table is the honest version of what you can build on.Claude is the first model warpllm reaches over a protocol that is not
chat completions. You still write an OpenAI-shaped request and read an
OpenAI-shaped reply; warpllm translates to Anthropic’s
/messages on the way
out and back, streaming included. Two gaps are worth knowing before you
route production traffic there — see
Model routing.0.6.0 is breaking in all three languages: the client-wide
base_url
option moved under each provider — see
Declaring providers — and eight retired model names left
the roster. Read the
changelog before
upgrading from 0.5.x.Design decisions worth knowing up front
Unknown model names are errors, never guesses
Unknown model names are errors, never guesses
warpllm matches the whole model string against its registry. A bare
gpt-5-nano, or any name the registry does not carry, fails before a
request goes out — rather than being forwarded to some upstream default and
billed. See Model routing.Your request crosses verbatim
Your request crosses verbatim
Request fields are the OpenAI ones, and fields warpllm does not model are
forwarded untouched. Nothing is renamed on the way in or out. See
Requests and responses.
Failures are normalized to OpenAI's vocabulary
Failures are normalized to OpenAI's vocabulary
DeepSeek answers an exhausted balance with a 402; warpllm reports it as
OpenAI would — a 429 with
code: "insufficient_quota" — so one handler
covers every provider. See Errors.API keys come from the environment
API keys come from the environment
A client reads them once, when it is built, from the variable each
provider’s registry entry names — so it is never asked up front for a key
it can find. A client can also declare the providers it serves, which
narrows both what is read and what is routable. See
Authentication.
Get help
Discord
Ask questions and follow development.
GitHub issues
Bugs, feature requests, and the public roadmap.