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