in src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py [0:0]
def format_content(parts: list[types.Part] | str) -> str:
"""Formats content as a string, handling both text and multimedia inputs."""
# Check if parts is empty
if not parts:
return ""
# Handle case where parts might be a string
if isinstance(parts, str):
return parts
markdown = ""
text = ""
for part in parts:
# Convert to Part object if it's a dictionary
if isinstance(part, dict):
part = types.Part.model_validate(part)
if part.text:
text = part.text
# Handle inline data (images and other media)
elif part.inline_data:
if "image" in part.inline_data.mime_type:
# For images, create an HTML img tag
image_data = base64.b64encode(part.inline_data.data).decode("utf-8")
image_markdown = f'<img src="data:{part.inline_data.mime_type};base64,{image_data}" width="100">'
markdown = (
markdown
+ f"""
- {image_markdown}
"""
)
else:
# For other media types
markdown = markdown + f"- Local media: {part.inline_data.mime_type}\n"
# Handle file data (GCS files)
elif part.file_data:
if part.file_data.mime_type and "image" in part.file_data.mime_type:
# GCS images
image_url = gs_uri_to_https_url(part.file_data.file_uri)
image_markdown = f'<img src="{image_url}" width="100">'
markdown = (
markdown
+ f"""
- {image_markdown}
"""
)
else:
# GCS other media
image_url = gs_uri_to_https_url(part.file_data.file_uri)
markdown = (
markdown + f"- Remote media: "
f"[{part.file_data.file_uri}]({image_url})\n"
)
markdown = (
markdown
+ f"""
{text}"""
)
return markdown