( message: UserMessage, )
| 1675 | * When tool search is disabled, we need to remove these blocks to avoid API errors. |
| 1676 | */ |
| 1677 | export function stripToolReferenceBlocksFromUserMessage( |
| 1678 | message: UserMessage, |
| 1679 | ): UserMessage { |
| 1680 | const content = message.message.content |
| 1681 | if (!Array.isArray(content)) { |
| 1682 | return message |
| 1683 | } |
| 1684 | |
| 1685 | const hasToolReference = content.some( |
| 1686 | block => |
| 1687 | block.type === 'tool_result' && |
| 1688 | Array.isArray(block.content) && |
| 1689 | block.content.some(isToolReferenceBlock), |
| 1690 | ) |
| 1691 | |
| 1692 | if (!hasToolReference) { |
| 1693 | return message |
| 1694 | } |
| 1695 | |
| 1696 | return { |
| 1697 | ...message, |
| 1698 | message: { |
| 1699 | ...message.message, |
| 1700 | content: content.map(block => { |
| 1701 | if (block.type !== 'tool_result' || !Array.isArray(block.content)) { |
| 1702 | return block |
| 1703 | } |
| 1704 | |
| 1705 | // Filter out tool_reference blocks from tool_result content |
| 1706 | const filteredContent = block.content.filter( |
| 1707 | c => !isToolReferenceBlock(c), |
| 1708 | ) |
| 1709 | |
| 1710 | // If all content was tool_reference blocks, replace with a placeholder |
| 1711 | if (filteredContent.length === 0) { |
| 1712 | return { |
| 1713 | ...block, |
| 1714 | content: [ |
| 1715 | { |
| 1716 | type: 'text' as const, |
| 1717 | text: '[Tool references removed - tool search not enabled]', |
| 1718 | }, |
| 1719 | ], |
| 1720 | } |
| 1721 | } |
| 1722 | |
| 1723 | return { |
| 1724 | ...block, |
| 1725 | content: filteredContent, |
| 1726 | } |
| 1727 | }), |
| 1728 | }, |
| 1729 | } |
| 1730 | } |
| 1731 | |
| 1732 | /** |
| 1733 | * Strips the 'caller' field from tool_use blocks in an assistant message. |
no test coverage detected