From a2dcf557484a0c86f116b0dfcb83cd0215849811 Mon Sep 17 00:00:00 2001 From: VanyMo <91475099+VanyMo@users.noreply.github.com> Date: Sun, 16 Aug 2026 22:46:25 +0800 Subject: [PATCH] fix: preserve text-only multimodal messages --- slime/utils/data.py | 3 +++ tests/test_filter_long_prompt.py | 30 ++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/slime/utils/data.py b/slime/utils/data.py index adac4b95a..d35c7568e 100644 --- a/slime/utils/data.py +++ b/slime/utils/data.py @@ -160,6 +160,9 @@ def _build_messages(data: dict, prompt_key: str, as_conversation: bool, multimod if multimodal_data is not None: multimodals[mt.placeholder] = (mt, list(multimodal_data)) + if not multimodals: + return prompt + pattern = "(" + "|".join(re.escape(p) for p in multimodals.keys()) + ")" for message in prompt: diff --git a/tests/test_filter_long_prompt.py b/tests/test_filter_long_prompt.py index 803a443e0..6a4841a6e 100644 --- a/tests/test_filter_long_prompt.py +++ b/tests/test_filter_long_prompt.py @@ -18,10 +18,9 @@ import pytest -from slime.utils.data import filter_long_prompt +from slime.utils.data import _build_messages, filter_long_prompt from slime.utils.types import Sample - NUM_GPUS = 0 @@ -110,3 +109,30 @@ def test_no_processor_path_still_preserves_order(): kept = filter_long_prompt(samples, _Tokenizer(), None, max_length=100) assert [s.prompt for s in kept] == ["p0:5", "p2:5"] + + +@pytest.mark.unit +def test_text_only_row_keeps_string_content_with_multimodal_config(): + data = {"prompt": "hello"} + + prompt = _build_messages(data, "prompt", as_conversation=True, multimodal_keys={"image": "images"}) + + assert prompt == [{"role": "user", "content": "hello"}] + + +@pytest.mark.unit +def test_multimodal_placeholder_expansion_is_unchanged(): + data = {"prompt": "look here", "images": ["image.png"]} + + prompt = _build_messages(data, "prompt", as_conversation=True, multimodal_keys={"image": "images"}) + + assert prompt == [ + { + "role": "user", + "content": [ + {"type": "text", "text": "look "}, + {"type": "image", "image": "image.png"}, + {"type": "text", "text": " here"}, + ], + } + ]