Skip to main content
Glama
rag-service.ts5.36 kB
import { SQLiteClient, SearchResult, DocumentRecord, ChunkRecord } from './sqlite-client.js'; import { ConnectionPool, getConnectionPool } from '../db/connection-pool.js'; export interface Document { uri: string; title: string; content: string; } export class RAGService { private readonly connectionPool: ConnectionPool; constructor(connectionPool?: ConnectionPool) { this.connectionPool = connectionPool ?? getConnectionPool(); } async search(query: string, limit: number = 5): Promise<SearchResult[]> { try { console.log(`🔍 Поиск: "${query}" (лимит: ${limit})`); // Получаем SQLiteClient из пула соединений const sqliteClient = await this.connectionPool.getSQLiteClient(); // Выполняем поиск через SQLite const results = await sqliteClient.search(query, { limit }); if (results.isErr()) { throw new Error(`Ошибка поиска: ${results.error.message}`); } console.log(`✅ Найдено результатов: ${results.value.length}`); return results.value; } catch (error) { console.error('Ошибка поиска:', error); throw new Error(`Ошибка поиска: ${error}`); } } async addDocument(uri: string, content: string, title: string): Promise<void> { try { console.log(`📄 Добавление документа: ${title} (${uri})`); // Получаем SQLiteClient из пула соединений const sqliteClient = await this.connectionPool.getSQLiteClient(); // Проверяем, существует ли уже документ const existingDocResult = await sqliteClient.getDocument(uri); if (existingDocResult.isErr()) { throw new Error(`Ошибка проверки документа: ${existingDocResult.error.message}`); } const existingDoc = existingDocResult.value; if (existingDoc) { // Обновляем существующий документ const updateResult = await sqliteClient.updateDocument(uri, title, content); if (updateResult.isErr()) { throw new Error(`Ошибка обновления документа: ${updateResult.error.message}`); } console.log(`✅ Документ "${title}" обновлен в корпусе`); } else { // Добавляем новый документ const addResult = await sqliteClient.addDocument(uri, title, content); if (addResult.isErr()) { throw new Error(`Ошибка добавления документа: ${addResult.error.message}`); } const docId = addResult.value; console.log(`✅ Документ "${title}" добавлен в корпус (ID: ${docId})`); } } catch (error) { console.error('Ошибка добавления документа:', error); throw new Error(`Ошибка добавления документа: ${error}`); } } async getDocument(uri: string): Promise<Document | null> { try { console.log(`📖 Получение документа: ${uri}`); // Получаем SQLiteClient из пула соединений const sqliteClient = await this.connectionPool.getSQLiteClient(); const docResult = await sqliteClient.getDocument(uri); if (docResult.isErr()) { throw new Error(`Ошибка получения документа: ${docResult.error.message}`); } const doc = docResult.value; if (!doc) return null; // Получаем чанки документа const chunksResult = await sqliteClient.getDocumentChunks(doc.id); if (chunksResult.isErr()) { throw new Error(`Ошибка получения чанков: ${chunksResult.error.message}`); } const chunks = chunksResult.value; const content = chunks.map((chunk: any) => chunk.text).join('\n\n'); return { uri: doc.uri, title: doc.title, content }; } catch (error) { console.error('Ошибка получения документа:', error); throw new Error(`Ошибка получения документа: ${error}`); } } async listDocuments(): Promise<Document[]> { try { console.log('📚 Получение списка документов'); // Получаем SQLiteClient из пула соединений const sqliteClient = await this.connectionPool.getSQLiteClient(); const docsResult = await sqliteClient.getDocuments(); if (docsResult.isErr()) { throw new Error(`Ошибка получения документов: ${docsResult.error.message}`); } const docs = docsResult.value; return docs.map((doc: any) => ({ uri: doc.uri, title: doc.title, content: '' // Не загружаем содержимое для списка })); } catch (error) { console.error('Ошибка получения списка документов:', error); throw new Error(`Ошибка получения списка документов: ${error}`); } } }

Latest Blog Posts

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/Galiusbro/MCP'

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