OpenRouter provides access to 200+ LLM models through a single API. Use the Fallom SDK for full tracing with Model A/B Testing and Prompt Management.
Installation
pip install fallom openai
Quick Start
OpenRouter uses the OpenAI-compatible API:
Import order matters! Initialize Fallom before importing OpenAI.
import os
# Import and initialize Fallom FIRST
import fallom
fallom.init( api_key = os.environ[ "FALLOM_API_KEY" ])
# NOW import OpenAI
from openai import OpenAI
# Create client with OpenRouter base URL
client = OpenAI(
base_url = "https://openrouter.ai/api/v1" ,
api_key = os.environ[ "OPENROUTER_API_KEY" ]
)
# Set session context (config_key, session_id, customer_id)
fallom.trace.set_session( "my-app" , "session-123" , customer_id = "user-456" )
# Use any OpenRouter model
response = client.chat.completions.create(
model = "openai/gpt-4o-mini" ,
messages = [{ "role" : "user" , "content" : "Hello!" }]
)
print (response.choices[ 0 ].message.content)
Available Models
OpenRouter supports 200+ models:
# OpenAI
model = "openai/gpt-4o"
model = "openai/gpt-4o-mini"
# Anthropic
model = "anthropic/claude-sonnet-4-20250514"
model = "anthropic/claude-3-opus"
# Google
model = "google/gemini-1.5-pro"
model = "google/gemini-1.5-flash"
# Meta
model = "meta-llama/llama-3.1-70b-instruct"
# And many more...
Model A/B Testing
Test different models from different providers:
import fallom
from fallom import models
fallom.init( api_key = "your-fallom-api-key" )
from openai import OpenAI
client = OpenAI(
base_url = "https://openrouter.ai/api/v1" ,
api_key = "your-openrouter-key"
)
# Get assigned model - could be GPT-4o, Claude, Gemini, etc.
model_id = models.get( "my-experiment" , "session-123" , fallback = "openai/gpt-4o-mini" )
fallom.trace.set_session( "my-experiment" , "session-123" )
response = client.chat.completions.create(
model = model_id,
messages = [{ "role" : "user" , "content" : "Hello!" }]
)
Streaming
import fallom
fallom.init( api_key = "your-fallom-api-key" )
from openai import OpenAI
client = OpenAI(
base_url = "https://openrouter.ai/api/v1" ,
api_key = "your-openrouter-key"
)
fallom.trace.set_session( "my-agent" , "session-123" )
stream = client.chat.completions.create(
model = "openai/gpt-4o-mini" ,
messages = [{ "role" : "user" , "content" : "Write a poem." }],
stream = True
)
for chunk in stream:
if chunk.choices[ 0 ].delta.content:
print (chunk.choices[ 0 ].delta.content, end = "" )
What Gets Traced
Field Description Model Full model path (e.g., openai/gpt-4o) Duration Total request time (ms) Tokens Prompt, completion tokens Cost Calculated from token usage Prompts All input messages Completions Model response Session Your config key + session ID
SDK vs Broadcast
Feature SDK (this page) Broadcast Tracing ✅ ✅ Token tracking ✅ ✅ Cost tracking ✅ ✅ Session grouping ✅ ✅ Model A/B Testing ✅ ❌ Prompt Management ✅ ❌
Next Steps
OpenRouter Broadcast SDK-free tracing via OpenRouter.
Model A/B Testing Test models across providers.