using System.Linq; using System.Threading.Tasks; using Gott.Services; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; namespace Gott.Endpoints; public static class ModelsEndpoint { public static void MapModelsEndpoint(this IEndpointRouteBuilder app) { app.MapGet("/api/models/nvidia", HandleNvidiaModels); app.MapGet("/api/models/pollinations", HandlePollinationsModels); app.MapGet("/api/models/gemini", HandleGeminiModels); app.MapGet("/api/models/openai", HandleOpenAiModels); app.MapGet("/api/models/minimax", HandleMinimaxModels); app.MapGet("/api/models/glm", HandleGlmModels); app.MapPost("/api/models/refresh", HandleRefresh); } private static IResult HandleNvidiaModels(OpenAiService openAiService) { var models = openAiService.GetNvidiaModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static IResult HandlePollinationsModels(OpenAiService openAiService) { var models = openAiService.GetPollinationsModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static IResult HandleGeminiModels(OpenAiService openAiService) { var models = openAiService.GetGeminiModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static IResult HandleOpenAiModels(OpenAiService openAiService) { var models = openAiService.GetOpenAiModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static IResult HandleMinimaxModels(OpenAiService openAiService) { var models = openAiService.GetMinimaxModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static IResult HandleGlmModels(OpenAiService openAiService) { var models = openAiService.GetGlmModels() .Select(m => new { id = m.Id, displayName = m.DisplayName }) .ToList(); return Results.Json(new { models }); } private static async Task HandleRefresh(OpenAiService openAiService) { var report = await openAiService.RefreshModelsFromApis(); var loaded = report.Where(r => r.Loaded).ToList(); var skipped = report.Where(r => !r.Loaded).ToList(); var message = $"{loaded.Count} Provider neu geladen" + (skipped.Count > 0 ? $", {skipped.Count} übersprungen: {string.Join(", ", skipped.Select(r => $"{r.Provider} ({r.Note})"))}" : "."); return Results.Json(new { success = true, message, providers = report.Select(r => new { provider = r.Provider, loaded = r.Loaded, count = r.Count, note = r.Note }).ToList() }); } }