mirror of
https://github.com/KeygraphHQ/shannon.git
synced 2026-02-12 17:22:50 +00:00
feat: add DeepSeek provider support for claude-code-router
- Add DeepSeek provider config with Together.ai and official API support - Configure deepseek and enhancetool transformers for reliable tool calling - Add DEEPSEEK_API_KEY and DEEPSEEK_API_BASE env vars to docker-compose - Update shannon CLI to recognize DeepSeek as valid router provider
This commit is contained in:
19
.env.example
19
.env.example
@@ -23,11 +23,22 @@ ANTHROPIC_API_KEY=your-api-key-here
|
|||||||
# ROUTER_DEFAULT=openai,gpt-4o
|
# ROUTER_DEFAULT=openai,gpt-4o
|
||||||
|
|
||||||
# --- Google Gemini ---
|
# --- Google Gemini ---
|
||||||
GEMINI_API_KEY=your-gemini-key
|
# GEMINI_API_KEY=your-gemini-key
|
||||||
ROUTER_DEFAULT=gemini,gemini-2.5-pro
|
# ROUTER_DEFAULT=gemini,gemini-2.5-pro
|
||||||
|
|
||||||
|
# --- DeepSeek (cheapest option) ---
|
||||||
|
# DEEPSEEK_API_KEY=your-together-or-deepseek-key
|
||||||
|
# DEEPSEEK_API_BASE=https://api.together.xyz/v1/chat/completions # Default: Together.ai
|
||||||
|
# ROUTER_DEFAULT=deepseek,deepseek-ai/DeepSeek-V3
|
||||||
|
#
|
||||||
|
# To use DeepSeek's official API instead:
|
||||||
|
# DEEPSEEK_API_BASE=https://api.deepseek.com/chat/completions
|
||||||
|
# ROUTER_DEFAULT=deepseek,deepseek-chat
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Available Models
|
# Available Models
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# OpenAI: gpt-4o, gpt-4o-mini
|
# OpenAI: gpt-4o, gpt-4o-mini
|
||||||
# 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
|
||||||
|
# (Official) deepseek-chat, deepseek-reasoner
|
||||||
|
|||||||
@@ -23,6 +23,15 @@
|
|||||||
"transformer": {
|
"transformer": {
|
||||||
"use": ["gemini"]
|
"use": ["gemini"]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deepseek",
|
||||||
|
"api_base_url": "$DEEPSEEK_API_BASE",
|
||||||
|
"api_key": "$DEEPSEEK_API_KEY",
|
||||||
|
"models": ["deepseek-ai/DeepSeek-V3", "deepseek-ai/DeepSeek-R1", "deepseek-chat", "deepseek-reasoner"],
|
||||||
|
"transformer": {
|
||||||
|
"use": ["deepseek", "enhancetool"]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"Router": {
|
"Router": {
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ services:
|
|||||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
||||||
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
||||||
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
- GEMINI_API_KEY=${GEMINI_API_KEY:-}
|
||||||
|
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
|
||||||
|
- DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.together.xyz/v1/chat/completions}
|
||||||
- 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))"]
|
||||||
|
|||||||
12
shannon
12
shannon
@@ -123,14 +123,14 @@ cmd_start() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check for API key (router mode can use OPENAI_API_KEY or GEMINI_API_KEY instead)
|
# 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" ]; }; then
|
if [ "$ROUTER" = "true" ] && { [ -n "$OPENAI_API_KEY" ] || [ -n "$GEMINI_API_KEY" ] || [ -n "$DEEPSEEK_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 or GEMINI_API_KEY)"
|
echo " (or use ROUTER=true with OPENAI_API_KEY, GEMINI_API_KEY, or DEEPSEEK_API_KEY)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -165,9 +165,9 @@ cmd_start() {
|
|||||||
else
|
else
|
||||||
echo "Starting claude-code-router..."
|
echo "Starting claude-code-router..."
|
||||||
|
|
||||||
# Check for OpenAI API key
|
# Check for provider API keys
|
||||||
if [ -z "$OPENAI_API_KEY" ] && [ -z "$GEMINI_API_KEY" ]; then
|
if [ -z "$OPENAI_API_KEY" ] && [ -z "$GEMINI_API_KEY" ] && [ -z "$DEEPSEEK_API_KEY" ]; then
|
||||||
echo "WARNING: Neither OPENAI_API_KEY nor GEMINI_API_KEY set. Router may not work."
|
echo "WARNING: No provider API key set (OPENAI_API_KEY, GEMINI_API_KEY, or DEEPSEEK_API_KEY). Router may not work."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Start router with profile
|
# Start router with profile
|
||||||
|
|||||||
Reference in New Issue
Block a user