| File: IntentResolutionRating.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.Quality\Microsoft.Extensions.AI.Evaluation.Quality.csproj (Microsoft.Extensions.AI.Evaluation.Quality) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.Extensions.AI.Evaluation.Quality.JsonSerialization; using Microsoft.Extensions.AI.Evaluation.Quality.Utilities; namespace Microsoft.Extensions.AI.Evaluation.Quality; internal sealed class IntentResolutionRating { public static IntentResolutionRating Inconclusive { get; } = new IntentResolutionRating( resolutionScore: 0, explanation: string.Empty, agentPerceivedIntent: string.Empty, actualUserIntent: string.Empty, conversationHasIntent: false, correctIntentDetected: false, intentResolved: false); [JsonRequired] [JsonPropertyName("resolution_score")] public int ResolutionScore { get; set; } [JsonRequired] [JsonPropertyName("explanation")] public string Explanation { get; set; } [JsonRequired] [JsonPropertyName("agent_perceived_intent")] public string AgentPerceivedIntent { get; set; } [JsonRequired] [JsonPropertyName("actual_user_intent")] public string ActualUserIntent { get; set; } [JsonRequired] [JsonPropertyName("conversation_has_intent")] public bool ConversationHasIntent { get; set; } [JsonRequired] [JsonPropertyName("correct_intent_detected")] public bool CorrectIntentDetected { get; set; } [JsonRequired] [JsonPropertyName("intent_resolved")] public bool IntentResolved { get; set; } private const int MinValue = 1; private const int MaxValue = 5; public bool IsInconclusive => ResolutionScore < MinValue || ResolutionScore > MaxValue; [JsonConstructor] public IntentResolutionRating( int resolutionScore, string explanation, string agentPerceivedIntent, string actualUserIntent, bool conversationHasIntent, bool correctIntentDetected, bool intentResolved) { ResolutionScore = resolutionScore; Explanation = explanation; AgentPerceivedIntent = agentPerceivedIntent; ActualUserIntent = actualUserIntent; ConversationHasIntent = conversationHasIntent; CorrectIntentDetected = correctIntentDetected; IntentResolved = intentResolved; } public static IntentResolutionRating FromJson(string jsonResponse) { ReadOnlySpan<char> trimmed = JsonOutputFixer.TrimMarkdownDelimiters(jsonResponse); return JsonSerializer.Deserialize(trimmed, SerializerContext.Default.IntentResolutionRating)!; } }