MCPcopy Create free account
hub / github.com/IIIIQIIII/claude-code / filterTrailingThinkingFromLastAssistant

Function filterTrailingThinkingFromLastAssistant

src/utils/messages.ts:4781–4828  ·  view source on GitHub ↗

* Filter trailing thinking blocks from the last message if it's an assistant message. * The API doesn't allow assistant messages to end with thinking/redacted_thinking blocks.

(
  messages: (UserMessage | AssistantMessage)[],
)

Source from the content-addressed store, hash-verified

4779 * The API doesn't allow assistant messages to end with thinking/redacted_thinking blocks.
4780 */
4781function filterTrailingThinkingFromLastAssistant(
4782 messages: (UserMessage | AssistantMessage)[],
4783): (UserMessage | AssistantMessage)[] {
4784 const lastMessage = messages.at(-1)
4785 if (!lastMessage || lastMessage.type !== 'assistant') {
4786 // Last message is not assistant, nothing to filter
4787 return messages
4788 }
4789
4790 const content = lastMessage.message.content
4791 const lastBlock = content.at(-1)
4792 if (!lastBlock || !isThinkingBlock(lastBlock)) {
4793 return messages
4794 }
4795
4796 // Find last non-thinking block
4797 let lastValidIndex = content.length - 1
4798 while (lastValidIndex >= 0) {
4799 const block = content[lastValidIndex]
4800 if (!block || !isThinkingBlock(block)) {
4801 break
4802 }
4803 lastValidIndex--
4804 }
4805
4806 logEvent('tengu_filtered_trailing_thinking_block', {
4807 messageUUID:
4808 lastMessage.uuid as AnalyticsMetadata_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,
4809 blocksRemoved: content.length - lastValidIndex - 1,
4810 remainingBlocks: lastValidIndex + 1,
4811 })
4812
4813 // Insert placeholder if all blocks were thinking
4814 const filteredContent =
4815 lastValidIndex < 0
4816 ? [{ type: 'text' as const, text: '[No message content]', citations: [] }]
4817 : content.slice(0, lastValidIndex + 1)
4818
4819 const result = [...messages]
4820 result[messages.length - 1] = {
4821 ...lastMessage,
4822 message: {
4823 ...lastMessage.message,
4824 content: filteredContent,
4825 },
4826 }
4827 return result
4828}
4829
4830/**
4831 * Check if an assistant message has only whitespace-only text content blocks.

Callers 1

normalizeMessagesForAPIFunction · 0.85

Calls 2

isThinkingBlockFunction · 0.85
logEventFunction · 0.85

Tested by

no test coverage detected