using Spectre.Console; namespace AnchorCli.OpenRouter; /// /// Displays token usage and cost information to the console. /// internal sealed class UsageDisplayer { private readonly TokenTracker _tokenTracker; public UsageDisplayer(TokenTracker tokenTracker) { _tokenTracker = tokenTracker; } /// /// Displays the usage statistics for a single response. /// public void Display(int inputTokens, int outputTokens) { if (inputTokens > 0 || outputTokens > 0) { _tokenTracker.AddUsage(inputTokens, outputTokens); var cost = _tokenTracker.CalculateCost(inputTokens, outputTokens); var ctxPct = _tokenTracker.ContextUsagePercent; AnsiConsole.WriteLine(); AnsiConsole.MarkupLine( $"[dim grey] {TokenTracker.FormatTokens(inputTokens)}↑ {TokenTracker.FormatTokens(outputTokens)}↓" + $" {TokenTracker.FormatCost(cost)}" + (ctxPct >= 0 ? $" ctx:{ctxPct:F0}%" : "") + $" │ session: {TokenTracker.FormatCost(_tokenTracker.SessionCost)}[/]"); } else { AnsiConsole.WriteLine(); } } /// /// Displays a rule separator. /// public void DisplaySeparator() { AnsiConsole.Write(new Rule().RuleStyle(Style.Parse("grey dim"))); } }