diff --git a/lib/ai/providers/huanke-gemini.ts b/lib/ai/providers/huanke-gemini.ts index 49232da44..f6fa917c1 100644 --- a/lib/ai/providers/huanke-gemini.ts +++ b/lib/ai/providers/huanke-gemini.ts @@ -7,6 +7,20 @@ interface HuankeGeminiConfig { baseURL: string; } +function normalizeHuankeBaseURL(baseURL: string): string { + let normalized = (baseURL || "").trim().replace(/\/+$/, ""); + + normalized = normalized.replace(/\/v1beta\/models\/.*$/i, ""); + normalized = normalized.replace(/\/v1beta$/i, ""); + normalized = normalized.replace(/\/v1$/i, ""); + + if (!normalized) { + return "https://api.huandutech.com"; + } + + return normalized; +} + function redactSecrets(text: string, secrets: string[] = []) { let output = text; for (const secret of secrets) { @@ -386,9 +400,10 @@ async function sendHuankeGeminiRequest( imageSize?: string; } ): Promise { + const normalizedBaseURL = normalizeHuankeBaseURL(baseURL); // 构建 Gemini 原生格式的端点 // 例如: https://api.example.com/v1beta/models/gemini-3-pro-image-preview-4k:generateContent - const url = `${baseURL}/v1beta/models/${modelId}:generateContent?key=${apiKey}`; + const url = `${normalizedBaseURL}/v1beta/models/${modelId}:generateContent?key=${apiKey}`; console.log("[Huanke Gemini] Sending request to:", redactSecrets(url, [apiKey])); console.log("[Huanke Gemini] Using model:", modelId);