< Summary

Information
Class: OpenAiIntegration.PredictionPromptComposer
Assembly: OpenAiIntegration
File(s): /home/runner/work/KicktippAi/KicktippAi/src/OpenAiIntegration/PredictionPromptComposer.cs
Line coverage
100%
Covered lines: 29
Uncovered lines: 0
Coverable lines: 29
Total lines: 58
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
BuildSystemPrompt(...)100%44100%
CreateMatchJson(...)100%11100%
CreateBonusQuestionJson(...)100%22100%

File(s)

/home/runner/work/KicktippAi/KicktippAi/src/OpenAiIntegration/PredictionPromptComposer.cs

#LineLine coverage
 1using System.Text.Json;
 2using EHonda.KicktippAi.Core;
 3
 4namespace OpenAiIntegration;
 5
 6/// <summary>
 7/// Shared helpers for building prompt inputs used by prediction and reconstruction flows.
 8/// </summary>
 9public static class PredictionPromptComposer
 10{
 11    public static string BuildSystemPrompt(string template, IEnumerable<DocumentContext> contextDocuments)
 12    {
 113        var contextList = contextDocuments.ToList();
 114        if (!contextList.Any())
 15        {
 116            return template;
 17        }
 18
 119        var contextSection = "\n";
 120        foreach (var doc in contextList)
 21        {
 122            contextSection += "---\n";
 123            contextSection += $"{doc.Name}\n\n";
 124            contextSection += $"{doc.Content}\n";
 25        }
 26
 127        contextSection += "---";
 128        return template + contextSection;
 29    }
 30
 31    public static string CreateMatchJson(Match match)
 32    {
 133        return JsonSerializer.Serialize(new
 134        {
 135            homeTeam = match.HomeTeam,
 136            awayTeam = match.AwayTeam,
 137            startsAt = match.StartsAt.ToString()
 138        }, new JsonSerializerOptions
 139        {
 140            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
 141        });
 42    }
 43
 44    public static string CreateBonusQuestionJson(BonusQuestion question)
 45    {
 146        var questionData = new
 147        {
 148            text = question.Text,
 149            options = question.Options.Select(o => new { id = o.Id, text = o.Text }).ToArray(),
 150            maxSelections = question.MaxSelections
 151        };
 52
 153        return JsonSerializer.Serialize(questionData, new JsonSerializerOptions
 154        {
 155            Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
 156        });
 57    }
 58}