summaryrefslogtreecommitdiff
path: root/src/Agent.App/Configuration/OllamaSettingsFactory.cs
blob: cd71139b1b7f969bd1468eba8b4a4f2700bee376 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Text.Json;
using Agent.Core.Ollama;

namespace Agent.App.Configuration;

public static class OllamaSettingsFactory
{
    public static OllamaSettings Create(OllamaConfiguration configuration)
    {
        var options = configuration.ExtraOptions.ToDictionary(
            static pair => pair.Key,
            static pair => JsonSerializer.SerializeToElement(pair.Value, pair.Value?.GetType() ?? typeof(object)),
            StringComparer.Ordinal);
        Set(options, "num_ctx", configuration.Options.NumCtx);
        Set(options, "num_keep", configuration.Options.NumKeep);
        Set(options, "num_predict", configuration.Options.NumPredict);
        Set(options, "temperature", configuration.Options.Temperature);
        Set(options, "seed", configuration.Options.Seed);
        Set(options, "top_k", configuration.Options.TopK);
        Set(options, "top_p", configuration.Options.TopP);
        Set(options, "min_p", configuration.Options.MinP);
        Set(options, "typical_p", configuration.Options.TypicalP);
        Set(options, "tfs_z", configuration.Options.TfsZ);
        Set(options, "repeat_last_n", configuration.Options.RepeatLastN);
        Set(options, "repeat_penalty", configuration.Options.RepeatPenalty);
        Set(options, "presence_penalty", configuration.Options.PresencePenalty);
        Set(options, "frequency_penalty", configuration.Options.FrequencyPenalty);
        Set(options, "mirostat", configuration.Options.Mirostat);
        Set(options, "mirostat_tau", configuration.Options.MirostatTau);
        Set(options, "mirostat_eta", configuration.Options.MirostatEta);
        if (configuration.Options.Stop.Count > 0) options["stop"] = JsonSerializer.SerializeToElement(configuration.Options.Stop);
        return new OllamaSettings(new Uri(configuration.Endpoint, UriKind.Absolute), configuration.Model, configuration.Think, configuration.KeepAlive, options);
    }

    private static void Set<T>(Dictionary<string, JsonElement> options, string key, T? value) where T : struct
    {
        if (value is not null) options[key] = JsonSerializer.SerializeToElement(value.Value);
    }
}