66 lines
2.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |