Skip to content

Commit d89b567

Browse files
authored
fix: add transform case for gemini if mcp tool has missing array items (anomalyco#5846)
1 parent 34eb03f commit d89b567

2 files changed

Lines changed: 28 additions & 0 deletions

File tree

packages/opencode/src/provider/transform.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,10 @@ export namespace ProviderTransform {
424424
result.required = result.required.filter((field: any) => field in result.properties)
425425
}
426426

427+
if (result.type === "array" && result.items == null) {
428+
result.items = {}
429+
}
430+
427431
return result
428432
}
429433

packages/opencode/test/provider/transform.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,30 @@ describe("ProviderTransform.maxOutputTokens", () => {
167167
})
168168
})
169169

170+
describe("ProviderTransform.schema - gemini array items", () => {
171+
test("adds missing items for array properties", () => {
172+
const geminiModel = {
173+
providerID: "google",
174+
api: {
175+
id: "gemini-3-pro",
176+
},
177+
} as any
178+
179+
const schema = {
180+
type: "object",
181+
properties: {
182+
nodes: { type: "array" },
183+
edges: { type: "array", items: { type: "string" } },
184+
},
185+
} as any
186+
187+
const result = ProviderTransform.schema(geminiModel, schema) as any
188+
189+
expect(result.properties.nodes.items).toBeDefined()
190+
expect(result.properties.edges.items.type).toBe("string")
191+
})
192+
})
193+
170194
describe("ProviderTransform.message - DeepSeek reasoning content", () => {
171195
test("DeepSeek with tool calls includes reasoning_content in providerOptions", () => {
172196
const msgs = [

0 commit comments

Comments
 (0)