Python SDK for TokenRouter - Intelligent LLM Routing API
Project description
TokenRouter Python SDK
Official Python SDK for TokenRouter — an intelligent LLM router that provides OpenAI‑compatible endpoints and a native routing endpoint.
This README focuses on the routing interfaces you’ll use today:
- client.create(...) → Native routing endpoint (/route)
- client.chat.completions.create(...) → OpenAI chat completions (/v1/chat/completions)
- client.completions.create(...) → OpenAI legacy text completions (/v1/completions)
All calls are BYOK. Provide your TokenRouter API key, and configure provider keys in TokenRouter.
Installation
pip install tokenrouter
Quick Start (Native Route)
from tokenrouter import TokenRouter
client = TokenRouter(
api_key="tr_...",
base_url="http://localhost:8000" # or https://api.tokenrouter.io
)
response = client.create(
model="auto",
mode="balanced",
model_preferences=["gpt-4o", "gpt-4o-mini"],
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
)
print(response.choices[0].message.content)
Endpoints
Native Route (/route)
OpenAI‑like request/response shape plus TokenRouter metadata: cost_usd, latency_ms, routed_model, routed_provider, service_tier, etc.
Non‑streaming
response = client.create(
model="auto",
mode="balanced",
model_preferences=["gpt-4o", "gpt-4o-mini"],
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
)
print(response.choices[0].message.content)
Streaming
for chunk in client.create(
model="auto",
stream=True,
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Stream a short greeting."}
],
):
delta = (chunk.choices[0].get("delta", {}) if chunk.choices else {})
if delta.get("content"):
print(delta["content"], end="")
Chat Completions (/v1/chat/completions)
OpenAI‑compatible chat completions.
Non‑streaming
response = client.chat.completions.create(
model="auto",
mode="balanced",
model_preferences=["gpt-4o", "gpt-4o-mini"],
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
)
print(response.choices[0].message.content)
Streaming
for chunk in client.chat.completions.create(
model="auto",
stream=True,
messages=[
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"}
],
):
delta = (chunk.choices[0].get("delta", {}) if chunk.choices else {})
if delta.get("content"):
print(delta["content"], end="")
Legacy Completions (/v1/completions)
OpenAI legacy text completion format. The SDK returns the raw OpenAI‑style dict.
Non‑streaming
resp = client.completions.create(
model="auto",
prompt="Say this is a test",
mode="balanced",
)
print(resp["choices"][0]["text"]) # text completion shape
Streaming
for chunk in client.completions.create(
model="auto",
prompt="Stream this as text",
stream=True,
):
if chunk.get("choices"):
print(chunk["choices"][0].get("text", ""), end="")
Errors
from tokenrouter import AuthenticationError, RateLimitError, InvalidRequestError, APIConnectionError
try:
response = client.chat.completions.create(
messages=[{"role": "user", "content": "Hello"}],
model="auto"
)
print(response.choices[0].message.content)
except RateLimitError as e:
print(f"Rate limited, retry after: {e.retry_after}s")
except AuthenticationError:
print("Invalid API key")
except InvalidRequestError as e:
print(f"Invalid request: {e}")
except APIConnectionError as e:
print(f"Connection error: {e}")
Environment
export TOKENROUTER_API_KEY=tr_your-api-key
# Optional
export TOKENROUTER_BASE_URL=https://api.tokenrouter.io
Using OpenAI SDK against TokenRouter
from openai import OpenAI
client = OpenAI(api_key="sk_...", base_url="https://api.tokenrouter.io/v1")
response = client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "Hello"}],
)
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 tokenrouter-1.0.5.tar.gz.
File metadata
- Download URL: tokenrouter-1.0.5.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ece0d8b45f425ecd7e9220133fbb80c3f95e3bca40607ce8a9a053468353910c
|
|
| MD5 |
ddb0ad9a8b252c0ac77058ad05802219
|
|
| BLAKE2b-256 |
c9322cc1f3c4359d0672bab9fe4f4fc3d2bea2182a6274f738ad670a9260c7c3
|
File details
Details for the file tokenrouter-1.0.5-py3-none-any.whl.
File metadata
- Download URL: tokenrouter-1.0.5-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc4769cc306fda712191b326d64c7ddb078c75752f279afa511e41bb8d075421
|
|
| MD5 |
6ea970f6b3fa126ca4f19d30220f946a
|
|
| BLAKE2b-256 |
1bc013a5061188a1f700cf7dabc9d72debad63a77c92ed218273020286d2d283
|