< Summary

Information
Class: EHonda.KicktippAi.Core.PredictionModelConfig
Assembly: EHonda.KicktippAi.Core
File(s): /home/runner/work/KicktippAi/KicktippAi/src/Core/PredictionModelConfig.cs
Line coverage
91%
Covered lines: 32
Uncovered lines: 3
Coverable lines: 35
Total lines: 71
Line coverage: 91.4%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
.ctor(...)100%11100%
get_IdentityKey()100%22100%
get_DisplayName()100%22100%
get_AllowsLegacyModelOnlyLookup()100%11100%
Create(...)100%11100%
NormalizeReasoningEffort(...)100%2262.5%
IsValidReasoningEffort(...)100%22100%

File(s)

/home/runner/work/KicktippAi/KicktippAi/src/Core/PredictionModelConfig.cs

#LineLine coverage
 1namespace EHonda.KicktippAi.Core;
 2
 3public sealed record PredictionModelConfig
 4{
 15    private static readonly HashSet<string> AllowedReasoningEfforts = new(StringComparer.Ordinal)
 16    {
 17        "none",
 18        "minimal",
 19        "low",
 110        "medium",
 111        "high",
 112        "xhigh"
 113    };
 14
 115    private PredictionModelConfig(string model, string? reasoningEffort)
 16    {
 117        Model = model;
 118        ReasoningEffort = reasoningEffort;
 119    }
 20
 21    public string Model { get; }
 22
 23    public string? ReasoningEffort { get; }
 24
 125    public string IdentityKey => ReasoningEffort is null
 126        ? Model
 127        : $"{Model}:reasoning-effort:{ReasoningEffort}";
 28
 129    public string DisplayName => ReasoningEffort is null
 130        ? Model
 131        : $"{Model} ({ReasoningEffort})";
 32
 133    public bool AllowsLegacyModelOnlyLookup => ReasoningEffort is null;
 34
 35    public static PredictionModelConfig Create(string model, string? reasoningEffort = null)
 36    {
 137        ArgumentException.ThrowIfNullOrWhiteSpace(model);
 38
 139        return new PredictionModelConfig(
 140            model.Trim(),
 141            NormalizeReasoningEffort(reasoningEffort));
 42    }
 43
 44    public static string? NormalizeReasoningEffort(string? reasoningEffort)
 45    {
 146        if (string.IsNullOrWhiteSpace(reasoningEffort))
 47        {
 148            return null;
 49        }
 50
 151        var normalized = reasoningEffort.Trim().ToLowerInvariant();
 152        if (!AllowedReasoningEfforts.Contains(normalized))
 53        {
 054            throw new ArgumentException(
 055                "--reasoning-effort must be one of: none, minimal, low, medium, high, xhigh",
 056                nameof(reasoningEffort));
 57        }
 58
 159        return normalized;
 60    }
 61
 62    public static bool IsValidReasoningEffort(string? reasoningEffort)
 63    {
 164        if (string.IsNullOrWhiteSpace(reasoningEffort))
 65        {
 166            return true;
 67        }
 68
 169        return AllowedReasoningEfforts.Contains(reasoningEffort.Trim().ToLowerInvariant());
 70    }
 71}