diff --git a/SqlDatabaseVectorSearch/Components/Pages/Ask.razor b/SqlDatabaseVectorSearch/Components/Pages/Ask.razor
index c160568..b480a77 100644
--- a/SqlDatabaseVectorSearch/Components/Pages/Ask.razor
+++ b/SqlDatabaseVectorSearch/Components/Pages/Ask.razor
@@ -262,26 +262,29 @@
return string.Empty;
}
- var reformulation = tokenUsageResponse.Reformulation is not null
- ? $"
Reformulation:
{FormatTokenUsageDetails(tokenUsageResponse.Reformulation)}
"
- : string.Empty;
+ (string Label, UsageDetails? Usage)[] sections =
+ [
+ ("Reformulation", tokenUsageResponse.Reformulation),
+ ("Question", tokenUsageResponse.Question)
+ ];
- var question = tokenUsageResponse.Question is not null
- ? $"Question:
{FormatTokenUsageDetails(tokenUsageResponse.Question)}
"
- : string.Empty;
+ return string.Concat(sections
+ .Where(section => section.Usage is not null)
+ .Select(section => $"{section.Label}:
{FormatTokenUsageDetails(section.Usage!)}
"));
- return $"{reformulation}{question}";
-
- static string FormatTokenUsageDetails(UsageDetails? tokenUsage)
+ static string FormatTokenUsageDetails(UsageDetails tokenUsage)
{
- if (tokenUsage is null)
- {
- return string.Empty;
- }
+ // Reasoning tokens are part of the output tokens, so they're shown as a detail of that value.
+ var outputTokens = tokenUsage.ReasoningTokenCount is > 0 and var reasoningTokenCount
+ ? $"Output tokens: {tokenUsage.OutputTokenCount} (including {reasoningTokenCount} reasoning tokens)"
+ : $"Output tokens: {tokenUsage.OutputTokenCount}";
- return $"Input tokens: {tokenUsage.InputTokenCount}
" +
- $"Output tokens: {tokenUsage.OutputTokenCount}
" +
- $"Total tokens: {tokenUsage.TotalTokenCount}";
+ return string.Join("
",
+ [
+ $"Input tokens: {tokenUsage.InputTokenCount}",
+ outputTokens,
+ $"Total tokens: {tokenUsage.TotalTokenCount}"
+ ]);
}
}