a4c9c779c9
* feat: status and elapsed time indicator * test: add tests for tui-status * fix: move to enum+switch, change phase calculation * feat: remove 'done' phase
37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
"""Token usage statistics widget."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from rich.text import Text
|
|
from textual.widgets import Static
|
|
|
|
|
|
class UsageWidget(Static):
|
|
"""Displays token usage stats, right-aligned with styled numbers."""
|
|
|
|
DEFAULT_CSS = """
|
|
UsageWidget {
|
|
height: auto;
|
|
text-align: right;
|
|
}
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
input_tokens: int,
|
|
output_tokens: int,
|
|
elapsed: str | None = None,
|
|
) -> None:
|
|
stats = Text(justify="right")
|
|
stats.append("[", style="dim italic")
|
|
stats.append("Usage: ", style="dim italic")
|
|
stats.append(f"{input_tokens:,}", style="cyan italic")
|
|
stats.append(" in · ", style="dim italic")
|
|
stats.append(f"{output_tokens:,}", style="green italic")
|
|
stats.append(" out", style="dim italic")
|
|
if elapsed:
|
|
stats.append(" · ", style="dim italic")
|
|
stats.append(f"Elapsed: {elapsed}", style="dim italic")
|
|
stats.append("]", style="dim italic")
|
|
super().__init__(stats)
|