mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 02:05:22 -04:00
fix: merging consecutive user messages corrupts multimodal (image) content (#1277)
* fix: preserve multimodal content blocks when merging consecutive user messages * test: consecutive user-message merge keeps multimodal image blocks
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
"""Regression: merging consecutive user messages must not str() multimodal content."""
|
||||
|
||||
from src.llm_core import _sanitize_llm_messages
|
||||
|
||||
|
||||
def test_multimodal_user_message_keeps_image_block_when_merged():
|
||||
image_msg = {"role": "user", "content": [
|
||||
{"type": "text", "text": "look at this"},
|
||||
{"type": "image_url", "image_url": {"url": "data:image/png;base64,AAAA"}},
|
||||
]}
|
||||
tool_result = {"role": "user", "content": "Tool result: 42"}
|
||||
out = _sanitize_llm_messages([image_msg, tool_result])
|
||||
|
||||
# The two consecutive user messages collapse into one...
|
||||
assert len(out) == 1
|
||||
content = out[0]["content"]
|
||||
# ...and the image block survives (it used to be str()-ed into a repr).
|
||||
assert isinstance(content, list)
|
||||
assert any(b.get("type") == "image_url" for b in content)
|
||||
assert content[-1] == {"type": "text", "text": "Tool result: 42"}
|
||||
|
||||
|
||||
def test_string_only_user_merge_unchanged():
|
||||
a = {"role": "user", "content": "first"}
|
||||
b = {"role": "user", "content": "second"}
|
||||
out = _sanitize_llm_messages([a, b])
|
||||
assert len(out) == 1
|
||||
assert out[0]["content"] == "first\n\nsecond"
|
||||
Reference in New Issue
Block a user