From 6e2e583d3b1534db10b41ce6c320e46ab9b1431e Mon Sep 17 00:00:00 2001 From: wgu9 <145739220+wgu9@users.noreply.github.com> Date: Sun, 14 Jun 2026 07:33:16 -0700 Subject: [PATCH] fix: allow partial provider model limits --- packages/core/src/v1/config/provider.ts | 4 +-- packages/opencode/test/config/config.test.ts | 34 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/core/src/v1/config/provider.ts b/packages/core/src/v1/config/provider.ts index d54a3f08f926..588c562fadc2 100644 --- a/packages/core/src/v1/config/provider.ts +++ b/packages/core/src/v1/config/provider.ts @@ -40,9 +40,9 @@ export const Model = Schema.Struct({ ), limit: Schema.optional( Schema.Struct({ - context: Schema.Finite, + context: Schema.optional(Schema.Finite), input: Schema.optional(Schema.Finite), - output: Schema.Finite, + output: Schema.optional(Schema.Finite), }), ), modalities: Schema.optional( diff --git a/packages/opencode/test/config/config.test.ts b/packages/opencode/test/config/config.test.ts index 02ace5366880..7358541bcc39 100644 --- a/packages/opencode/test/config/config.test.ts +++ b/packages/opencode/test/config/config.test.ts @@ -1339,6 +1339,40 @@ test("config parser preserves permission order while rejecting unknown top-level } }) +test("provider model limits can specify token fields independently", () => { + const config = ConfigParse.schema( + ConfigV1.Info, + { + provider: { + custom: { + models: { + "context-only": { + limit: { + context: 1_000_000, + }, + }, + "output-only": { + limit: { + output: 16_384, + }, + }, + "input-only": { + limit: { + input: 512_000, + }, + }, + }, + }, + }, + }, + "test", + ) + + expect(config.provider?.custom.models?.["context-only"]?.limit).toEqual({ context: 1_000_000 }) + expect(config.provider?.custom.models?.["output-only"]?.limit).toEqual({ output: 16_384 }) + expect(config.provider?.custom.models?.["input-only"]?.limit).toEqual({ input: 512_000 }) +}) + // MCP config merging tests it.instance("project config can override MCP server enabled status", () =>