ch
Deploy Iddaai Frontend / build-and-deploy (push) Successful in 2m27s

This commit is contained in:
2026-06-02 03:37:07 +03:00
parent 9540ff9d2e
commit 2695cfffb4
7 changed files with 437 additions and 1 deletions
+12
View File
@@ -7,6 +7,7 @@ import type {
AnalyticsOverviewDto,
LeagueTierDto,
LeagueTierStatsDto,
ModelPerformanceDto,
RetrainStatusDto,
SettingDto,
UpdateLeagueTierDto,
@@ -30,6 +31,16 @@ const getAnalyticsOverview = () => {
});
};
// Model Performance (forward-test)
const getModelPerformance = (days?: number) => {
return apiRequest<ApiResponse<ModelPerformanceDto>>({
url: "/admin/model-performance",
client: "admin",
method: "get",
params: days ? { days: String(days) } : undefined,
});
};
// Settings
const getAllSettings = () => {
return apiRequest<ApiResponse<Record<string, string>>>({
@@ -204,6 +215,7 @@ const getRetrainStatus = () => {
export const adminService = {
getAnalyticsOverview,
getModelPerformance,
getAllSettings,
updateSetting,
getAllUsageLimits,
+27
View File
@@ -134,3 +134,30 @@ export interface AnalyticsOverviewDto {
aiHealth?: Record<string, unknown>;
[key: string]: unknown;
}
// ========================
// Model Performance (Forward-Test)
// ========================
export interface ModelPerformanceMarketDto {
market: string;
samples: number;
shown_pct: number;
actual_pct: number;
gap: number;
ece: number;
calibration: "good" | "overconfident" | "underconfident";
bet_count: number;
bet_hit_pct: number;
bet_roi_pct: number;
actions: Record<string, number>;
tiers: Record<string, number>;
}
export interface ModelPerformanceDto {
window_days: number;
settled_runs: number;
settled_markets: number;
generated_at: string;
markets: ModelPerformanceMarketDto[];
}
+11
View File
@@ -12,6 +12,8 @@ import type {
export const AdminQueryKeys = {
all: ["admin"] as const,
analytics: () => [...AdminQueryKeys.all, "analytics"] as const,
modelPerformance: (days?: number) =>
[...AdminQueryKeys.all, "modelPerformance", days] as const,
settings: () => [...AdminQueryKeys.all, "settings"] as const,
usageLimits: (params?: AdminPaginationParams) =>
[...AdminQueryKeys.all, "usageLimits", params] as const,
@@ -32,6 +34,15 @@ export const useAdminAnalytics = (enabled = true) => {
});
};
// Model Performance (forward-test)
export const useModelPerformance = (days = 90, enabled = true) => {
return useQuery({
queryKey: AdminQueryKeys.modelPerformance(days),
queryFn: () => adminService.getModelPerformance(days),
enabled,
});
};
// Settings
export const useAdminSettings = () => {
return useQuery({
+7
View File
@@ -13,6 +13,13 @@ export interface MatchInfoDto {
match_date_ms: number;
league_id?: string | null;
is_top_league?: boolean;
// Backtest-derived per-league confidence (ROI + sample size). null = too little data.
league_confidence?: {
label: "high" | "medium" | "low";
bet_roi: number;
bet_n: number;
hit: number;
} | null;
sport?: SportType;
// Live snapshot — set when the match is in play (used to detect stale predictions)
status?: string | null;