Files
Luna/Luna.Providers/Extensions/ServiceCollectionExtensions.cs
T
2026-04-04 05:01:51 +02:00

66 lines
2.4 KiB
C#

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();
}
/// <summary>
/// Registers the <see cref="MistralProvider"/> and maps <see cref="IProvider"/> to it as a singleton.
/// </summary>
/// <returns>The updated service collection.</returns>
private IServiceCollection AddMistralProvider()
{
ArgumentNullException.ThrowIfNull(services);
services.AddProviderOptions(MistralProvider.Name);
services.AddHttpClient(
MistralProvider.Name,
(provider, httpClient) =>
{
var options = provider.GetProviderOptions<MistralProvider>(MistralProvider.Name);
httpClient.BaseAddress = new Uri(options.ApiUrl);
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {options.ApiKey}");
});
services.AddKeyedSingleton<IProvider, MistralProvider>(MistralProvider.Name);
return services;
}
/// <summary>
/// Registers the <see cref="OllamaProvider"/> and maps <see cref="IProvider"/> to it as a singleton.
/// </summary>
/// <returns></returns>
private IServiceCollection AddOllamaProvider()
{
ArgumentNullException.ThrowIfNull(services);
services.AddProviderOptions(OllamaProvider.Name);
services.AddHttpClient(
OllamaProvider.Name,
(provider, httpClient) =>
{
var options = provider.GetProviderOptions<OllamaProvider>(OllamaProvider.Name);
httpClient.BaseAddress = new Uri(options.ApiUrl);
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {options.ApiKey}");
});
services.AddKeyedSingleton<IProvider, OllamaProvider>(OllamaProvider.Name);
return services;
}
}
}