using ChatRAG.Models; using Microsoft.Extensions.VectorData; namespace ChatRAG.Contracts.VectorSearch { /// /// Interface unificada para operações de busca vetorial. /// Pode ser implementada por MongoDB, Qdrant, Pinecone, etc. /// public interface IVectorSearchService { // ======================================== // BUSCA VETORIAL // ======================================== /// /// Busca documentos similares usando embedding vetorial /// /// Embedding da query (ex: 1536 dimensões para OpenAI) /// Filtrar por projeto específico (opcional) /// Score mínimo de similaridade (0.0 a 1.0) /// Número máximo de resultados /// Filtros adicionais (metadata, data, etc.) /// Lista de documentos ordenados por similaridade Task> SearchSimilarAsync( double[] queryEmbedding, string? projectId = null, double threshold = 0.3, int limit = 5, Dictionary? filters = null); /// /// Busca adaptativa - relaxa threshold se não encontrar resultados suficientes /// (Implementa a mesma lógica do seu ResponseRAGService atual) /// /// Embedding da query /// ID do projeto /// Threshold inicial (será reduzido se necessário) /// Número máximo de resultados /// Lista de documentos com busca adaptativa Task> SearchSimilarDynamicAsync( double[] queryEmbedding, string projectId, double minThreshold = 0.5, int limit = 5); // ======================================== // CRUD DE DOCUMENTOS // ======================================== /// /// Adiciona um novo documento com embedding /// /// Título do documento /// Conteúdo do documento /// ID do projeto /// Embedding pré-calculado /// Metadados adicionais (tags, data, autor, etc.) /// ID do documento criado Task AddDocumentAsync( string title, string content, string projectId, double[] embedding, Dictionary? metadata = null); /// /// Atualiza um documento existente /// /// ID do documento /// Novo título /// Novo conteúdo /// ID do projeto /// Novo embedding /// Novos metadados Task UpdateDocumentAsync( string id, string title, string content, string projectId, double[] embedding, Dictionary? metadata = null); /// /// Remove um documento /// /// ID do documento Task DeleteDocumentAsync(string id); // ======================================== // CONSULTAS AUXILIARES // ======================================== /// /// Verifica se um documento existe /// /// ID do documento /// True se existe, False caso contrário Task DocumentExistsAsync(string id); /// /// Recupera um documento específico por ID /// /// ID do documento /// Documento ou null se não encontrado Task GetDocumentAsync(string id); /// /// Lista todos os documentos de um projeto /// /// ID do projeto /// Lista de documentos do projeto Task> GetDocumentsByProjectAsync(string projectId); /// /// Conta total de documentos /// /// Filtrar por projeto (opcional) /// Número de documentos Task GetDocumentCountAsync(string? projectId = null); // ======================================== // HEALTH CHECK E MÉTRICAS // ======================================== /// /// Verifica se o serviço está saudável /// /// True se está funcionando, False caso contrário Task IsHealthyAsync(); /// /// Retorna estatísticas e métricas do provider /// /// Dicionário com estatísticas (documentos, performance, etc.) Task> GetStatsAsync(); } }