diff --git a/src/Libraries/Microsoft.Extensions.AI.Evaluation.Quality/ChatConversationEvaluator.cs b/src/Libraries/Microsoft.Extensions.AI.Evaluation.Quality/ChatConversationEvaluator.cs index ea6bee6b18b..1b78258e15c 100644 --- a/src/Libraries/Microsoft.Extensions.AI.Evaluation.Quality/ChatConversationEvaluator.cs +++ b/src/Libraries/Microsoft.Extensions.AI.Evaluation.Quality/ChatConversationEvaluator.cs @@ -108,10 +108,10 @@ await RenderEvaluationPromptAsync( { if (history.Count == 1) { - bool canRender = + (bool canRender, tokenBudget) = await CanRenderAsync( history[0], - ref tokenBudget, + tokenBudget, chatConfiguration, cancellationToken).ConfigureAwait(false); @@ -132,10 +132,10 @@ await CanRenderAsync( { cancellationToken.ThrowIfCancellationRequested(); - bool canRender = + (bool canRender, tokenBudget) = await CanRenderAsync( message, - ref tokenBudget, + tokenBudget, chatConfiguration, cancellationToken).ConfigureAwait(false); @@ -222,12 +222,12 @@ await ParseEvaluationResponseAsync( /// /// A that can cancel the operation. /// - /// if there is sufficient remaining to render the supplied - /// as part of the evaluation prompt; otherwise. + /// A tuple containing a boolean indicating if there is sufficient remaining to render the supplied + /// as part of the evaluation prompt and an int returning the remaining token budget. /// - protected virtual ValueTask CanRenderAsync( + protected virtual ValueTask<(bool tokenBudgetSufficient, int tokenBudgetRemaining)> CanRenderAsync( ChatMessage message, - ref int tokenBudget, + int tokenBudget, ChatConfiguration chatConfiguration, CancellationToken cancellationToken) { @@ -237,7 +237,7 @@ protected virtual ValueTask CanRenderAsync( IEvaluationTokenCounter? tokenCounter = chatConfiguration.TokenCounter; if (tokenCounter is null) { - return new ValueTask(true); + return new ValueTask<(bool, int)>((true, tokenBudget)); } string? author = message.AuthorName; @@ -261,12 +261,12 @@ protected virtual ValueTask CanRenderAsync( if (tokenCount > tokenBudget) { - return new ValueTask(false); + return new ValueTask<(bool, int)>((false, tokenBudget)); } else { tokenBudget -= tokenCount; - return new ValueTask(true); + return new ValueTask<(bool, int)>((true, tokenBudget)); } }