Unified LLM client with key rotation, health-aware failover, and multi-provider orchestration.
Project description
llm-rotate
llm-rotate is a Python library for resilient LLM calls across providers.
It provides API key rotation, health-aware selection, retry/failover, and a unified chat interface.
What it does
- Unified API for OpenAI, Anthropic, Google AI Studio, Vertex AI, and OpenRouter
- Automatic key rotation on rate-limit/auth/transient failures
- Provider fallback chains
- Streaming and sync/async chat support
- Structured per-call usage logging
Quickstart
llm-rotate ships a built-in provider catalog covering all five supported
backends. Configure it programmatically with a plain Python dict before your
first lm call — no env var registry blob required.
from llm_rotate import configure, lm
configure(
registry={
"keys": [
{
"key_id": "openai-1",
"provider": "openai",
"secret_ref": "env://OPENAI_API_KEY",
"models": ["gpt-4o-mini"],
},
{
"key_id": "gemini-1",
"provider": "google_ai_studio",
"secret_ref": "env://GOOGLE_API_KEY",
"models": ["gemini-2.0-flash"],
},
]
},
use_keys=["openai-1", "gemini-1"],
)
response = await lm.chat("gpt-4o-mini", [{"role": "user", "content": "Hello"}])
print(response.content)
configure() must be called before the first use of lm. Using lm
without prior configure() raises ConfigurationError.
Required fields per key entry
| Field | Description |
|---|---|
key_id |
Unique name for this credential (used in logs and use_keys=[...]) |
provider |
One of: openai, anthropic, google_ai_studio, google_vertex, openrouter |
secret_ref |
env://VAR_NAME — resolved at runtime, never stored |
models |
List of model IDs this key may serve (used for routing and inference) |
Overriding built-in provider settings (optional)
If you need custom cooldown/quarantine values for a specific provider, add a
providers key containing only the entries you want to override — the rest keep
their built-in defaults:
configure(
registry={
"providers": {
"openai": {
"provider_type": "direct",
"display_name": "OpenAI",
"default_cooldown_seconds": 10,
}
},
"keys": [...],
},
use_keys=[...],
)
Merge rules
- Built-in providers (
openai,anthropic,google_ai_studio,google_vertex,openrouter) are always the base layer. - Any provider entry in the registry dict's
"providers"block replaces the corresponding built-in entry by name; providers not mentioned keep their built-in values. "keys"always come from the caller-supplied dict — the package ships no keys, credentials, orsecret_refvalues.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_rotate-0.1.2.tar.gz.
File metadata
- Download URL: llm_rotate-0.1.2.tar.gz
- Upload date:
- Size: 27.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7403210272be3266e7e2aa962b5c7a5b17c521459ad32785bef308131286b018
|
|
| MD5 |
45a0b34972525fe357eb6aef6cf0ced2
|
|
| BLAKE2b-256 |
ecd2a7db808d7446a0b4d8415d35a3fa50244dca70ffc420bf50f0fc495c93dd
|
File details
Details for the file llm_rotate-0.1.2-py3-none-any.whl.
File metadata
- Download URL: llm_rotate-0.1.2-py3-none-any.whl
- Upload date:
- Size: 43.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
807191ddc0f16ee5e2da631ea090cb163b48e90524f0809e26098e5964c300e2
|
|
| MD5 |
136cce88fcf4f69bb95b36bde890a03f
|
|
| BLAKE2b-256 |
5c3bbafad68c3c367b4a115fd149343b32a9907dcb865dbf22c8398d10c64358
|