polish admin leaderboard analytics

This commit is contained in:
Administrator committed 2026-06-04 21:09:36 +08:00
1 parent 5590f7d85a
commit fe0ede178e
4 files changed
+1122 -86

No files matched your search

+31 -1
View File
@@ -61,6 +61,16 @@ export interface AdminLeaderboardSkill {
last_used_at: string;
}
export interface AdminLeaderboardDimension {
name: string;
count: number;
user_count: number;
success_count: number;
error_count: number;
total_tokens: number;
last_seen_at: string;
}
export interface AdminLeaderboardQuestion {
text: string;
user_id: string;
@@ -100,6 +110,9 @@ export interface AdminLeaderboardResponse {
users_by_tokens: AdminLeaderboardUser[];
skills: AdminLeaderboardSkill[];
tools: AdminLeaderboardSkill[];
models: AdminLeaderboardDimension[];
agents: AdminLeaderboardDimension[];
run_statuses: AdminLeaderboardDimension[];
recent_questions: AdminLeaderboardQuestion[];
frequent_questions: AdminLeaderboardQuestion[];
trends: AdminLeaderboardTrendPoint[];
@@ -113,6 +126,9 @@ export interface AdminUserAnalyticsResponse {
overview: AdminLeaderboardOverview;
skills: AdminLeaderboardSkill[];
tools: AdminLeaderboardSkill[];
models: AdminLeaderboardDimension[];
agents: AdminLeaderboardDimension[];
run_statuses: AdminLeaderboardDimension[];
recent_questions: AdminLeaderboardQuestion[];
trends: AdminLeaderboardTrendPoint[];
}
@@ -156,7 +172,15 @@ export async function getUserMemory(
}
export async function getUserLeaderboard(
range: { since: string; until: string; days?: number },
range: {
since: string;
until: string;
days?: number;
exclude_user_ids?: string[];
include_scheduled?: boolean;
include_admins?: boolean;
include_failed?: boolean;
},
limit = 20,
): Promise<AdminLeaderboardResponse> {
const params = new URLSearchParams({
@@ -164,7 +188,13 @@ export async function getUserLeaderboard(
since: range.since,
until: range.until,
limit: String(limit),
include_scheduled: String(range.include_scheduled ?? true),
include_admins: String(range.include_admins ?? true),
include_failed: String(range.include_failed ?? true),
});
for (const userId of range.exclude_user_ids ?? []) {
params.append("exclude_user_ids", userId);
}
return parse(
await apiFetch(`${base()}/leaderboard?${params}`),
"Failed to load leaderboard",