Migrando analise de garatujas para chamada direta do Google Gemini

This commit is contained in:
2026-06-05 13:05:00 +00:00
parent 0d240ce805
commit 4996145995
+31 -22
View File
@@ -859,21 +859,13 @@ app.post('/api/garatujas/analyze', requireAuth, multerUpload.single('image'), as
const base64Image = file.buffer.toString('base64'); const base64Image = file.buffer.toString('base64');
const mimeType = file.mimetype || 'image/png'; const mimeType = file.mimetype || 'image/png';
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', { let analise = '';
method: 'POST',
headers: { if (process.env.GOOGLE_AI_API_KEY) {
'Authorization': `Bearer ${process.env.OPENROUTER_API_KEY}`, console.log('[Garatujas] Usando API direta do Google Gemini para análise de imagem...');
'Content-Type': 'application/json' 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}`;
},
body: JSON.stringify({ const promptText = `Você é um psicopedagogo e especialista em desenvolvimento infantil no Brasil.
model: 'google/gemini-2.5-flash',
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: `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). 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): Identifique e descreva com base na literatura científica (como Piaget, Luquet, Lowenfeld):
@@ -889,27 +881,44 @@ Retorne a resposta estruturada em Markdown, usando títulos claros:
[Seu diagnóstico aqui] [Seu diagnóstico aqui]
# Sugestões de Atividades para Estimular ${alunoName} # Sugestões de Atividades para Estimular ${alunoName}
[Suas propostas aqui]` [Suas propostas aqui]`;
const response = await fetch(geminiUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}, },
body: JSON.stringify({
contents: [
{ {
type: 'image_url', parts: [
image_url: { { text: promptText },
url: `data:${mimeType};base64,${base64Image}` {
inlineData: {
mimeType: mimeType,
data: base64Image
} }
} }
] ]
} }
] ],
generationConfig: {
temperature: 0.4,
maxOutputTokens: 2048
}
}) })
}); });
if (!response.ok) { if (!response.ok) {
const errText = await response.text(); const errText = await response.text();
throw new Error(`Erro na API de visão: ${errText}`); throw new Error(`Erro na API oficial do Gemini: ${errText}`);
} }
const resData = await response.json(); const resData = await response.json();
const analise = resData.choices?.[0]?.message?.content || ''; analise = resData.candidates?.[0]?.content?.parts?.[0]?.text || '';
} else {
throw new Error('Chave GOOGLE_AI_API_KEY não configurada no servidor.');
}
const usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000'; const usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000';
const dbRes = await dbPool.query( const dbRes = await dbPool.query(