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 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)