Files
openchamber/packages/ui/src/hooks/useModelLists.ts
T
Bohdan Triapitsyn f2507d58cf feat: migrate to OpenCode SDK v2
Update all import statements to use @opencode-ai/sdk/v2
Modify Vite configurations to alias new SDK path
Update API client method signatures for SDK v2 compatibility
2026-01-03 13:39:59 +02:00

51 lines
1.9 KiB
TypeScript

import React from 'react';
import { useConfigStore } from '@/stores/useConfigStore';
import { useUIStore } from '@/stores/useUIStore';
import type { Provider } from '@opencode-ai/sdk/v2';
type ProviderModel = Provider["models"][string];
type ProviderWithModelList = Omit<Provider, "models"> & { models: ProviderModel[] };
export interface ModelListItem {
provider: ProviderWithModelList;
model: ProviderModel;
providerID: string;
modelID: string;
}
export const useModelLists = () => {
const { providers } = useConfigStore();
const { favoriteModels, recentModels } = useUIStore();
const favoriteModelsList = React.useMemo(() => {
return favoriteModels
.map(({ providerID, modelID }) => {
const provider = providers.find((p) => p.id === providerID);
if (!provider) return null;
const providerModels = Array.isArray(provider.models) ? provider.models : [];
const model = providerModels.find((m: ProviderModel) => m.id === modelID);
if (!model) return null;
return { provider, model, providerID, modelID };
})
.filter((item): item is ModelListItem => item !== null);
}, [favoriteModels, providers]);
const recentModelsList = React.useMemo(() => {
return recentModels
.map(({ providerID, modelID }) => {
const provider = providers.find((p) => p.id === providerID);
if (!provider) return null;
const providerModels = Array.isArray(provider.models) ? provider.models : [];
const model = providerModels.find((m: ProviderModel) => m.id === modelID);
if (!model) return null;
return { provider, model, providerID, modelID };
})
.filter((item): item is ModelListItem => item !== null)
.filter(({ providerID, modelID }) =>
!favoriteModels.some(fav => fav.providerID === providerID && fav.modelID === modelID)
);
}, [recentModels, providers, favoriteModels]);
return { favoriteModelsList, recentModelsList };
};