diff --git a/chat/public/admin.js b/chat/public/admin.js index 7e84ef2..9a453bf 100644 --- a/chat/public/admin.js +++ b/chat/public/admin.js @@ -1,6 +1,6 @@ (() => { - const DEFAULT_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'opencode']; - const PLANNING_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'ollama']; + const DEFAULT_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'opencode']; + const PLANNING_PROVIDERS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', 'ollama']; const pageType = document?.body?.dataset?.page || 'build'; console.log('Admin JS loaded, pageType:', pageType); const state = { diff --git a/chat/server.js b/chat/server.js index 916fbb7..1e39b86 100644 --- a/chat/server.js +++ b/chat/server.js @@ -156,6 +156,8 @@ const GROQ_API_KEY = process.env.GROQ_API_KEY || process.env.GROQ_API_TOKEN || ' const GROQ_API_URL = process.env.GROQ_API_URL || 'https://api.groq.com/openai/v1/chat/completions'; const NVIDIA_API_KEY = process.env.NVIDIA_API_KEY || process.env.NVIDIA_API_TOKEN || ''; const NVIDIA_API_URL = process.env.NVIDIA_API_URL || 'https://api.nvidia.com/v1'; +const CHUTES_API_KEY = process.env.CHUTES_API_KEY || process.env.CHUTES_API_TOKEN || ''; +const CHUTES_API_URL = process.env.CHUTES_API_URL || 'https://api.chutes.ai/v1'; const PROVIDER_LIMITS_FILE = path.join(STATE_DIR, 'provider-limits.json'); const PROVIDER_USAGE_FILE = path.join(STATE_DIR, 'provider-usage.json'); @@ -503,7 +505,7 @@ const PLAN_PRICES = { }; const AUTO_MODEL_TOKEN = 'auto'; const DEFAULT_PROVIDER_FALLBACK = 'opencode'; -const DEFAULT_PROVIDER_SEEDS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', DEFAULT_PROVIDER_FALLBACK]; +const DEFAULT_PROVIDER_SEEDS = ['openrouter', 'mistral', 'google', 'groq', 'nvidia', 'chutes', DEFAULT_PROVIDER_FALLBACK]; const PROVIDER_PERSIST_DEBOUNCE_MS = 200; const TOKEN_ESTIMATION_BUFFER = 400; const BOOST_PACK_SIZE = 500_000; @@ -13957,6 +13959,7 @@ async function handleAdminEnvConfig(req, res) { const openrouterKey = process.env.OPENROUTER_API_KEY || process.env.OPENROUTER_API_TOKEN || ''; const payload = { + const chutesKey = process.env.CHUTES_API_KEY || process.env.CHUTES_API_TOKEN || ''; GROQ: { configured: !!groqKey, prefix: groqKey ? `${groqKey.substring(0, 8)}...` : null, @@ -13971,7 +13974,12 @@ async function handleAdminEnvConfig(req, res) { configured: !!openrouterKey, prefix: openrouterKey ? `${openrouterKey.substring(0, 8)}...` : null, source: openrouterKey ? (process.env.OPENROUTER_API_KEY ? 'OPENROUTER_API_KEY' : 'OPENROUTER_API_TOKEN') : null, - } + }, + CHUTES: { + configured: !!chutesKey, + prefix: chutesKey ? `${chutesKey.substring(0, 8)}...` : null, + source: chutesKey ? (process.env.CHUTES_API_KEY ? 'CHUTES_API_KEY' : 'CHUTES_API_TOKEN') : null, + }, }; sendJson(res, 200, { ok: true, env: payload });