Migrando analise de garatujas para chamada direta do Google Gemini
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user