diff --git a/manager/server.selfhosted.js b/manager/server.selfhosted.js index 2b2432a..45a21f1 100644 --- a/manager/server.selfhosted.js +++ b/manager/server.selfhosted.js @@ -1416,7 +1416,7 @@ Exemplo de formato esperado: } else { // Provedor padrão: Google Gemini - const geminiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${modelName}:generateContent?key=${apiKey}`; + let geminiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${modelName}:generateContent?key=${apiKey}`; const payload = { contents: [ { @@ -1457,7 +1457,7 @@ Apenas retorne o JSON estruturado contendo a lista de questões no seguinte form } }; - const response = await fetch(geminiUrl, { + let response = await fetch(geminiUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' @@ -1465,6 +1465,45 @@ Apenas retorne o JSON estruturado contendo a lista de questões no seguinte form body: JSON.stringify(payload) }); + // Se der 404, tentar API v1 estável + if (!response.ok && response.status === 404) { + console.warn(`[Gemini] v1beta retornou 404 para o modelo ${modelName}. Tentando endpoint /v1/...`); + geminiUrl = `https://generativelanguage.googleapis.com/v1/models/${modelName}:generateContent?key=${apiKey}`; + response = await fetch(geminiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }); + } + + // Se ainda assim der 404 e o modelo for diferente de gemini-1.5-flash, tentar com gemini-1.5-flash de fallback universal + if (!response.ok && response.status === 404 && modelName !== 'gemini-1.5-flash') { + console.warn(`[Gemini] Modelo ${modelName} não encontrado no AI Studio. Tentando com fallback universal gemini-1.5-flash no endpoint v1...`); + geminiUrl = `https://generativelanguage.googleapis.com/v1/models/gemini-1.5-flash:generateContent?key=${apiKey}`; + response = await fetch(geminiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }); + + if (!response.ok && response.status === 404) { + // Última tentativa: gemini-1.5-flash no endpoint v1beta + console.warn(`[Gemini] Tentando gemini-1.5-flash no endpoint v1beta...`); + geminiUrl = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=${apiKey}`; + response = await fetch(geminiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(payload) + }); + } + } + if (!response.ok) { const errorText = await response.text(); throw new Error(`Gemini API retornou erro: ${response.status} - ${errorText}`);