Skip to main content
Glama
api.ts3.78 kB
import axios from 'axios'; import { env } from '$env/dynamic/public'; // Usar sempre a URL completa para evitar problemas com proxy const API_URL = 'http://127.0.0.1:8000'; console.log('API URL configurada para:', API_URL); // Configurar o axios const api = axios.create({ baseURL: API_URL, headers: { 'Content-Type': 'application/json', }, // Aumentar o timeout para evitar falhas rápidas timeout: 10000 }); export interface Contrato { arquivo: string; texto: string; score?: number; } export interface SearchResponse { resultados: Contrato[]; total: number; } export interface LLMResponse { answer: string; sources: Array<{ filename?: string; text?: string; [key: string]: any; }>; } export const contratoService = { // Listar todos os contratos com paginação listarContratos: async (skip = 0, limit = 10): Promise<SearchResponse> => { try { console.log(`Chamando API: /contratos?skip=${skip}&limit=${limit}`); const response = await api.get(`/contratos?skip=${skip}&limit=${limit}`); console.log('Resposta da API:', response.data); return response.data; } catch (error) { console.error('Erro na chamada da API:', error); throw error; } }, // Buscar contratos por consulta semântica buscarContratos: async (query: string, limit = 5): Promise<SearchResponse> => { try { console.log(`Chamando API: /contratos/busca?q=${encodeURIComponent(query)}&limit=${limit}`); const response = await api.get(`/contratos/busca?q=${encodeURIComponent(query)}&limit=${limit}`); console.log('Resposta da API:', response.data); return response.data; } catch (error) { console.error('Erro na chamada da API:', error); throw error; } }, // Listar todos os arquivos únicos listarArquivos: async (): Promise<string[]> => { const response = await api.get('/contratos/arquivos'); return response.data.arquivos; }, // Perguntar ao LLM usando a API MCP askQuestion: async (question: string, maxResults = 3): Promise<LLMResponse> => { try { console.log(`Chamando API MCP: /mcp/ask com pergunta: "${question}"`); // Tratamento especial para garantir que a pergunta seja válida if (!question || question.trim() === '') { throw new Error('A pergunta não pode estar vazia'); } // Limitar o tamanho da pergunta para evitar problemas const trimmedQuestion = question.trim().substring(0, 1000); // Usar a API MCP com a estrutura correta const response = await api.post('/mcp/ask', { pergunta: trimmedQuestion, // Mudança: 'question' -> 'pergunta' max_results: maxResults }, { timeout: 30000 // 30 segundos para dar tempo ao LLM processar }); console.log('Resposta da API MCP recebida com sucesso'); return response.data; } catch (error: any) { // Tratamento de erro mais informativo if (error.response) { // O servidor respondeu com um status de erro console.error(`Erro ${error.response.status} na chamada da API MCP:`, error.response.data); throw new Error(error.response.data.detail || 'Erro ao processar a pergunta'); } else if (error.request) { // A requisição foi feita mas não houve resposta console.error('Timeout ou erro de rede na chamada da API MCP'); throw new Error('Não foi possível obter resposta do servidor. Verifique sua conexão.'); } else { // Erro na configuração da requisição console.error('Erro na configuração da chamada da API MCP:', error.message); throw new Error('Erro ao preparar a consulta: ' + error.message); } } } }; export default api;

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MatheusgVentura/Project-One'

If you have feedback or need assistance with the MCP directory API, please join our Discord server