From f8fe5b0d3a9d727f898b2fadec48ac72f9eaf469 Mon Sep 17 00:00:00 2001 From: Darren Reid Date: Thu, 28 Mar 2024 16:29:26 +1100 Subject: [PATCH] WIP basic leaderboard --- MyApp.ServiceInterface/LeaderboardServices.cs | 6 +- MyApp/Components/Pages/Leaderboard.razor | 28 ++++- MyApp/Components/Shared/LeaderboardView.razor | 117 ++++++++++++++++++ 3 files changed, 146 insertions(+), 5 deletions(-) create mode 100644 MyApp/Components/Shared/LeaderboardView.razor diff --git a/MyApp.ServiceInterface/LeaderboardServices.cs b/MyApp.ServiceInterface/LeaderboardServices.cs index 7633f9d..e189f8e 100644 --- a/MyApp.ServiceInterface/LeaderboardServices.cs +++ b/MyApp.ServiceInterface/LeaderboardServices.cs @@ -49,7 +49,7 @@ public async Task Any(CalculateLeaderBoard request) .Sum(y => y.WinRate); - var leaderBoard = new LeaderBoard + var leaderBoard = new CalculateLeaderboardResponse { MostLikedModels = statsByUser.Where(x => IsHuman(x.Id) == false) .OrderByDescending(x => x.GetScore()) @@ -110,7 +110,7 @@ double CalculateWinRate(List statTotalsList, string name, int questi } } -public class LeaderBoard +public class CalculateLeaderboardResponse { public List MostLikedModels { get; set; } public List MostLikedModelsByLlm { get; set; } @@ -168,7 +168,7 @@ public class LeaderBoardWinRateByTag public double WinRate { get; set; } } -public class CalculateLeaderBoard +public class CalculateLeaderBoard : IReturn, IGet { } \ No newline at end of file diff --git a/MyApp/Components/Pages/Leaderboard.razor b/MyApp/Components/Pages/Leaderboard.razor index 197b0d7..5b7d529 100644 --- a/MyApp/Components/Pages/Leaderboard.razor +++ b/MyApp/Components/Pages/Leaderboard.razor @@ -1,10 +1,34 @@ @page "/leaderboard" +@using MyApp.ServiceInterface +@inherits AppComponentBase Leaderboard
- Counter + Leaderboard -
+
+ @if (data != null) + { + + } +
+ +@code { + + CalculateLeaderboardResponse? data; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + var api = await ApiAsync(new CalculateLeaderBoard()); + if (api.Succeeded) + data = api.Response; + else + Console.WriteLine(api.Error?.Message); + + } + +} diff --git a/MyApp/Components/Shared/LeaderboardView.razor b/MyApp/Components/Shared/LeaderboardView.razor new file mode 100644 index 0000000..9aab339 --- /dev/null +++ b/MyApp/Components/Shared/LeaderboardView.razor @@ -0,0 +1,117 @@ +@using MyApp.ServiceInterface + +
+
+

Most Liked Models

+
+ @foreach (var model in LeaderBoardData.MostLikedModelsByLlm.OrderByDescending(x => x.StartingUpVotes)) + { +
+ Avatar +
+

@GetModelName(model.Id)

+
@model.StartingUpVotes votes
+
+
+ } +
+
+ +
+

Total Votes

+
+ @foreach (var model in LeaderBoardData.ModelTotalScore.OrderByDescending(x => x.TotalScore)) + { +
+ Avatar +
+

@GetModelName(model.Id)

+
@model.TotalScore votes
+
+
+ } +
+
+ +
+

Overall Win Rate

+
+ @foreach (var model in LeaderBoardData.AnswererWinRate.OrderByDescending(x => x.WinRate)) + { +
+ Avatar +
+

@GetModelName(model.Id)

+
@(Math.Round(model.WinRate,2)) %
+
+
+ } +
+
+ +
+

Win Rate By Models

+
+ @foreach (var model in LeaderBoardData.ModelWinRate.OrderByDescending(x => x.WinRate)) + { +
+ Avatar +
+

@GetModelName(model.Id)

+
@(Math.Round(model.WinRate,2)) %
+
+
+ } +
+
+ +
+ +@code { + [Parameter] + public CalculateLeaderboardResponse LeaderBoardData { get; set; } + + private string GetModelName(string modelId) + { + if (modelAliases.TryGetValue(modelId, out var alias)) + { + return alias; + } + return modelId; + } + + private string GetAvatarUrl(string modelId) + { + var userName = modelUserMapping.TryGetValue(modelId, out var value) ? value : modelId; + return $"/avatar/{userName}"; + } + + Dictionary modelUserMapping = new() + { + { "mistral", "mistral" }, + { "mixtral", "mixtral" }, + { "mixtral-8x7b", "mixtral" }, + { "mixtral-8x7b-32768", "mixtral"}, + { "codellama", "codellama" }, + { "deepseek-coder:6.7b", "deepseek-coder" }, + { "deepseek-coder-6", "deepseek-coder"}, + { "gemma-2b", "gemma-2b" }, + { "gemma", "gemma" }, + { "gemma-7b", "gemma" }, + { "phi", "phi" } + }; + + Dictionary modelAliases = new() + { + { "mistral", "Mistral 7B" }, + { "mixtral", "Mixtral 8x7B" }, + { "codellama", "Codellama" }, + { "deepseek-coder:6.7b", "Deepseek Coder 6.7B" }, + { "deepseek-coder-6", "Deepseek Coder 6.7B" }, + { "gemma-2b", "Gemma 2B" }, + { "gemma", "Gemma 7B" }, + { "gemma-7b", "Gemma 7B" }, + { "phi", "Phi" } + }; + +} \ No newline at end of file