diff --git a/src/lib/components/admin/Evaluations/Leaderboard.svelte b/src/lib/components/admin/Evaluations/Leaderboard.svelte index 36d8577229..88702d2224 100644 --- a/src/lib/components/admin/Evaluations/Leaderboard.svelte +++ b/src/lib/components/admin/Evaluations/Leaderboard.svelte @@ -89,8 +89,10 @@ // ////////////////////// + let modelRatingHistory = new Map(); + const rankHandler = async (similarities: Map = new Map()) => { - const modelStats = calculateModelStats(feedbacks, similarities); + const modelStats = calculateModelStats(feedbacks, similarities, modelRatingHistory); rankedModels = $models .filter((m) => m?.owned_by !== 'arena' && (m?.info?.meta?.hidden ?? false) !== true) @@ -118,7 +120,8 @@ function calculateModelStats( feedbacks: Feedback[], - similarities: Map + similarities: Map, + historyMap: Map> ): Map { const stats = new Map(); const K = 32; @@ -127,12 +130,21 @@ return stats.get(modelId) || { rating: 1000, won: 0, lost: 0 }; } - function updateStats(modelId: string, ratingChange: number, outcome: number) { + function updateStats( + modelId: string, + ratingChange: number, + outcome: number, + timestamp: number + ) { const currentStats = getOrDefaultStats(modelId); currentStats.rating += ratingChange; if (outcome === 1) currentStats.won++; else if (outcome === 0) currentStats.lost++; stats.set(modelId, currentStats); + if (historyMap) { + if (!historyMap.has(modelId)) historyMap.set(modelId, []); + historyMap.get(modelId).push({ timestamp, rating: Math.round(currentStats.rating) }); + } } function calculateEloChange( @@ -172,8 +184,8 @@ const changeA = calculateEloChange(statsA.rating, statsB.rating, outcome, similarity); const changeB = calculateEloChange(statsB.rating, statsA.rating, 1 - outcome, similarity); - updateStats(modelA, changeA, outcome); - updateStats(modelB, changeB, 1 - outcome); + updateStats(modelA, changeA, outcome, feedback.updated_at); + updateStats(modelB, changeB, 1 - outcome, feedback.updated_at); }); }); @@ -329,10 +341,11 @@ }); - diff --git a/src/lib/components/admin/Evaluations/LeaderboardModal.svelte b/src/lib/components/admin/Evaluations/LeaderboardModal.svelte index b3d7849797..6dbfe3f6d4 100644 --- a/src/lib/components/admin/Evaluations/LeaderboardModal.svelte +++ b/src/lib/components/admin/Evaluations/LeaderboardModal.svelte @@ -1,8 +1,9 @@ @@ -55,13 +100,26 @@ - {/if} + +
+ {#if chartData.length > 1} + + {:else} +
+ {i18n && i18n.t + ? i18n.t('Not enough data for rating history') + : 'Not enough data for rating history'} +
+ {/if} +
+