Skip to main content

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

  1. Built-in providers (openai, anthropic, google_ai_studio, google_vertex, openrouter) are always the base layer.
  2. 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.
  3. "keys" always come from the caller-supplied dict — the package ships no keys, credentials, or secret_ref values.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_rotate-0.3.0.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_rotate-0.3.0-py3-none-any.whl (46.0 kB view details)

Uploaded Python 3

File details

Details for the file llm_rotate-0.3.0.tar.gz.

File metadata

  • Download URL: llm_rotate-0.3.0.tar.gz
  • Upload date:
  • Size: 30.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for llm_rotate-0.3.0.tar.gz
Algorithm Hash digest
SHA256 df229c83868b47a3b22fb8a8ff5cc68822c740ed7b5e6b4e8a04f73da93b636f
MD5 cea387b30a0145c24aae6d1ba88272fa
BLAKE2b-256 a291cb65d78c6522216ff90af974cf3444e472b78dcc5f2c57271e61f4dff86f

See more details on using hashes here.

File details

Details for the file llm_rotate-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: llm_rotate-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 46.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for llm_rotate-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d135876915a28a251e13f2833b71395fac886a17f0c1a481b4f562928cc4f757
MD5 68296b38b55717225841674075a287e3
BLAKE2b-256 594ba439410b21f5cfdb825610f1d0451a7fa89590aca92f5ab0c7e2acb345af

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page