Skip to content

Filter out empty messages from LLM prompt construction#3967

Merged
lukemelia merged 3 commits intomainfrom
claude/remove-empty-llm-messages-FNkEO
Mar 30, 2026
Merged

Filter out empty messages from LLM prompt construction#3967
lukemelia merged 3 commits intomainfrom
claude/remove-empty-llm-messages-FNkEO

Conversation

@IanCal
Copy link
Copy Markdown
Contributor

@IanCal IanCal commented Feb 10, 2026

Empty messages (with no content and no tool calls) could be sent to the
LLM, which is wasteful and potentially causes issues. This change:

  • Skips assistant messages with empty body and no tool calls during
    history construction (matching the existing guard on user messages)
  • Adds a safety filter (hasMessageContent) on the final messages array
    to catch any empty messages from any source, while preserving
    assistant messages with tool calls and tool response messages

CS-10116

https://claude.ai/code/session_01JMzG85yR6uQUXVfnUTegXz

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 10, 2026

Host Test Results

    1 files  ±0      1 suites  ±0   2h 13m 39s ⏱️ + 1m 30s
2 062 tests ±0  2 047 ✅ ±0  15 💤 ±0  0 ❌ ±0 
2 077 runs  ±0  2 062 ✅ ±0  15 💤 ±0  0 ❌ ±0 

Results for commit 717e725. ± Comparison against base commit 3ab3d2c.

♻️ This comment has been updated with latest results.

@IanCal
Copy link
Copy Markdown
Contributor Author

IanCal commented Feb 10, 2026

@claude iterate to fix the linting and test issues. One of the matrix tests is failing because there is an expect for one attached file that should be checking the count is 2.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request filters out empty messages from LLM prompt construction to prevent wasteful and potentially problematic API calls. The change modifies the history construction logic to skip assistant messages that have both an empty body and no tool calls, matching the existing filtering behavior for user messages.

Changes:

  • Modified buildPromptForModel to conditionally add assistant messages only when they have content or tool calls
  • Added comprehensive test coverage for empty message filtering scenarios

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

File Description
packages/runtime-common/ai/prompt.ts Updated assistant message construction to filter out empty messages while preserving messages with tool calls
packages/ai-bot/tests/prompt-construction-test.ts Added three new tests to verify empty message filtering for assistant and user messages

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

claude added 2 commits March 30, 2026 15:29
Empty messages (with no content and no tool calls) could be sent to the
LLM, which is wasteful and potentially causes issues. This change:

- Skips assistant messages with empty body and no tool calls during
  history construction (matching the existing guard on user messages)
- Adds a safety filter (hasMessageContent) on the final messages array
  to catch any empty messages from any source, while preserving
  assistant messages with tool calls and tool response messages

CS-10116

https://claude.ai/code/session_01JMzG85yR6uQUXVfnUTegXz
- Remove hasMessageContent filter: it was redundant with the inline
  guards already present for each message type and would silently
  mask construction bugs rather than surfacing them
- Fix test: use correct field name `id` instead of `toolCallId` for
  encoded command requests (matching all other tests in the file)
- Add tool result assertions to verify the assistant+tool message
  pairing is preserved when assistant body is empty

https://claude.ai/code/session_01JMzG85yR6uQUXVfnUTegXz
@lukemelia lukemelia force-pushed the claude/remove-empty-llm-messages-FNkEO branch from 01b3b74 to f3c72fb Compare March 30, 2026 15:29
@lukemelia lukemelia merged commit ffa3bfd into main Mar 30, 2026
202 of 203 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants