import { GoogleGenerativeAI, GenerativeModel } from '@google/generative-ai'; export interface GeminiMessage { role: 'user' | 'model'; parts: { text: string }[]; } export async function callGeminiAPI( apiKey: string, message: string, conversationHistory: GeminiMessage[] = [] ): Promise { try { // Inicializar o cliente Gemini const genAI = new GoogleGenerativeAI(apiKey); // Obter o modelo gemini-2.0-flash const model: GenerativeModel = genAI.getGenerativeModel({ model: 'gemini-2.0-flash', generationConfig: { temperature: 0.9, topK: 40, topP: 0.95, maxOutputTokens: 2048, }, }); console.log('Calling Gemini API with:', { model: 'gemini-2.0-flash', messageLength: message.length, historyLength: conversationHistory.length, }); let result; // Se houver histórico, usar chat com contexto if (conversationHistory.length > 0) { // Criar sessão de chat com histórico const chat = model.startChat({ history: conversationHistory.map(msg => ({ role: msg.role, parts: msg.parts, })), }); // Enviar mensagem no contexto do chat result = await chat.sendMessage(message); } else { // Sem histórico, fazer chamada simples result = await model.generateContent(message); } // Obter o texto da resposta const response = result.response; const text = response.text(); console.log('Gemini API Response:', { hasText: !!text, textLength: text?.length || 0, }); if (!text || text.trim().length === 0) { throw new Error('Resposta vazia recebida da API.'); } return text; } catch (error: any) { console.error('Error calling Gemini API:', error); // Tratamento de erros específicos da biblioteca if (error.message) { const errorMsg = error.message.toLowerCase(); // Erro de API Key vazada/leaked if (errorMsg.includes('leaked') || errorMsg.includes('reported')) { throw new Error( '🔐 Sua chave de API foi reportada como vazada e foi desativada por segurança. Gere uma nova chave em https://aistudio.google.com/apikey e configure em Configurações.' ); } // Erro de API Key inválida ou expirada if ( errorMsg.includes('api key') || errorMsg.includes('api_key') || errorMsg.includes('invalid') || errorMsg.includes('expired') || errorMsg.includes('403') ) { if (errorMsg.includes('expired')) { throw new Error( '❌ Chave de API expirada. Gere uma nova chave em https://aistudio.google.com/apikey e configure em Configurações.' ); } if (errorMsg.includes('403')) { throw new Error( '🔐 Acesso negado. Sua chave de API pode ter sido desativada. Gere uma nova em https://aistudio.google.com/apikey e configure em Configurações.' ); } throw new Error( '❌ Chave de API inválida ou sem permissão. Verifique sua chave nas Configurações.' ); } // Erro de modelo não encontrado if (errorMsg.includes('not found') || errorMsg.includes('404')) { throw new Error('⚠️ Modelo não encontrado. A API pode estar temporariamente indisponível.'); } // Erro de quota/rate limit if (errorMsg.includes('quota') || errorMsg.includes('limit') || errorMsg.includes('429')) { throw new Error('⏱️ Limite de requisições excedido. Tente novamente em alguns minutos.'); } // Erro de bloqueio por segurança if (errorMsg.includes('safety') || errorMsg.includes('blocked')) { throw new Error( '🛡️ A resposta foi bloqueada por filtros de segurança. Tente uma pergunta diferente.' ); } // Erro de rede if (errorMsg.includes('fetch') || errorMsg.includes('network')) { throw new Error('🌐 Erro de conexão. Verifique sua internet e tente novamente.'); } // Erro genérico com mensagem específica throw new Error(`Erro na API do Gemini: ${error.message}`); } // Erro sem mensagem específica throw new Error('❌ Erro desconhecido ao processar sua mensagem. Tente novamente.'); } } export function buildSystemPrompt(): string { return `Você é o Assistente Xertica, uma IA desenvolvida para ajudar usuários da plataforma Xertica.ai a gerenciar projetos, analisar dados e otimizar processos. Características importantes: - Você é prestativo, profissional e direto - Responda sempre em português brasileiro - Seja conciso mas informativo - Quando não souber algo específico da plataforma, seja honesto - Foque em ajudar o usuário com suas tarefas e dúvidas - Mantenha um tom amigável e acessível A plataforma Xertica.ai oferece: - Gerenciamento de projetos e tarefas - Análise de dados e métricas - Criação de documentos e relatórios - Geração de podcasts a partir de conteúdo - Sistema de pesquisa integrado - Colaboração em equipe Você está aqui para ajudar os usuários a tirar o máximo proveito dessas funcionalidades.`; }