( msg: AssistantMessage | NormalizedAssistantMessage, breakdown: MessageBreakdown, )
| 782 | } |
| 783 | |
| 784 | function processAssistantMessage( |
| 785 | msg: AssistantMessage | NormalizedAssistantMessage, |
| 786 | breakdown: MessageBreakdown, |
| 787 | ): void { |
| 788 | // Process each content block individually |
| 789 | const contentBlocks = Array.isArray(msg.message.content) ? msg.message.content : [] |
| 790 | for (const block of contentBlocks) { |
| 791 | const blockStr = jsonStringify(block) |
| 792 | const blockTokens = roughTokenCountEstimation(blockStr) |
| 793 | |
| 794 | if (typeof block !== 'string' && 'type' in block && block.type === 'tool_use') { |
| 795 | breakdown.toolCallTokens += blockTokens |
| 796 | const toolName = ('name' in block ? block.name : undefined) || 'unknown' |
| 797 | breakdown.toolCallsByType.set( |
| 798 | toolName, |
| 799 | (breakdown.toolCallsByType.get(toolName) || 0) + blockTokens, |
| 800 | ) |
| 801 | } else { |
| 802 | // Text blocks or other non-tool content |
| 803 | breakdown.assistantMessageTokens += blockTokens |
| 804 | } |
| 805 | } |
| 806 | } |
| 807 | |
| 808 | function processUserMessage( |
| 809 | msg: UserMessage | NormalizedUserMessage, |
no test coverage detected