fix: invalidate model metadata cache after OpenCode restart (#1065)
After OpenCode restarts (via 'Reload Opencode' or server reconnection), the UI's cached model metadata (context windows, pricing, etc.) was never refreshed — the cache was fetched once at boot and reused forever. This meant new/updated models from providers were invisible until a full page reload. Add invalidateModelMetadataCache action to useConfigStore that clears the metadata cache and resets the in-flight tracker. Call it from performConfigRefresh before re-loading providers.
This commit is contained in:
@@ -612,6 +612,10 @@ async function performConfigRefresh(options: {
|
|||||||
useConfigStore.setState({ directoryScoped: {} });
|
useConfigStore.setState({ directoryScoped: {} });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (refreshProviders) {
|
||||||
|
useConfigStore.getState().invalidateModelMetadataCache();
|
||||||
|
}
|
||||||
|
|
||||||
const sdkRefreshTasks: Promise<void>[] = [];
|
const sdkRefreshTasks: Promise<void>[] = [];
|
||||||
for (const directory of directoriesToRefresh) {
|
for (const directory of directoriesToRefresh) {
|
||||||
if (refreshProviders) {
|
if (refreshProviders) {
|
||||||
|
|||||||
@@ -550,6 +550,7 @@ interface ConfigStore {
|
|||||||
|
|
||||||
loadProviders: (options?: { directory?: string | null }) => Promise<void>;
|
loadProviders: (options?: { directory?: string | null }) => Promise<void>;
|
||||||
loadAgents: (options?: { directory?: string | null }) => Promise<boolean>;
|
loadAgents: (options?: { directory?: string | null }) => Promise<boolean>;
|
||||||
|
invalidateModelMetadataCache: () => void;
|
||||||
setProvider: (providerId: string) => void;
|
setProvider: (providerId: string) => void;
|
||||||
setModel: (modelId: string) => void;
|
setModel: (modelId: string) => void;
|
||||||
setCurrentVariant: (variant: string | undefined) => void;
|
setCurrentVariant: (variant: string | undefined) => void;
|
||||||
@@ -1550,6 +1551,11 @@ export const useConfigStore = create<ConfigStore>()(
|
|||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
invalidateModelMetadataCache: () => {
|
||||||
|
modelsMetadataInFlight = null;
|
||||||
|
set({ modelsMetadata: new Map<string, ModelMetadata>() });
|
||||||
|
},
|
||||||
|
|
||||||
setAgent: (agentName: string | undefined) => {
|
setAgent: (agentName: string | undefined) => {
|
||||||
const {
|
const {
|
||||||
agents,
|
agents,
|
||||||
|
|||||||
Reference in New Issue
Block a user