fix(config): add retry logic for provider loading
This commit is contained in:
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user