fix(review): U6 frontend field alignment + CLI top-users field fix

This commit is contained in:
chiguyong 2026-06-22 16:28:44 +08:00
parent 00c8386939
commit 278d76b381
4 changed files with 10 additions and 13 deletions

View File

@ -1403,7 +1403,6 @@ def usage_top_users(
table = Table(title=f"Top {limit} Users by Tokens")
table.add_column("Rank", style="cyan")
table.add_column("User ID")
table.add_column("Username")
table.add_column("Requests")
table.add_column("Tokens")
table.add_column("Cost")
@ -1411,7 +1410,6 @@ def usage_top_users(
table.add_row(
str(i),
str(row.get("user_id", "")),
str(row.get("username", "")),
str(row.get("requests", "")),
str(row.get("tokens", "")),
str(row.get("cost", "")),

View File

@ -86,9 +86,9 @@ export interface IUsageSummary {
total_tokens: number
total_cost: number
total_requests: number
by_model: Record<string, { tokens: number; cost: number; requests: number }>
by_user: Record<string, { tokens: number; cost: number; requests: number }>
by_department: Record<string, { tokens: number; cost: number; requests: number }>
by_model: Record<string, { total_tokens: number; total_cost: number; count: number }>
by_user: Record<string, { total_tokens: number; total_cost: number; count: number }>
by_department: Record<string, { total_tokens: number; total_cost: number; count: number }>
}
/** Usage timeseries bucket. */

View File

@ -198,9 +198,9 @@ interface ISelectOption {
/** Per-bucket usage metric (matches ``IUsageSummary.by_*`` value shape). */
interface IUsageMetric {
tokens: number
cost: number
requests: number
total_tokens: number
total_cost: number
count: number
}
/** Flattened per-department usage row (derived from ``IUsageSummary.by_department``). */
@ -247,9 +247,9 @@ const deptRows = computed<IDeptUsageRow[]>(() => {
const map: Record<string, IUsageMetric> = summary.value?.by_department ?? {}
return Object.entries(map).map(([departmentId, v]) => ({
department_id: departmentId,
tokens: v.tokens,
cost: v.cost,
requests: v.requests,
tokens: v.total_tokens,
cost: v.total_cost,
requests: v.count,
}))
})

View File

@ -722,7 +722,6 @@ class TestUsageCommands:
mock_client.get.return_value = [
{
"user_id": "user-1",
"username": "alice",
"requests": 100,
"tokens": 50000,
"cost": 1.5,
@ -730,7 +729,7 @@ class TestUsageCommands:
]
result = runner.invoke(admin_app, ["usage", "top-users", "--limit", "5"])
assert result.exit_code == 0
assert "alice" in result.stdout
assert "user-1" in result.stdout
params = mock_client.get.call_args.kwargs["params"]
assert params["limit"] == 5