Fix KeyError when accessing content in messages with function calls #5158
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
End-user friendly description of the problem this fixes or functionality that this introduces
Fixes a "message['content'] key" error
Give a summary of what the PR does, explaining any non-trivial design decisions
Fixes #5142
The error occurs when a message in the messages list doesn't have a 'content' key. This can happen with OpenRouter when using function calls, as some messages might only have function call information without content.
Let me summarize what OpenHands did to fix the issue ("I" = OpenHands):
I identified that the error was occurring in the convert_fncall_messages_to_non_fncall_messages function when trying to access the 'content' key from messages that only had function calls.
I wrote a test case to reproduce the issue, which showed that messages with function calls but no content were causing a KeyError.
I fixed the issue by modifying the code to use message.get('content') instead of message['content'] in three places:
In the main message processing loop
In the system message handling
In the assistant message handling
The fix ensures that messages without a 'content' key are handled gracefully, which is important when dealing with function calls from OpenRouter or other providers that might not include content in their function call messages.
To run this PR locally, use the following command: