feat: add OpenRouter provider support for claude-code-router

This commit is contained in:
ajmallesh
2026-01-15 15:21:34 -08:00
parent d925c4942b
commit d01980ce4b
4 changed files with 25 additions and 4 deletions
+6
View File
@@ -35,6 +35,10 @@ ANTHROPIC_API_KEY=your-api-key-here
# DEEPSEEK_API_BASE=https://api.deepseek.com/chat/completions # DEEPSEEK_API_BASE=https://api.deepseek.com/chat/completions
# ROUTER_DEFAULT=deepseek,deepseek-chat # ROUTER_DEFAULT=deepseek,deepseek-chat
# --- OpenRouter (access 100+ models via single API) ---
# OPENROUTER_API_KEY=sk-or-your-openrouter-key
# ROUTER_DEFAULT=openrouter,anthropic/claude-sonnet-4
# ============================================================================= # =============================================================================
# Available Models # Available Models
# ============================================================================= # =============================================================================
@@ -42,3 +46,5 @@ ANTHROPIC_API_KEY=your-api-key-here
# Gemini: gemini-2.5-pro, gemini-2.5-flash # Gemini: gemini-2.5-pro, gemini-2.5-flash
# DeepSeek: (Together.ai) deepseek-ai/DeepSeek-V3, deepseek-ai/DeepSeek-R1 # DeepSeek: (Together.ai) deepseek-ai/DeepSeek-V3, deepseek-ai/DeepSeek-R1
# (Official) deepseek-chat, deepseek-reasoner # (Official) deepseek-chat, deepseek-reasoner
# OpenRouter: anthropic/claude-sonnet-4, google/gemini-2.5-pro-preview,
# openai/gpt-4o, meta-llama/llama-3.3-70b-instruct (100+ more)
+14
View File
@@ -32,6 +32,20 @@
"transformer": { "transformer": {
"use": ["deepseek", "enhancetool"] "use": ["deepseek", "enhancetool"]
} }
},
{
"name": "openrouter",
"api_base_url": "https://openrouter.ai/api/v1/chat/completions",
"api_key": "$OPENROUTER_API_KEY",
"models": [
"anthropic/claude-sonnet-4",
"google/gemini-2.5-pro-preview",
"openai/gpt-4o",
"meta-llama/llama-3.3-70b-instruct"
],
"transformer": {
"use": ["openrouter"]
}
} }
], ],
"Router": { "Router": {
+1
View File
@@ -60,6 +60,7 @@ services:
- GEMINI_API_KEY=${GEMINI_API_KEY:-} - GEMINI_API_KEY=${GEMINI_API_KEY:-}
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-} - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
- DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.together.xyz/v1/chat/completions} - DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.together.xyz/v1/chat/completions}
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY:-}
- ROUTER_DEFAULT=${ROUTER_DEFAULT:-openai,gpt-4o} - ROUTER_DEFAULT=${ROUTER_DEFAULT:-openai,gpt-4o}
healthcheck: healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3456/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"] test: ["CMD", "node", "-e", "require('http').get('http://localhost:3456/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
+4 -4
View File
@@ -125,12 +125,12 @@ cmd_start() {
# Check for API key (router mode can use alternative provider API keys) # Check for API key (router mode can use alternative provider API keys)
if [ -z "$ANTHROPIC_API_KEY" ] && [ -z "$CLAUDE_CODE_OAUTH_TOKEN" ]; then if [ -z "$ANTHROPIC_API_KEY" ] && [ -z "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
if [ "$ROUTER" = "true" ] && { [ -n "$OPENAI_API_KEY" ] || [ -n "$GEMINI_API_KEY" ] || [ -n "$DEEPSEEK_API_KEY" ]; }; then if [ "$ROUTER" = "true" ] && { [ -n "$OPENAI_API_KEY" ] || [ -n "$GEMINI_API_KEY" ] || [ -n "$DEEPSEEK_API_KEY" ] || [ -n "$OPENROUTER_API_KEY" ]; }; then
# Router mode with alternative provider - set a placeholder for SDK init # Router mode with alternative provider - set a placeholder for SDK init
export ANTHROPIC_API_KEY="router-mode" export ANTHROPIC_API_KEY="router-mode"
else else
echo "ERROR: Set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN in .env" echo "ERROR: Set ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN in .env"
echo " (or use ROUTER=true with OPENAI_API_KEY, GEMINI_API_KEY, or DEEPSEEK_API_KEY)" echo " (or use ROUTER=true with OPENAI_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, or OPENROUTER_API_KEY)"
exit 1 exit 1
fi fi
fi fi
@@ -166,8 +166,8 @@ cmd_start() {
echo "Starting claude-code-router..." echo "Starting claude-code-router..."
# Check for provider API keys # Check for provider API keys
if [ -z "$OPENAI_API_KEY" ] && [ -z "$GEMINI_API_KEY" ] && [ -z "$DEEPSEEK_API_KEY" ]; then if [ -z "$OPENAI_API_KEY" ] && [ -z "$GEMINI_API_KEY" ] && [ -z "$DEEPSEEK_API_KEY" ] && [ -z "$OPENROUTER_API_KEY" ]; then
echo "WARNING: No provider API key set (OPENAI_API_KEY, GEMINI_API_KEY, or DEEPSEEK_API_KEY). Router may not work." echo "WARNING: No provider API key set (OPENAI_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, or OPENROUTER_API_KEY). Router may not work."
fi fi
# Start router with profile # Start router with profile