diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index bae33178467..4a54b006add 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -103,6 +103,8 @@ export namespace ModelsDev { return result as Record } + let refreshing: Promise | undefined + export async function refresh() { const result = await fetch(`${url()}/api.json`, { headers: { @@ -119,10 +121,19 @@ export namespace ModelsDev { ModelsDev.Data.reset() } } + + export function startRefresh() { + refreshing = refresh() + return refreshing + } + + export async function ensureFresh() { + if (refreshing) await refreshing.catch(() => {}) + } } if (!Flag.OPENCODE_DISABLE_MODELS_FETCH && !process.argv.includes("--get-yargs-completions")) { - ModelsDev.refresh() + ModelsDev.startRefresh() setInterval( async () => { await ModelsDev.refresh() diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 022ec316795..9e3962efc18 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -757,6 +757,7 @@ export namespace Provider { const state = Instance.state(async () => { using _ = log.time("state") const config = await Config.get() + await ModelsDev.ensureFresh() const modelsDev = await ModelsDev.get() const database = mapValues(modelsDev, fromModelsDevProvider)