Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion aider/coders/base_coder.py
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,8 @@ def get_read_only_files_content(self):
def get_cur_message_text(self):
text = ""
for msg in self.cur_messages:
text += msg["content"] + "\n"
if msg["content"] is not None:
text += msg["content"] + "\n"
return text

def get_ident_mentions(self, text):
Expand Down
37 changes: 37 additions & 0 deletions tests/basic/test_coder.py
Original file line number Diff line number Diff line change
Expand Up @@ -1433,6 +1433,43 @@ def test_architect_coder_auto_accept_false_rejected(self):
# (because user rejected the changes)
mock_editor.run.assert_not_called()

def test_get_cur_message_text_with_none_content(self):
"""Test that get_cur_message_text handles None content gracefully.

This can happen when assistant messages have no text content
(e.g., image-only responses or refusals).
"""
with GitTemporaryDirectory():
io = InputOutput(yes=True)
coder = Coder.create(self.GPT35, "diff", io=io)

# Test with mixed None and string content
coder.cur_messages = [
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": None}, # Image-only or refusal
{"role": "user", "content": "Continue"},
]

# Should not raise TypeError
result = coder.get_cur_message_text()
self.assertEqual(result, "Hello\nContinue\n")

def test_get_cur_message_text_all_none(self):
"""Test that get_cur_message_text handles all None content."""
with GitTemporaryDirectory():
io = InputOutput(yes=True)
coder = Coder.create(self.GPT35, "diff", io=io)

# Test with all None content
coder.cur_messages = [
{"role": "assistant", "content": None},
{"role": "assistant", "content": None},
]

# Should not raise and return empty string
result = coder.get_cur_message_text()
self.assertEqual(result, "")


if __name__ == "__main__":
unittest.main()