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>(),
|
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) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user