diff --git a/apps/server/src/provider/agentContextBudget.json b/apps/server/src/provider/agentContextBudget.json index 43b48e60b6314..d714a45324d72 100644 --- a/apps/server/src/provider/agentContextBudget.json +++ b/apps/server/src/provider/agentContextBudget.json @@ -1,5 +1,5 @@ { "claudeSystemAppendBytes": 5930, "codexAdditionalContextBytes": 7324, - "mcpToolListJsonBytes": 49792 + "mcpToolListJsonBytes": 50736 } 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); + } +}); 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(