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