Class Static
public static class ServiceCollectionExtensions

Namespace: Moka.Blazor.AI.Extensions

Extension methods for registering Moka.Blazor.AI services.

Methods

NameDescription
AddMokaAi(IServiceCollection services) static Registers the AI chat services with default settings (LM Studio at localhost:1234).
AddMokaAi(IServiceCollection services, AiChatOptions> configure) static Registers the AI chat services with custom configuration.
AddMokaAi(…) static Registers the AI chat services with a custom IChatClient.

AddMokaAi(IServiceCollection services)

IServiceCollection ServiceCollectionExtensions.AddMokaAi(IServiceCollection services)

Registers the AI chat services with default settings (LM Studio at localhost:1234).

AddMokaAi(IServiceCollection services, AiChatOptions> configure)

IServiceCollection ServiceCollectionExtensions.AddMokaAi(IServiceCollection services, Action<AiChatOptions> configure)

Registers the AI chat services with custom configuration.

AddMokaAi(IServiceCollection services, IChatClient chatClient, AiChatOptions>? configure)

IServiceCollection ServiceCollectionExtensions.AddMokaAi(IServiceCollection services, IChatClient chatClient, Action<AiChatOptions>? configure = null)

Registers the AI chat services with a custom IChatClient.

View Source
/// <summary>
///     Extension methods for registering Moka.Blazor.AI services.
/// </summary>
public static class ServiceCollectionExtensions
{
    /// <summary>
    ///     Registers the AI chat services with default settings (LM Studio at localhost:1234).
    /// </summary>
    public static IServiceCollection AddMokaAi(this IServiceCollection services) => services.AddMokaAi(_ =>
    {
    });
    /// <summary>
    ///     Registers the AI chat services with custom configuration.
    /// </summary>
    public static IServiceCollection AddMokaAi(this IServiceCollection services, Action<AiChatOptions> configure)
    {
        services.Configure(configure);
        var options = new AiChatOptions();
        configure(options);
        TryAddChatClient(services, options);
        services.TryAddScoped<AiChatService>();
        return services;
    }

    /// <summary>
    ///     Registers the AI chat services with a custom <see cref = "IChatClient"/>.
    /// </summary>
    public static IServiceCollection AddMokaAi(this IServiceCollection services, IChatClient chatClient, Action<AiChatOptions>? configure = null)
    {
        services.Configure(configure ?? (_ =>
        {
        }));
        services.TryAddSingleton(chatClient);
        services.TryAddScoped<AiChatService>();
        return services;
    }

    private static void TryAddChatClient(IServiceCollection services, AiChatOptions options)
    {
        // Don't register if consumer already provided one
        if (services.Any(d => d.ServiceType == typeof(IChatClient)))
        {
            return;
        }

        switch (options.Provider)
        {
            case AiProvider.Ollama:
                services.TryAddSingleton<IChatClient>(_ => new OllamaApiClient(new Uri(options.ResolvedEndpoint), options.DefaultModel ?? "llama3.2"));
                break;
            default: // OpenAI-compatible (LM Studio, vLLM, etc.)
                services.TryAddSingleton<IChatClient>(_ => new OpenAIClient(new ApiKeyCredential("lm-studio"), new OpenAIClientOptions { Endpoint = new Uri(options.ResolvedEndpoint) }).GetChatClient(options.DefaultModel ?? "local-model").AsIChatClient());
                break;
        }
    }
}
Was this page helpful?