From 7c7f6e7ae6b8d84251f4f48ec81f9b1210b15389 Mon Sep 17 00:00:00 2001 From: renato97 Date: Mon, 1 Dec 2025 03:33:49 +0000 Subject: [PATCH] fix: use x-api-key header for minimax --- data/lib/alsGenerator.js | 113 ++++++++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 43 deletions(-) diff --git a/data/lib/alsGenerator.js b/data/lib/alsGenerator.js index 1b7fb76..7495ef8 100644 --- a/data/lib/alsGenerator.js +++ b/data/lib/alsGenerator.js @@ -116,59 +116,86 @@ function extractJson(text) { return null; } -function anthConfig() { - const base = - (process.env.ANTHROPIC_BASE_URL || '').trim() || - (process.env.ANTHROPIC_FALLBACK_BASE_URL || '').trim(); - const token = +function anthConfigs() { + const configs = []; + const primaryBase = (process.env.ANTHROPIC_BASE_URL || '').trim(); + const primaryToken = (process.env.ANTHROPIC_AUTH_TOKEN || '').trim() || - (process.env.ANTHROPIC_FALLBACK_TOKEN || '').trim(); - if (!base || !token) { - return null; + (process.env.ANTHROPIC_API_KEY || '').trim(); + if (primaryBase && primaryToken) { + configs.push({ + endpoint: `${primaryBase.replace(/\/$/, '')}/v1/messages`, + token: primaryToken, + model: process.env.ANTHROPIC_MODEL || 'claude-3-5-sonnet-20241022' + }); } - return { - endpoint: `${base.replace(/\/$/, '')}/v1/messages`, - token - }; + const fallbackBase = (process.env.ANTHROPIC_FALLBACK_BASE_URL || '').trim(); + const fallbackToken = (process.env.ANTHROPIC_FALLBACK_TOKEN || '').trim(); + if (fallbackBase && fallbackToken) { + const sameAsPrimary = + fallbackBase === primaryBase && fallbackToken === primaryToken; + if (!sameAsPrimary) { + configs.push({ + endpoint: `${fallbackBase.replace(/\/$/, '')}/v1/messages`, + token: fallbackToken, + model: + process.env.ANTHROPIC_FALLBACK_MODEL || + process.env.ANTHROPIC_MODEL || + 'claude-3-5-sonnet-20241022' + }); + } + } + return configs; } async function callAnthropic(systemText, userText, maxTokens = 800) { - const cfg = anthConfig(); - if (!cfg) { + const configs = anthConfigs(); + if (!configs.length) { return null; } - const payload = { - model: process.env.ANTHROPIC_MODEL || 'claude-3-5-sonnet-20241022', - max_tokens: maxTokens, - temperature: 0.3, - system: systemText, - messages: [ - { - role: 'user', - content: [{ type: 'text', text: userText }] + let lastError = null; + for (const cfg of configs) { + const payload = { + model: cfg.model || process.env.ANTHROPIC_MODEL || 'claude-3-5-sonnet-20241022', + max_tokens: maxTokens, + temperature: 0.3, + system: systemText, + messages: [ + { + role: 'user', + content: [{ type: 'text', text: userText }] + } + ] + }; + try { + const res = await fetch(cfg.endpoint, { + method: 'POST', + headers: { + 'content-type': 'application/json', + 'x-api-key': cfg.token, + 'anthropic-version': '2023-06-01' + }, + body: JSON.stringify(payload), + timeout: Number(process.env.API_TIMEOUT_MS) || 60000 + }); + if (!res.ok) { + throw new Error(await res.text()); } - ] - }; - try { - const res = await fetch(cfg.endpoint, { - method: 'POST', - headers: { - 'content-type': 'application/json', - 'x-api-key': cfg.token, - 'anthropic-version': '2023-06-01' - }, - body: JSON.stringify(payload), - timeout: Number(process.env.API_TIMEOUT_MS) || 60000 - }); - if (!res.ok) { - throw new Error(await res.text()); + const data = await res.json(); + return data?.content?.[0]?.text || ''; + } catch (err) { + lastError = err; + console.warn( + `[alsGenerator] Anthropic error (${cfg.endpoint}):`, + err.message + ); + continue; } - const data = await res.json(); - return data?.content?.[0]?.text || ''; - } catch (err) { - console.warn('[alsGenerator] Anthropic error:', err.message); - return null; } + if (lastError) { + console.warn('[alsGenerator] All Anthropic endpoints failed.'); + } + return null; } async function planWithAI(prompt, library, sources) {