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 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)
|
||||
|
||||
Reference in New Issue
Block a user