using Luna.Configuration.Extensions;
using Luna.Providers.Abstractions;
using Luna.Providers.Mistral;
using Luna.Providers.Ollama;
using Microsoft.Extensions.DependencyInjection;
namespace Luna.Providers.Extensions;
public static class ServiceCollectionExtensions
{
extension(IServiceCollection services)
{
public IServiceCollection AddProviders()
{
return services
.AddMistralProvider()
.AddOllamaProvider();
}
///
/// Registers the and maps to it as a singleton.
///
/// The service collection.
/// The updated service collection.
private IServiceCollection AddMistralProvider()
{
ArgumentNullException.ThrowIfNull(services);
services.AddProviderOptions(MistralProvider.Name);
services.AddHttpClient(
MistralProvider.Name,
(provider, httpClient) =>
{
var options = provider.GetProviderOptions(MistralProvider.Name);
httpClient.BaseAddress = new Uri(options.ApiUrl);
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {options.ApiKey}");
});
services.AddKeyedSingleton(MistralProvider.Name);
return services;
}
///
/// Registers the and maps to it as a singleton.
///
///
private IServiceCollection AddOllamaProvider()
{
ArgumentNullException.ThrowIfNull(services);
services.AddProviderOptions(OllamaProvider.Name);
services.AddHttpClient(
OllamaProvider.Name,
(provider, httpClient) =>
{
var options = provider.GetProviderOptions(OllamaProvider.Name);
httpClient.BaseAddress = new Uri(options.ApiUrl);
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {options.ApiKey}");
});
services.AddKeyedSingleton(OllamaProvider.Name);
return services;
}
}
}