diff --git a/packages/core/src/model-registry.ts b/packages/core/src/model-registry.ts index 583c594..0713195 100644 --- a/packages/core/src/model-registry.ts +++ b/packages/core/src/model-registry.ts @@ -138,8 +138,9 @@ const ALL_MODEL_DEFINITIONS: OpencodeModelDefinitions = { limit: { context: 250000, output: 64000 }, modalities: DEFAULT_MODALITIES, variants: { - low: { disabled: true }, - high: { disabled: true }, + low: { thinkingConfig: { thinkingBudget: 8192 } }, + medium: { thinkingConfig: { thinkingBudget: 16384 } }, + high: { thinkingConfig: { thinkingBudget: 32768 } }, }, }, ), @@ -151,8 +152,9 @@ const ALL_MODEL_DEFINITIONS: OpencodeModelDefinitions = { limit: { context: 250000, output: 64000 }, modalities: DEFAULT_MODALITIES, variants: { - low: { disabled: true }, - high: { disabled: true }, + low: { thinkingConfig: { thinkingBudget: 8192 } }, + medium: { thinkingConfig: { thinkingBudget: 16384 } }, + high: { thinkingConfig: { thinkingBudget: 32768 } }, }, }, ), diff --git a/packages/opencode/src/plugin/config/models.test.ts b/packages/opencode/src/plugin/config/models.test.ts index 6770824..1a52085 100644 --- a/packages/opencode/src/plugin/config/models.test.ts +++ b/packages/opencode/src/plugin/config/models.test.ts @@ -58,15 +58,17 @@ describe('OPENCODE_MODEL_DEFINITIONS', () => { }) }) - it('disables unsupported automatic Claude budget variants', () => { + it('defines Claude thinking budget variants', () => { expect(getModel('antigravity-claude-opus-4-6-thinking').variants).toEqual({ - low: { disabled: true }, - high: { disabled: true }, + low: { thinkingConfig: { thinkingBudget: 8192 } }, + medium: { thinkingConfig: { thinkingBudget: 16384 } }, + high: { thinkingConfig: { thinkingBudget: 32768 } }, }) expect(getModel('antigravity-claude-sonnet-4-6-thinking').variants).toEqual( { - low: { disabled: true }, - high: { disabled: true }, + low: { thinkingConfig: { thinkingBudget: 8192 } }, + medium: { thinkingConfig: { thinkingBudget: 16384 } }, + high: { thinkingConfig: { thinkingBudget: 32768 } }, }, ) }) diff --git a/packages/opencode/src/plugin/request.test.ts b/packages/opencode/src/plugin/request.test.ts index 35516e5..9bd2c51 100644 --- a/packages/opencode/src/plugin/request.test.ts +++ b/packages/opencode/src/plugin/request.test.ts @@ -2334,6 +2334,59 @@ describe('request.ts', () => { expect(serialized).toContain('[Continue]') }) + it.each([ + ['antigravity-claude-sonnet-4-6-thinking', 'claude-sonnet-4-6', 8192], + ['antigravity-claude-sonnet-4-6-thinking', 'claude-sonnet-4-6', 16384], + ['antigravity-claude-sonnet-4-6-thinking', 'claude-sonnet-4-6', 32768], + [ + 'antigravity-claude-opus-4-6-thinking', + 'claude-opus-4-6-thinking', + 8192, + ], + [ + 'antigravity-claude-opus-4-6-thinking', + 'claude-opus-4-6-thinking', + 16384, + ], + [ + 'antigravity-claude-opus-4-6-thinking', + 'claude-opus-4-6-thinking', + 32768, + ], + ])('maps Claude variant budget %s -> %s with thinkingBudget %d on Antigravity wire', (requestedModel, wireModel, thinkingBudget) => { + const result = prepareAntigravityRequest( + `https://generativelanguage.googleapis.com/v1beta/models/${requestedModel}:generateContent`, + { + method: 'POST', + body: JSON.stringify({ + contents: [], + generationConfig: {}, + providerOptions: { + google: { thinkingConfig: { thinkingBudget } }, + }, + }), + }, + mockAccessToken, + mockProjectId, + undefined, + 'antigravity', + ) + const wrapped = JSON.parse(result.init.body as string) + expect(result.effectiveModel).toBe(wireModel) + expect(wrapped.model).toBe(wireModel) + expect(wrapped.request.generationConfig.thinkingConfig).toEqual({ + includeThoughts: true, + thinkingBudget, + }) + expect( + wrapped.request.generationConfig.thinkingConfig, + ).not.toHaveProperty('thinkingLevel') + expect( + wrapped.request.generationConfig.thinkingConfig, + ).not.toHaveProperty('thinking_budget') + expect(wrapped.request.generationConfig.maxOutputTokens).toBe(64000) + }) + it('maps Gemini 3.5 Flash medium variant to the live Antigravity medium-tier model', () => { const result = prepareAntigravityRequest( 'https://generativelanguage.googleapis.com/v1beta/models/antigravity-gemini-3.5-flash:generateContent',