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>(),
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 {
const metadataPromise = fetchModelsDevMetadata();
const apiResult = await opencodeClient.getProviders();
@@ -290,10 +297,22 @@ export const useConfigStore = create<ConfigStore>()(
if (metadata.size > 0) {
set({ modelsMetadata: metadata });
}
return;
} catch (error) {
console.error("Failed to load providers:", error);
set({ providers: [], defaultProviders: {}, currentProviderId: "", currentModelId: "" });
lastError = error;
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) => {