fix(memory): skip messages without a content key in message parsers (#5575)
This commit is contained in:
+26
-13
@@ -61,12 +61,18 @@ def ensure_json_instruction(system_prompt, user_prompt):
|
||||
def parse_messages(messages):
|
||||
response = ""
|
||||
for msg in messages:
|
||||
if msg["role"] == "system":
|
||||
response += f"system: {msg['content']}\n"
|
||||
if msg["role"] == "user":
|
||||
response += f"user: {msg['content']}\n"
|
||||
if msg["role"] == "assistant":
|
||||
response += f"assistant: {msg['content']}\n"
|
||||
role = msg.get("role")
|
||||
content = msg.get("content")
|
||||
# Skip messages without textual content (e.g. assistant tool-call
|
||||
# messages that carry `tool_calls` but no `content` key).
|
||||
if content is None:
|
||||
continue
|
||||
if role == "system":
|
||||
response += f"system: {content}\n"
|
||||
elif role == "user":
|
||||
response += f"user: {content}\n"
|
||||
elif role == "assistant":
|
||||
response += f"assistant: {content}\n"
|
||||
return response
|
||||
|
||||
|
||||
@@ -173,12 +179,19 @@ def parse_vision_messages(messages, llm=None, vision_details="auto"):
|
||||
"""
|
||||
returned_messages = []
|
||||
for msg in messages:
|
||||
if msg["role"] == "system":
|
||||
role = msg.get("role")
|
||||
content = msg.get("content")
|
||||
if role == "system":
|
||||
returned_messages.append(msg)
|
||||
continue
|
||||
|
||||
# Skip messages without content (e.g. assistant tool-call messages
|
||||
# that carry `tool_calls` but no `content` key).
|
||||
if content is None:
|
||||
continue
|
||||
|
||||
# Handle message content
|
||||
if isinstance(msg["content"], list):
|
||||
if isinstance(content, list):
|
||||
if llm is None:
|
||||
text_parts = [
|
||||
part["text"] for part in msg["content"]
|
||||
@@ -186,17 +199,17 @@ def parse_vision_messages(messages, llm=None, vision_details="auto"):
|
||||
]
|
||||
if not text_parts:
|
||||
continue
|
||||
returned_messages.append({"role": msg["role"], "content": " ".join(text_parts)})
|
||||
returned_messages.append({"role": role, "content": " ".join(text_parts)})
|
||||
else:
|
||||
description = get_image_description(msg, llm, vision_details)
|
||||
returned_messages.append({"role": msg["role"], "content": description})
|
||||
elif isinstance(msg["content"], dict) and msg["content"].get("type") == "image_url":
|
||||
returned_messages.append({"role": role, "content": description})
|
||||
elif isinstance(content, dict) and content.get("type") == "image_url":
|
||||
if llm is None:
|
||||
continue
|
||||
image_url = msg["content"]["image_url"]["url"]
|
||||
image_url = content["image_url"]["url"]
|
||||
try:
|
||||
description = get_image_description(image_url, llm, vision_details)
|
||||
returned_messages.append({"role": msg["role"], "content": description})
|
||||
returned_messages.append({"role": role, "content": description})
|
||||
except Exception:
|
||||
raise Exception(f"Error while downloading {image_url}.")
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user