From 3533c73ec47a385a97222ec842973bd7427b7cb9 Mon Sep 17 00:00:00 2001 From: Sami Jawhar Date: Sun, 26 Apr 2026 19:47:15 +0000 Subject: [PATCH] fix(provider): ModelsDev returns empty when disk empty and fetch disabled --- packages/core/src/models-dev.ts | 2 +- packages/opencode/src/provider/provider.ts | 7 ++++++ .../opencode/test/provider/provider.test.ts | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/packages/core/src/models-dev.ts b/packages/core/src/models-dev.ts index d40fa7477492..14de586e7780 100644 --- a/packages/core/src/models-dev.ts +++ b/packages/core/src/models-dev.ts @@ -179,9 +179,9 @@ export const layer = Layer.effect( const populate = Effect.gen(function* () { const fromDisk = yield* loadFromDisk if (fromDisk) return fromDisk + if (Flag.OPENCODE_DISABLE_MODELS_FETCH) return {} const snapshot = yield* loadSnapshot if (snapshot) return snapshot - if (Flag.OPENCODE_DISABLE_MODELS_FETCH) return {} // Flock is cross-process: concurrent opencode CLIs can race on this cache file. const text = yield* Effect.scoped( Effect.gen(function* () { diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 496a2f6d2d3b..1b0dd3389783 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -1509,6 +1509,13 @@ export const layer = Layer.effect( (v) => omit(v, ["disabled"]), ) } + + const configLimit = configProvider?.models?.[modelID]?.limit + if (configLimit) { + if (configLimit.context) model.limit.context = configLimit.context + if (configLimit.input) model.limit.input = configLimit.input + if (configLimit.output) model.limit.output = configLimit.output + } } if (Object.keys(provider.models).length === 0) { diff --git a/packages/opencode/test/provider/provider.test.ts b/packages/opencode/test/provider/provider.test.ts index 8cf93e22d6f1..47b21084ca55 100644 --- a/packages/opencode/test/provider/provider.test.ts +++ b/packages/opencode/test/provider/provider.test.ts @@ -1091,6 +1091,31 @@ it.instance( }, ) +it.instance( + "config provider model limit overrides individual fields", + Effect.gen(function* () { + const providers = yield* list + const model = providers[ProviderID.make("limit-override")].models[ModelID.make("model")] + expect(model.limit.context).toBe(100000) + expect(model.limit.input).toBe(80000) + expect(model.limit.output).toBe(16000) + }), + { + config: { + provider: { + "limit-override": { + name: "Limit Override Provider", + npm: "@ai-sdk/openai-compatible", + env: [], + models: { model: { name: "Model", tool_call: true, limit: { context: 100000, input: 80000, output: 16000 } } }, + options: { apiKey: "test" }, + }, + }, + }, + }, +) + + it.instance( "provider options are deeply merged", Effect.gen(function* () {