fix: handle nested array items for Gemini schema validation (#11952)

This commit is contained in:
Muhammad Mugni Hadi
2026-02-03 22:24:52 +07:00
committed by GitHub
parent 76381f33d5
commit 3741516fe3
2 changed files with 122 additions and 2 deletions

View File

@@ -293,6 +293,119 @@ describe("ProviderTransform.schema - gemini array items", () => {
})
})
describe("ProviderTransform.schema - gemini nested array items", () => {
const geminiModel = {
providerID: "google",
api: {
id: "gemini-3-pro",
},
} as any
test("adds type to 2D array with empty inner items", () => {
const schema = {
type: "object",
properties: {
values: {
type: "array",
items: {
type: "array",
items: {}, // Empty items object
},
},
},
} as any
const result = ProviderTransform.schema(geminiModel, schema) as any
// Inner items should have a default type
expect(result.properties.values.items.items.type).toBe("string")
})
test("adds items and type to 2D array with missing inner items", () => {
const schema = {
type: "object",
properties: {
data: {
type: "array",
items: { type: "array" }, // No items at all
},
},
} as any
const result = ProviderTransform.schema(geminiModel, schema) as any
expect(result.properties.data.items.items).toBeDefined()
expect(result.properties.data.items.items.type).toBe("string")
})
test("handles deeply nested arrays (3D)", () => {
const schema = {
type: "object",
properties: {
matrix: {
type: "array",
items: {
type: "array",
items: {
type: "array",
// No items
},
},
},
},
} as any
const result = ProviderTransform.schema(geminiModel, schema) as any
expect(result.properties.matrix.items.items.items).toBeDefined()
expect(result.properties.matrix.items.items.items.type).toBe("string")
})
test("preserves existing item types in nested arrays", () => {
const schema = {
type: "object",
properties: {
numbers: {
type: "array",
items: {
type: "array",
items: { type: "number" }, // Has explicit type
},
},
},
} as any
const result = ProviderTransform.schema(geminiModel, schema) as any
// Should preserve the explicit type
expect(result.properties.numbers.items.items.type).toBe("number")
})
test("handles mixed nested structures with objects and arrays", () => {
const schema = {
type: "object",
properties: {
spreadsheetData: {
type: "object",
properties: {
rows: {
type: "array",
items: {
type: "array",
items: {}, // Empty items
},
},
},
},
},
} as any
const result = ProviderTransform.schema(geminiModel, schema) as any
expect(result.properties.spreadsheetData.properties.rows.items.items.type).toBe("string")
})
})
describe("ProviderTransform.schema - gemini non-object properties removal", () => {
const geminiModel = {
providerID: "google",