diff --git a/server.js b/server.js index e3768ce..2be1539 100644 --- a/server.js +++ b/server.js @@ -859,21 +859,13 @@ app.post('/api/garatujas/analyze', requireAuth, multerUpload.single('image'), as const base64Image = file.buffer.toString('base64'); const mimeType = file.mimetype || 'image/png'; - const response = await fetch('https://openrouter.ai/api/v1/chat/completions', { - method: 'POST', - headers: { - 'Authorization': `Bearer ${process.env.OPENROUTER_API_KEY}`, - 'Content-Type': 'application/json' - }, - body: JSON.stringify({ - model: 'google/gemini-2.5-flash', - messages: [ - { - role: 'user', - content: [ - { - type: 'text', - text: `Você é um psicopedagogo e especialista em desenvolvimento infantil no Brasil. + let analise = ''; + + if (process.env.GOOGLE_AI_API_KEY) { + console.log('[Garatujas] Usando API direta do Google Gemini para análise de imagem...'); + const geminiUrl = `https://generativelanguage.googleapis.com/v1beta/models/${process.env.GOOGLE_AI_MODEL || 'gemini-2.5-flash'}:generateContent?key=${process.env.GOOGLE_AI_API_KEY}`; + + const promptText = `Você é um psicopedagogo e especialista em desenvolvimento infantil no Brasil. Analise a imagem deste desenho/rabisco feito pelo aluno(a) "${alunoName}" (até 6 anos de idade). Identifique e descreva com base na literatura científica (como Piaget, Luquet, Lowenfeld): @@ -889,28 +881,45 @@ Retorne a resposta estruturada em Markdown, usando títulos claros: [Seu diagnóstico aqui] # Sugestões de Atividades para Estimular ${alunoName} -[Suas propostas aqui]` - }, - { - type: 'image_url', - image_url: { - url: `data:${mimeType};base64,${base64Image}` +[Suas propostas aqui]`; + + const response = await fetch(geminiUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + contents: [ + { + parts: [ + { text: promptText }, + { + inlineData: { + mimeType: mimeType, + data: base64Image + } } - } - ] + ] + } + ], + generationConfig: { + temperature: 0.4, + maxOutputTokens: 2048 } - ] - }) - }); - - if (!response.ok) { - const errText = await response.text(); - throw new Error(`Erro na API de visão: ${errText}`); + }) + }); + + if (!response.ok) { + const errText = await response.text(); + throw new Error(`Erro na API oficial do Gemini: ${errText}`); + } + + const resData = await response.json(); + analise = resData.candidates?.[0]?.content?.parts?.[0]?.text || ''; + } else { + throw new Error('Chave GOOGLE_AI_API_KEY não configurada no servidor.'); } - const resData = await response.json(); - const analise = resData.choices?.[0]?.message?.content || ''; - const usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000'; const dbRes = await dbPool.query( `INSERT INTO escola.garatujas (usuario_id, aluno_name, image_url, analise)