fix(config): add retry logic for provider loading

This commit is contained in:
Bohdan Triapitsyn
2025-12-25 23:57:03 +02:00
parent 3106abec9b
commit 2080ce6d65
+21 -2
View File
@@ -259,6 +259,13 @@ export const useConfigStore = create<ConfigStore>()(
modelsMetadata: new Map<string, ModelMetadata>(), modelsMetadata: new Map<string, ModelMetadata>(),
loadProviders: async () => { loadProviders: async () => {
const previousProviders = get().providers;
const previousDefaults = get().defaultProviders;
const previousProviderId = get().currentProviderId;
const previousModelId = get().currentModelId;
let lastError: unknown = null;
for (let attempt = 0; attempt < 3; attempt++) {
try { try {
const metadataPromise = fetchModelsDevMetadata(); const metadataPromise = fetchModelsDevMetadata();
const apiResult = await opencodeClient.getProviders(); const apiResult = await opencodeClient.getProviders();
@@ -290,10 +297,22 @@ export const useConfigStore = create<ConfigStore>()(
if (metadata.size > 0) { if (metadata.size > 0) {
set({ modelsMetadata: metadata }); set({ modelsMetadata: metadata });
} }
return;
} catch (error) { } catch (error) {
console.error("Failed to load providers:", error); lastError = error;
set({ providers: [], defaultProviders: {}, currentProviderId: "", currentModelId: "" }); const waitMs = 200 * (attempt + 1);
await new Promise((resolve) => setTimeout(resolve, waitMs));
} }
}
console.error("Failed to load providers:", lastError);
// Preserve previous state on failure instead of clearing it
set({
providers: previousProviders,
defaultProviders: previousDefaults,
currentProviderId: previousProviderId,
currentModelId: previousModelId,
});
}, },
setProvider: (providerId: string) => { setProvider: (providerId: string) => {