58 lines
2.0 KiB
Python
58 lines
2.0 KiB
Python
"""Usage statistics CLI command"""
|
|
|
|
from typing import Optional
|
|
|
|
import typer
|
|
from rich import print as rprint
|
|
from rich.table import Table
|
|
|
|
|
|
def usage(
|
|
agent: Optional[str] = typer.Option(None, "--agent", "-a", help="Filter by agent name"),
|
|
format: str = typer.Option("table", "--format", "-f", help="Output format: table or json"),
|
|
server_url: Optional[str] = typer.Option(None, "--server-url", help="AgentKit server URL"),
|
|
):
|
|
"""Show LLM usage statistics"""
|
|
if server_url:
|
|
import httpx
|
|
try:
|
|
with httpx.Client(timeout=10.0) as client:
|
|
params = {}
|
|
if agent:
|
|
params["agent_name"] = agent
|
|
response = client.get(f"{server_url}/api/v1/llm/usage", params=params)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
except Exception as e:
|
|
rprint(f"[red]Error: {e}[/red]")
|
|
raise typer.Exit(code=1)
|
|
else:
|
|
# Local mode: use LLMGateway.UsageTracker
|
|
try:
|
|
from agentkit.llm.gateway import LLMGateway
|
|
gateway = LLMGateway()
|
|
summary = gateway.get_usage(agent_name=agent)
|
|
data = {
|
|
"total_tokens": summary.total_tokens,
|
|
"total_cost": summary.total_cost,
|
|
"total_requests": len(summary.records),
|
|
"by_model": summary.by_model,
|
|
}
|
|
except Exception as e:
|
|
rprint(f"[dim]No usage data available: {e}[/dim]")
|
|
data = {"total_requests": 0, "total_tokens": 0, "total_cost": 0.0}
|
|
|
|
if format == "json":
|
|
import json
|
|
rprint(json.dumps(data, indent=2, ensure_ascii=False))
|
|
else:
|
|
table = Table(title="LLM Usage Statistics")
|
|
table.add_column("Metric", style="cyan")
|
|
table.add_column("Value")
|
|
for key, value in data.items():
|
|
if isinstance(value, float):
|
|
table.add_row(key, f"{value:.4f}")
|
|
else:
|
|
table.add_row(key, str(value))
|
|
rprint(table)
|