Backend: - /api/pi/models now calls 'pi --list-models' with stored API keys - pi-bridge.ts: callback-based event handling (matches pi-monorepo) - pi-bridge.ts: correct RPC format (type: 'prompt' not jsonrpc) - pi-bridge.ts: pass API keys to Pi process env - websocket.ts: event handler runs in background, no blocking - rest.ts: fix user home path (getHomeDir instead of hardcoded) Frontend: - Fix /api/ double prefix in useChatSessions, useChatGroups, useModels - Add PROVIDER_DISPLAY mapping in SystemSettings.tsx - Provider tabs show friendly names (e.g., 'OpenCode Zen') UI (from previous session): - Grouped session list with collapsible folders - CreateGroupDialog, GroupContextMenu, SessionContextMenu components
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import { useQuery } from '@tanstack/react-query';
|
|
import { useClient } from 'hooks/useClient';
|
|
import { useAuth } from 'hooks/useAuth';
|
|
import { useSettings } from './useSettings';
|
|
import type { ModelOption } from 'apps/Chat';
|
|
|
|
export type { ModelOption };
|
|
|
|
export function modelKey(m: ModelOption): string {
|
|
return `${m.provider}:${m.id}`;
|
|
}
|
|
|
|
export function usePiModels() {
|
|
const client = useClient();
|
|
const { isAuthenticated } = useAuth();
|
|
|
|
const { data: models = [] } = useQuery<ModelOption[]>({
|
|
queryKey: ['PI_MODELS'],
|
|
enabled: isAuthenticated,
|
|
queryFn: async () => {
|
|
const data = await client.get<{ models: ModelOption[] }>('/pi/models');
|
|
return data.models;
|
|
},
|
|
staleTime: 5 * 60 * 1000,
|
|
});
|
|
|
|
return models;
|
|
}
|
|
|
|
export function useVisiblePiModels() {
|
|
const models = usePiModels();
|
|
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;
|
|
}
|