| name | langchain-openrouter |
| description | LangChain OpenRouter integration — ChatOpenRouter gives access to hundreds of models (Claude, GPT-4o, Gemini, Llama, etc.) through a single API key. Supports provider routing preferences, reasoning models, plugins, tool calling, structured output, and request attribution/tracing. |
LangChain OpenRouter Skill
Expert assistance for langchain-openrouter: one class (ChatOpenRouter) that routes to hundreds of models from OpenAI, Anthropic, Google, Meta, and more through a single API and API key.
Install: pip install -U langchain-openrouter
Setup: export OPENROUTER_API_KEY=your_api_key
Models: https://openrouter.ai/models
Reference: references/api.md (500 KB — full API reference).
When to Use This Skill
Activate when:
- Switching between model providers — using
ChatOpenRouter with different model strings
- Routing to a specific provider — using
openrouter_provider={"order": [...]} to prefer one backend
- Using reasoning models — setting
reasoning param for models like deepseek/deepseek-r1
- Tool calling — using
.bind_tools() with any OpenRouter model
- Structured output — using
.with_structured_output() with a Pydantic schema
- Adding app attribution — setting
app_url, app_title, app_categories for marketplace
- Grouping requests — using
session_id for observability
- Tracing broadcast metadata — using
trace param
- Using OpenRouter plugins — setting
plugins param
Quick Reference
ChatOpenRouter — basic usage
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="anthropic/claude-sonnet-4-6",
temperature=0.7,
max_tokens=1024,
)
response = model.invoke("Explain quantum entanglement in plain English.")
print(response.content)
for chunk in model.stream("Write a haiku about code:"):
print(chunk.content, end="", flush=True)
Switch models with one variable
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(model="openai/gpt-4o", temperature=0)
model = ChatOpenRouter(model="google/gemini-2.0-flash", temperature=0)
model = ChatOpenRouter(model="meta-llama/llama-3.1-8b-instruct", temperature=0.5)
model = ChatOpenRouter(model="deepseek/deepseek-r1", temperature=0)
Force routing to a specific provider
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="anthropic/claude-sonnet-4-6",
openrouter_provider={
"order": ["Anthropic"],
},
)
model = ChatOpenRouter(
model="openai/gpt-4o",
openrouter_provider={"order": ["Azure"]},
)
Reasoning models
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="deepseek/deepseek-r1",
reasoning={
"effort": "high",
},
temperature=0,
)
response = model.invoke("What is the 100th Fibonacci number?")
print(response.content)
Tool calling
from langchain_openrouter import ChatOpenRouter
from langchain_core.tools import tool
@tool
def get_stock_price(ticker: str) -> float:
"""Get the current stock price for a ticker symbol."""
return 150.25
model = ChatOpenRouter(model="openai/gpt-4o-mini")
model_with_tools = model.bind_tools([get_stock_price])
response = model_with_tools.invoke("What's the current AAPL price?")
print(response.tool_calls)
Structured output
from langchain_openrouter import ChatOpenRouter
from pydantic import BaseModel, Field
class MovieReview(BaseModel):
title: str = Field(description="Movie title")
rating: float = Field(description="Rating from 0 to 10")
summary: str = Field(description="Brief review summary")
model = ChatOpenRouter(model="anthropic/claude-sonnet-4-6")
structured = model.with_structured_output(MovieReview)
review = structured.invoke("Review the movie Inception.")
print(f"{review.title}: {review.rating}/10")
Attribution and observability
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="openai/gpt-4o-mini",
app_url="https://myapp.example.com",
app_title="My LLM App",
app_categories=["productivity", "coding"],
session_id="user-session-abc123",
trace={
"user_id": "user-123",
"experiment": "v2-prompts",
},
)
API Reference
ChatOpenRouter key parameters
| Param | Type | Description |
|---|
model | str | Model ID (e.g. "anthropic/claude-sonnet-4-6") |
temperature | float | None | Sampling temperature |
max_tokens | int | None | Max tokens to generate |
max_completion_tokens | int | None | Alias for max_tokens |
top_p | float | None | Nucleus sampling |
frequency_penalty | float | None | Repetition penalty |
presence_penalty | float | None | Topic novelty penalty |
seed | int | None | Reproducibility seed |
api_key | str | None | API key (or OPENROUTER_API_KEY env) |
openrouter_provider | dict | Provider routing preferences |
reasoning | dict | None | Reasoning config {"effort": "high"} |
plugins | list | None | OpenRouter plugins |
app_url | str | None | App URL for attribution |
app_title | str | None | App title for attribution |
app_categories | list[str] | None | Marketplace categories |
session_id | str | None | Group related requests |
trace | dict | None | Broadcast trace metadata |
max_retries | int | Max retries (default 2) |
streaming | bool | Enable streaming |
openrouter_provider options
{
"order": ["Anthropic", "AWS Bedrock"],
"allow_fallbacks": True,
"require_parameters": True,
"data_collection": "deny",
"only": ["Anthropic"],
"ignore": ["Azure"],
}
Popular Model IDs
| Provider | Model ID | Notes |
|---|
| Anthropic | anthropic/claude-sonnet-4-6 | Latest Sonnet |
| Anthropic | anthropic/claude-haiku-4-5 | Fast/cheap |
| OpenAI | openai/gpt-4o | Most capable GPT-4 |
| OpenAI | openai/gpt-4o-mini | Fast/cheap |
| Google | google/gemini-2.0-flash | Fast, multimodal |
| Google | google/gemini-2.5-pro | Most capable Gemini |
| Meta | meta-llama/llama-3.1-8b-instruct | Open source |
| DeepSeek | deepseek/deepseek-r1 | Reasoning model |
| Mistral | mistralai/mistral-large | Strong European model |
Full list: https://openrouter.ai/models
Reference Files
| File | Size | Contents |
|---|
references/api.md | 500 KB | Full API reference |
references/llms.md | 28 KB | Doc index |
references/llms-full.md | 500 KB | Complete page content |
Source: https://reference.langchain.com/python/langchain-openrouter
Platform docs: https://openrouter.ai/docs
API key: https://openrouter.ai/keys