Skip to navigation
Unified Mode

Python (Unified Mode)

Call any provider using the OpenAI Python SDK

Setup

pip install openai
from openai import OpenAI
client = OpenAI(
api_key="sk-proxy-YOUR_KEY_HERE",
base_url="https://api.enterpriserouter.com/v1"
)

Basic chat

OpenAI

response = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Anthropic

response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-6",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Gemini

response = client.chat.completions.create(
model="google/gemini-2.5-flash",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)

Streaming

Works identically across all providers:

stream = client.chat.completions.create(
model="anthropic/claude-sonnet-4-6",
messages=[{"role": "user", "content": "Write a short poem about code."}],
stream=True
)
for chunk in stream:
content = chunk.choices[0].delta.content
if content:
print(content, end="")

System messages

response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-6",
messages=[
{"role": "system", "content": "You are a senior software engineer. Be concise."},
{"role": "user", "content": "What's the difference between a mutex and a semaphore?"}
]
)

System messages are translated to each provider’s native format automatically (e.g., Anthropic’s system parameter, Gemini’s system_instruction).

Tool calling

The same tool definition works for every provider:

tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
}
]
response = client.chat.completions.create(
model="google/gemini-2.5-flash",
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
tools=tools,
tool_choice="auto"
)
# Standard OpenAI tool_calls format, regardless of provider
tool_call = response.choices[0].message.tool_calls[0]
print(f"{tool_call.function.name}({tool_call.function.arguments})")

Multi-turn conversation

messages = [
{"role": "system", "content": "You are a helpful math tutor."},
{"role": "user", "content": "What is a derivative?"}
]
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages
)
messages.append(response.choices[0].message)
messages.append({"role": "user", "content": "Can you give me an example?"})
response = client.chat.completions.create(
model="openai/gpt-4o",
messages=messages
)
print(response.choices[0].message.content)

Switching providers

The power of unified mode: swap providers by changing one string. Your code, prompts, tools, and response handling all stay the same.

models = [
"openai/gpt-4o",
"anthropic/claude-sonnet-4-6",
"google/gemini-2.5-flash",
]
for model in models:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "What is 2+2?"}]
)
print(f"{model}: {response.choices[0].message.content}")