Python SDK
Planned Python SDK for AllRoutes. Until it ships, use the OpenAI Python client pointed at https://api.allroutes.ai/v1.
Not yet published. The native
allroutesPython package on this page is on the roadmap but is not on PyPI yet. Use the OpenAI Python client pointed athttps://api.allroutes.ai/v1for now -- see the snippet directly below. The rest of this document previews the surface the native SDK will ship with.
Use the OpenAI Client Today
pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ALLROUTES_API_KEY"],
base_url="https://api.allroutes.ai/v1",
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
Installation (planned)
pip install allroutes # not yet published
Requires Python 3.8+.
Quick Start
from allroutes import AllRoutesClient
client = AllRoutesClient(api_key="allroutes_sk_...")
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Explain quantum computing in one paragraph."}],
)
print(response.content)
OpenAI Compatibility
AllRoutes uses the same request/response format as OpenAI. Switching from the OpenAI Python SDK requires minimal changes:
# Before (OpenAI)
from openai import OpenAI
client = OpenAI(api_key="sk-...")
# After (AllRoutes)
from allroutes import AllRoutesClient
client = AllRoutesClient(api_key="allroutes_sk_...")
# The rest of your code stays the same
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
Use any supported provider by changing the model name:
# Anthropic
response = client.chat.completions.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "Hello from Claude!"}],
)
# Google
response = client.chat.completions.create(
model="gemini-2.0-flash",
messages=[{"role": "user", "content": "Hello from Gemini!"}],
)
Streaming
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Write a short story about a robot."}],
stream=True,
)
for chunk in stream:
print(chunk.delta_content, end="", flush=True)
print()
Each StreamChunk has:
delta_content-- the new text fragmentfinish_reason--Noneuntil the final chunk (then"stop","length", etc.)model-- the model that generated the chunk
Embeddings
# Single input
resp = client.create_embedding(
model="text-embedding-3-small",
input="The quick brown fox jumps over the lazy dog",
)
vector = resp["data"][0]["embedding"]
print(f"Dimensions: {len(vector)}")
# Batch input
resp = client.create_embedding(
model="text-embedding-3-small",
input=["First sentence", "Second sentence", "Third sentence"],
)
for item in resp["data"]:
print(f"Index {item['index']}: {len(item['embedding'])} dims")
Credits
credits = client.get_credits()
print(f"Balance: ${credits['balance_usd']:.2f} USD")
print(f"Lifetime spend: ${credits['lifetime_spend_usd']:.2f} USD")
print(f"Auto-replenish: {credits['auto_replenish']}")
Models
models = client.list_models()
for model in models:
print(f"{model['id']} by {model['provider']}")
Provider Keys (BYOK)
keys = client.list_provider_keys()
for key in keys:
print(f"{key['provider']}: {key['label']} (active: {key['is_active']})")
Presets
presets = client.list_presets()
for preset in presets:
print(f"{preset['name']} -> {preset['model']}")
Configuration
| Parameter | Type | Default | Description |
|---|---|---|---|
api_key | str | (required) | Your AllRoutes API key |
base_url | str | https://api.allroutes.ai | API base URL |
timeout | float | 120.0 | Request timeout in seconds |
max_retries | int | 2 | Max retries for failed requests |
client = AllRoutesClient(
api_key="allroutes_sk_...",
base_url="https://custom-gateway.example.com",
timeout=60.0,
max_retries=3,
)
Context Manager
Use the client as a context manager to ensure proper connection cleanup:
with AllRoutesClient(api_key="allroutes_sk_...") as client:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.content)
# Connection is automatically closed here
Error Handling
import httpx
from allroutes import AllRoutesClient
client = AllRoutesClient(api_key="allroutes_sk_...")
try:
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
except httpx.HTTPStatusError as e:
if e.response.status_code == 401:
print("Invalid API key")
elif e.response.status_code == 429:
print("Rate limit exceeded, try again later")
else:
print(f"API error {e.response.status_code}: {e.response.text}")
except httpx.TransportError as e:
print(f"Network error: {e}")
The client automatically retries on transient errors (5xx and 429) with exponential backoff.
Response Types
CompletionResponse
| Field | Type | Description |
|---|---|---|
content | str | The generated text |
model | str | Model that produced the response |
finish_reason | str | Why generation stopped |
usage | Usage | Token usage statistics |
request_id | str | Unique request identifier |
Usage
| Field | Type | Description |
|---|---|---|
prompt_tokens | int | Tokens in the prompt |
completion_tokens | int | Tokens generated |
total_tokens | int | Total tokens consumed |
Environment Variable
The SDK automatically reads ALLROUTES_API_KEY from the environment if no api_key is passed:
export ALLROUTES_API_KEY="allroutes_sk_..."
client = AllRoutesClient() # reads from environment
Async Client
For asyncio applications, use AsyncAllRoutesClient:
import asyncio
from allroutes import AsyncAllRoutesClient
async def main():
async with AsyncAllRoutesClient() as client:
response = await client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.content)
# Async streaming
stream = await client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "Stream me a poem."}],
stream=True,
)
async for chunk in stream:
print(chunk.delta_content, end="", flush=True)
asyncio.run(main())
See Also
- Quick Start -- 5-minute setup
- Chat Completions -- full parameter reference
- Error Handling -- production retry/fallback patterns
- Node.js SDK -- equivalent SDK for TypeScript
- OpenAI SDK Drop-in -- alternative for existing OpenAI codebases