/** * Configuração de modelos de IA disponíveis * Mapeia os nomes de exibição para os IDs usados pela API */ export interface ModelConfig { name: string; // Nome exibido na interface id: string; // ID enviado para a API description?: string; // Descrição opcional do modelo } /** * Interface para modelo retornado pela API do banco de dados */ export interface ModelIA { id: number; provider_id: number; name: string; model_identifier: string; cost_input_per_million: string; cost_output_per_million: string; is_active: number; created_at: string; updated_at: string; } /** * Lista de modelos disponíveis * NOTA: Estes dados correspondem à tabela de modelos do banco de dados. * Futuramente será integrado com API para buscar dinamicamente. */ export const AVAILABLE_MODELS: ModelConfig[] = [ { name: 'GPT-4.1', id: '1', description: 'Modelo GPT-4.1', }, { name: 'GPT-4o', id: '2', description: 'Modelo GPT-4o', }, { name: 'GPT-5 Mini', id: '3', description: 'Modelo GPT-5 Mini', }, { name: 'Gemini 2.0 Flash', id: '4', description: 'Google Gemini 2.0 Flash', }, { name: 'Claude Sonnet 4.5', id: '5', description: 'Anthropic Claude Sonnet 4.5', }, { name: 'DeepSeek V3.2 Chat', id: '6', description: 'DeepSeek V3.2 Chat', }, { name: 'DeepSeek V3.2 Reasoner', id: '7', description: 'DeepSeek V3.2 Reasoner', }, { name: 'Gemini 2.5 Flash', id: '8', description: 'Google Gemini 2.5 Flash', }, { name: 'Gemini 2.5 Flash-Lite', id: '9', description: 'Google Gemini 2.5 Flash-Lite', }, { name: 'Claude Haiku 4.5', id: '10', description: 'Anthropic Claude Haiku 4.5', }, { name: 'GPT-4o Mini', id: '11', description: 'Modelo GPT-4o Mini', }, ]; /** * Mapeia o nome do modelo para o ID da API * * @param modelName - Nome do modelo exibido na interface * @returns ID do modelo para a API, ou o próprio nome se não encontrado */ export function getModelId(modelName: string): string { const model = AVAILABLE_MODELS.find(m => m.name === modelName); return model?.id || modelName; } /** * Mapeia o ID da API para o nome de exibição * * @param modelId - ID do modelo na API * @returns Nome do modelo para exibir, ou o próprio ID se não encontrado */ export function getModelName(modelId: string): string { const model = AVAILABLE_MODELS.find(m => m.id === modelId); return model?.name || modelId; } /** * Obtém a configuração completa de um modelo pelo nome * * @param modelName - Nome do modelo * @returns Configuração do modelo ou undefined */ export function getModelConfig(modelName: string): ModelConfig | undefined { return AVAILABLE_MODELS.find(m => m.name === modelName); } /** * Retorna apenas os nomes dos modelos para uso em dropdowns */ export function getModelNames(): string[] { return AVAILABLE_MODELS.map(m => m.name); } /** * Busca modelos de IA disponíveis no banco de dados * * @returns Promise com array de modelos ativos */ export async function fetchModelsFromDatabase(): Promise { try { // Importa dinamicamente para evitar circular dependency const { apiService } = await import('@/services/api'); const response = await apiService.get('/webhook/codex/get_models_ia'); console.log('Modelos carregados da API:', response.data); // Filtra apenas modelos ativos e converte para ModelConfig return response.data .filter(model => model.is_active === 1) .map((model: ModelIA) => ({ name: model.name, id: model.id.toString(), description: `${model.model_identifier}`, })); } catch (error) { console.error('Erro ao buscar modelos da API:', error); // Fallback para modelos hardcoded em caso de erro console.warn('Usando modelos hardcoded como fallback'); return AVAILABLE_MODELS; } }