mirror of
https://github.com/RooVetGit/Roo-Code.git
synced 2026-09-10 22:41:14 +00:00
fix: handle undefined/null/non-array content in filterNonAnthropicBlocks
- Add guard clause to check if message.content is undefined, null, or not an array - Prevents "Cannot read properties of undefined (reading filter)" error - Add comprehensive tests for edge cases (undefined, null, non-array, empty array) - Fixes issue reported in Reddit where Anthropic API calls would fail unexpectedly
This commit is contained in:
parent
953c7773c0
commit
33687d9a04
2 changed files with 61 additions and 0 deletions
|
|
@ -140,5 +140,61 @@ describe("anthropic-filter", () => {
|
|||
expect(result).toHaveLength(1)
|
||||
expect(result[0].content).toEqual([{ type: "text", text: "Valid text" }])
|
||||
})
|
||||
|
||||
it("should handle messages with undefined content gracefully", () => {
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: undefined as any },
|
||||
{ role: "user", content: "Continue" },
|
||||
]
|
||||
|
||||
const result = filterNonAnthropicBlocks(messages)
|
||||
|
||||
expect(result).toHaveLength(2)
|
||||
expect(result[0].content).toBe("Hello")
|
||||
expect(result[1].content).toBe("Continue")
|
||||
})
|
||||
|
||||
it("should handle messages with null content gracefully", () => {
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: null as any },
|
||||
{ role: "user", content: "Continue" },
|
||||
]
|
||||
|
||||
const result = filterNonAnthropicBlocks(messages)
|
||||
|
||||
expect(result).toHaveLength(2)
|
||||
expect(result[0].content).toBe("Hello")
|
||||
expect(result[1].content).toBe("Continue")
|
||||
})
|
||||
|
||||
it("should handle messages with non-array content gracefully", () => {
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: { invalid: "object" } as any },
|
||||
{ role: "user", content: "Continue" },
|
||||
]
|
||||
|
||||
const result = filterNonAnthropicBlocks(messages)
|
||||
|
||||
expect(result).toHaveLength(2)
|
||||
expect(result[0].content).toBe("Hello")
|
||||
expect(result[1].content).toBe("Continue")
|
||||
})
|
||||
|
||||
it("should handle empty array content", () => {
|
||||
const messages: Anthropic.Messages.MessageParam[] = [
|
||||
{ role: "user", content: "Hello" },
|
||||
{ role: "assistant", content: [] },
|
||||
{ role: "user", content: "Continue" },
|
||||
]
|
||||
|
||||
const result = filterNonAnthropicBlocks(messages)
|
||||
|
||||
expect(result).toHaveLength(2)
|
||||
expect(result[0].content).toBe("Hello")
|
||||
expect(result[1].content).toBe("Continue")
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -32,6 +32,11 @@ export function filterNonAnthropicBlocks(
|
|||
return message
|
||||
}
|
||||
|
||||
// Guard against undefined, null, or non-array content
|
||||
if (!message.content || !Array.isArray(message.content)) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
const filteredContent = message.content.filter((block) => {
|
||||
const blockType = (block as { type: string }).type
|
||||
// Only keep block types that Anthropic recognizes
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue