skills/langchain-openrouter/SKILL.md
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.
npx skillsauth add enuno/claude-command-and-control langchain-openrouterInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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).
Activate when:
ChatOpenRouter with different model stringsopenrouter_provider={"order": [...]} to prefer one backendreasoning param for models like deepseek/deepseek-r1.bind_tools() with any OpenRouter model.with_structured_output() with a Pydantic schemaapp_url, app_title, app_categories for marketplacesession_id for observabilitytrace paramplugins paramfrom langchain_openrouter import ChatOpenRouter
# Use any model from openrouter.ai/models
model = ChatOpenRouter(
model="anthropic/claude-sonnet-4-6",
temperature=0.7,
max_tokens=1024,
# api_key="...", # or set OPENROUTER_API_KEY env var
)
response = model.invoke("Explain quantum entanglement in plain English.")
print(response.content)
# Stream
for chunk in model.stream("Write a haiku about code:"):
print(chunk.content, end="", flush=True)
from langchain_openrouter import ChatOpenRouter
# GPT-4o
model = ChatOpenRouter(model="openai/gpt-4o", temperature=0)
# Gemini Flash (fast, cheap)
model = ChatOpenRouter(model="google/gemini-2.0-flash", temperature=0)
# Llama 3.1 (open source, free tier)
model = ChatOpenRouter(model="meta-llama/llama-3.1-8b-instruct", temperature=0.5)
# DeepSeek R1 (reasoning)
model = ChatOpenRouter(model="deepseek/deepseek-r1", temperature=0)
from langchain_openrouter import ChatOpenRouter
# Force anthropic/claude-sonnet-4-5 to route through Anthropic (not a proxy)
model = ChatOpenRouter(
model="anthropic/claude-sonnet-4-6",
openrouter_provider={
"order": ["Anthropic"], # try Anthropic first
# "allow_fallbacks": False, # fail if Anthropic unavailable
# "require_parameters": True, # only use providers that support all params
},
)
# Route through Azure OpenAI
model = ChatOpenRouter(
model="openai/gpt-4o",
openrouter_provider={"order": ["Azure"]},
)
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="deepseek/deepseek-r1",
reasoning={
"effort": "high", # low | medium | high
# "exclude": False, # True to hide reasoning from response
},
temperature=0,
)
response = model.invoke("What is the 100th Fibonacci number?")
print(response.content)
# response.additional_kwargs may contain reasoning trace
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 # mock
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)
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")
from langchain_openrouter import ChatOpenRouter
model = ChatOpenRouter(
model="openai/gpt-4o-mini",
app_url="https://myapp.example.com", # shows in OpenRouter dashboard
app_title="My LLM App",
app_categories=["productivity", "coding"],
session_id="user-session-abc123", # group related requests
trace={ # metadata for broadcast
"user_id": "user-123",
"experiment": "v2-prompts",
},
)
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"], # provider preference order
"allow_fallbacks": True, # fall back to other providers
"require_parameters": True, # only providers supporting all params
"data_collection": "deny", # opt out of training data use
"only": ["Anthropic"], # restrict to specific providers
"ignore": ["Azure"], # exclude specific providers
}
| 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
| 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
tools
MemPalace local-first AI memory system. Use when setting up persistent memory for Claude Code sessions, mining project files or conversation transcripts, querying past context, configuring MCP tools, managing the knowledge graph, or troubleshooting palace operations.
tools
LangSmith Python SDK — trace, evaluate, and monitor LLM applications. Covers @traceable decorator, trace context manager, Client API, evaluate() / aevaluate(), comparative evaluation, custom evaluators, dataset management, prompt caching, ASGI middleware, and pytest plugin.
development
LangGraph (Python) — build stateful, controllable agent graphs with checkpointing, streaming, persistence, interrupts, fault tolerance, and durable execution. Covers both Graph API (StateGraph) and Functional API (@entrypoint/@task).
development
LangGraph Graph API (Python) — build explicit DAG agent workflows with StateGraph, typed state, nodes, edges, Command routing, Send fan-out, checkpointers, interrupts, and streaming. Use when you need explicit control flow and graph topology.