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
51 lines
1.9 KiB
TypeScript
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 };
|
|
};
|