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
+41 -32
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,28 +881,45 @@ 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, {
type: 'image_url', method: 'POST',
image_url: { headers: {
url: `data:${mimeType};base64,${base64Image}` '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) { 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();
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 usuarioId = req.user?.id || '00000000-0000-0000-0000-000000000000';
const dbRes = await dbPool.query( const dbRes = await dbPool.query(
`INSERT INTO escola.garatujas (usuario_id, aluno_name, image_url, analise) `INSERT INTO escola.garatujas (usuario_id, aluno_name, image_url, analise)