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 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; } } }