Local models

This commit is contained in:
2026-02-22 18:04:01 +00:00
parent e35b7340f3
commit 1372f53782
8 changed files with 640 additions and 58 deletions
+50 -5
View File
@@ -10,6 +10,13 @@ export function modelKey(m: ModelOption): string {
return `${m.provider}:${m.id}`;
}
// Store provider names globally for display
let globalProviderNames: Record<string, string> = {};
export function getProviderDisplayName(providerId: string): string {
return globalProviderNames[providerId] || providerId;
}
export function usePiModels() {
const client = useClient();
const { isAuthenticated } = useAuth();
@@ -18,7 +25,20 @@ export function usePiModels() {
queryKey: ['PI_MODELS'],
enabled: isAuthenticated,
queryFn: async () => {
const data = await client.get<{ models: ModelOption[] }>('/pi/models');
const data = await client.get<{ models: ModelOption[]; providerNames?: Record<string, string> }>('/pi/models');
console.log('[usePiModels] Fetched models:', {
modelCount: data.models.length,
providerNames: data.providerNames,
providers: [...new Set(data.models.map(m => m.provider))]
});
// Store provider names for later use
if (data.providerNames) {
globalProviderNames = data.providerNames;
console.log('[usePiModels] Stored provider names:', globalProviderNames);
}
return data.models;
},
staleTime: 5 * 60 * 1000,
@@ -32,8 +52,33 @@ export function useVisiblePiModels() {
const { settings } = useSettings();
const enabled = settings.ai?.enabledModels ?? [];
const filtered = models.filter((m) => enabled.includes(modelKey(m)));
// If no models match the visibility filter, show all
// The provider list changes dynamically based on API keys so the filter may be stale
return filtered.length > 0 ? filtered : models;
// If no enabled models list exists, show all models
if (enabled.length === 0) {
console.log('[useVisiblePiModels] No enabled models list, showing all');
return models;
}
// Get all providers from enabled models
const enabledProviders = new Set(
enabled.map(key => key.split(':')[0])
);
// Filter to include:
// 1. Models that are explicitly enabled
// 2. Models from providers that aren't in the enabled list at all (new providers)
const filtered = models.filter((m) => {
const isExplicitlyEnabled = enabled.includes(modelKey(m));
const isFromNewProvider = !enabledProviders.has(m.provider);
return isExplicitlyEnabled || isFromNewProvider;
});
console.log('[useVisiblePiModels]', {
allModels: models.length,
enabledModels: enabled,
enabledProviders: Array.from(enabledProviders),
filtered: filtered.length,
finalCount: filtered.length
});
return filtered;
}