From d6fdf0c581a0c29e5a59f8aa258f0c82aeedbea5 Mon Sep 17 00:00:00 2001 From: 9qeklajc Date: Mon, 24 Nov 2025 20:57:09 +0100 Subject: [PATCH] display all providers --- ui/app/model/page.tsx | 70 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 58 insertions(+), 12 deletions(-) diff --git a/ui/app/model/page.tsx b/ui/app/model/page.tsx index edd6b20f..7de7c4c5 100644 --- a/ui/app/model/page.tsx +++ b/ui/app/model/page.tsx @@ -34,7 +34,6 @@ export default function ModelsPage() { const { models = [], groups = [] } = modelsData || {}; const groupedModels = useMemo(() => { - if (!models) return {}; return groupAndSortModelsByProvider(models); }, [models]); @@ -43,7 +42,14 @@ export default function ModelsPage() { }, [groups]); const providerInfo = useMemo(() => { - return Object.entries(groupedModels).map(([provider, providerModels]) => { + const allProviders = new Set([ + ...Object.keys(groupedModels), + ...groups.map((g) => g.provider), + ]); + console.log(allProviders); + + return Array.from(allProviders).map((provider) => { + const providerModels = groupedModels[provider] || []; const groupData = groupDataMap.get(provider); const activeModels = providerModels.filter( (m) => m.isEnabled && !m.soft_deleted @@ -59,7 +65,7 @@ export default function ModelsPage() { hasGroupApiKey: !!groupData?.group_api_key, }; }); - }, [groupedModels, groupDataMap]); + }, [groupedModels, groupDataMap, groups]); return ( @@ -158,9 +164,9 @@ export default function ModelsPage() { - {Object.entries(groupedModels).map( - ([provider, providerModels]) => { - const groupData = groupDataMap.get(provider); + {providerInfo.map( + ({ provider, totalModels, groupData }) => { + const providerModels = groupedModels[provider] || []; return ( @@ -190,15 +196,55 @@ export default function ModelsPage() { {groupData.group_url} )} + {totalModels === 0 && ( + + No models configured + + )} - + {totalModels === 0 ? ( + + + +
+

+ No models found for this provider +

+
+

Common issues:

+
    +
  • + API credentials: Check if the API key is correct and has the right permissions +
  • +
  • + Base URL: Verify the base URL is correct for your provider +
  • +
  • + Network access: Ensure the server can reach the provider's API endpoint +
  • +
  • + Provider status: The upstream provider might be temporarily unavailable +
  • +
+ {groupData?.group_url && ( +

+ Current endpoint: {groupData.group_url} +

+ )} +
+
+
+
+ ) : ( + + )}
);