fix(d05): remove image_url stripping — model IS multimodal

Docker log proves: 'prefix-caching not supported for multimodal models'
means base image identifies model as multimodal. Our serving_chat.py was
stripping image_url when _is_mm detection returned False (likely because
our custom model_config doesn't expose is_multimodal_model correctly).

Sub168 d05 PASSED with content[374] — they didn't strip images.
Our Sub508 d05 returned HTTP 400 because stripped images broke
parse_chat_messages_futures.

Fix: remove the strip logic entirely. Let images flow through.
This commit is contained in:
Claude
2026-08-10 00:15:06 +00:00
parent 83d633798f
commit 3d5f75fefd

View File

@@ -140,27 +140,10 @@ class OpenAIServingChat(OpenAIServing):
model_config = self.model_config
tokenizer = await self.engine_client.get_tokenizer(lora_request)
# CCCL graceful degradation: strip image_url when not multimodal.
# Handle is_multimodal_model as method, property, or bool.
_is_mm = False
try:
_mm_attr = getattr(model_config, 'is_multimodal_model', False)
_is_mm = _mm_attr() if callable(_mm_attr) else bool(_mm_attr)
except Exception:
pass
if not _is_mm:
for msg in request.messages:
content = msg.get("content") if isinstance(msg, dict) else getattr(msg, "content", None)
if isinstance(content, list):
filtered = [p for p in content
if not (isinstance(p, dict) and p.get("type") == "image_url")]
if len(filtered) < len(content):
if not filtered:
filtered = [{"type": "text", "text": "(image omitted)"}]
if isinstance(msg, dict):
msg["content"] = filtered
else:
msg.content = filtered
# Note: base image identifies this model as multimodal
# (docker log: "--enable-prefix-caching not supported for multimodal models").
# Do NOT strip image_url — let images flow through to the engine.
# Previous strip logic caused d05_multimodal HTTP 400.
conversation, mm_data_future = parse_chat_messages_futures(
request.messages, model_config, tokenizer)