56 lines
1.9 KiB
Plaintext
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;
|
|
}
|
|
}
|
|
}
|