Research_Agent / phidata /phi /utils /message.py
zykrix
Re-added phidata as a normal folder (final fix)
c96b98a
Raw
History Blame Contribute Delete
1.74 kB
from typing import Dict, List, Union
from phi.model.message import Message
def get_text_from_message(message: Union[List, Dict, str, Message]) -> str:
"""Return the user texts from the message"""
if isinstance(message, str):
return message
if isinstance(message, list):
text_messages = []
if len(message) == 0:
return ""
if "type" in message[0]:
for m in message:
m_type = m.get("type")
if m_type is not None and isinstance(m_type, str):
m_value = m.get(m_type)
if m_value is not None and isinstance(m_value, str):
if m_type == "text":
text_messages.append(m_value)
# if m_type == "image_url":
# text_messages.append(f"Image: {m_value}")
# else:
# text_messages.append(f"{m_type}: {m_value}")
elif "role" in message[0]:
for m in message:
m_role = m.get("role")
if m_role is not None and isinstance(m_role, str):
m_content = m.get("content")
if m_content is not None and isinstance(m_content, str):
if m_role == "user":
text_messages.append(m_content)
if len(text_messages) > 0:
return "\n".join(text_messages)
if isinstance(message, dict):
if "content" in message:
return get_text_from_message(message["content"])
if isinstance(message, Message) and message.content is not None:
return get_text_from_message(message.content)
return ""