From 92aac081b788920ffc46ffc35b6141b83a381f31 Mon Sep 17 00:00:00 2001 From: Dhairya Date: Thu, 12 Nov 2026 16:46:36 +0530 Subject: [PATCH 1/2] test(contracts): ModelSelection gives every field a JSON Schema type --- packages/contracts/src/modelSelection.test.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/contracts/src/modelSelection.test.ts b/packages/contracts/src/modelSelection.test.ts index f719d82c511f3..85c5f59cf656d 100644 --- a/packages/contracts/src/modelSelection.test.ts +++ b/packages/contracts/src/modelSelection.test.ts @@ -70,3 +70,13 @@ it.effect( assert.deepStrictEqual(encoded.options, decoded.options); }), ); + +it("ModelSelection gives every field a JSON Schema type, which Vertex AI requires of tool parameters", () => { + const { properties } = Schema.toJsonSchemaDocument(ModelSelection).schema as { + readonly properties: Record }>; + }; + for (const [field, schema] of Object.entries(properties)) { + const types = schema.anyOf?.map((branch) => branch.type) ?? [schema.type]; + assert.notInclude(types, undefined, field); + } +}); From f5fc2834e9cef49b36cc1397b1202e2a46ed64cf Mon Sep 17 00:00:00 2001 From: Dhairya Date: Thu, 12 Nov 2026 16:48:38 +0530 Subject: [PATCH 2/2] fix(contracts): MCP model selection fields declare their JSON Schema types --- apps/server/src/provider/agentContextBudget.json | 2 +- packages/contracts/src/modelSelection.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/server/src/provider/agentContextBudget.json b/apps/server/src/provider/agentContextBudget.json index e166af3f78340..7a47028c2a6df 100644 --- a/apps/server/src/provider/agentContextBudget.json +++ b/apps/server/src/provider/agentContextBudget.json @@ -1,5 +1,5 @@ { "claudeSystemAppendBytes": 5597, "codexAdditionalContextBytes": 7327, - "mcpToolListJsonBytes": 48126 + "mcpToolListJsonBytes": 49070 } diff --git a/packages/contracts/src/modelSelection.ts b/packages/contracts/src/modelSelection.ts index e1ee73cfcbafa..ef10e20a56692 100644 --- a/packages/contracts/src/modelSelection.ts +++ b/packages/contracts/src/modelSelection.ts @@ -13,10 +13,10 @@ const ModelSelectionWire = Schema.Struct({ }); const ModelSelectionSource = Schema.Struct({ - provider: Schema.optional(Schema.Unknown), - instanceId: Schema.optional(Schema.Unknown), - model: Schema.Unknown, - options: Schema.optional(Schema.Unknown), + provider: Schema.optional(Schema.NullOr(Schema.String)), + instanceId: Schema.optional(Schema.String), + model: Schema.String, + options: Schema.optional(Schema.toEncoded(ProviderOptionSelections)), }); export const ModelSelection = ModelSelectionSource.pipe(