ChatRAG/Services/SearchVectors/anv10eil.vdi~
2025-06-21 14:20:07 -03:00

56 lines
1.9 KiB
Plaintext

using ChatApi.Data;
using ChatRAG.Contracts.VectorSearch;
using ChatRAG.Services.Contracts;
using ChatRAG.Services.ResponseService;
using ChatRAG.Services.TextServices;
using ChatRAG.Settings.ChatRAG.Configuration;
using Microsoft.Extensions.Options;
namespace ChatRAG.Services.SearchVectors
{
public class VectorDatabaseFactory : IVectorDatabaseFactory
{
private readonly IServiceProvider _serviceProvider;
private readonly VectorDatabaseSettings _settings;
private readonly ILogger<VectorDatabaseFactory> _logger;
public VectorDatabaseFactory(
IServiceProvider serviceProvider,
IOptions<VectorDatabaseSettings> settings,
ILogger<VectorDatabaseFactory> logger)
{
_serviceProvider = serviceProvider;
_settings = settings.Value;
_logger = logger;
}
public string GetActiveProvider()
{
return _settings.Provider;
}
public IVectorSearchService CreateVectorSearchService()
{
_logger.LogInformation("Criando VectorSearchService para provider: {Provider}", _settings.Provider);
return _settings.Provider.ToLower() switch
{
"qdrant" => GetService<QdrantVectorSearchService>(),
"mongodb" => GetService<MongoVectorSearchService>(),
"chroma" => GetService<ChromaVectorSearchService>(),
_ => throw new ArgumentException($"Provider de VectorSearch não suportado: {_settings.Provider}")
};
}
private T GetService<T>() where T : class
{
var service = _serviceProvider.GetService<T>();
if (service == null)
{
throw new InvalidOperationException($"Serviço {typeof(T).Name} não está registrado no DI container");
}
return service;
}
}
}