3030- showcase/integrations/langgraph-python/src/agents/multimodal_agent.py
3131"""
3232
33- from __future__ import annotations
34-
3533import base64
3634import io
3735from textwrap import dedent
38- from typing import Any
36+ from typing import Any , Optional , Tuple
3937
4038from agent_framework import Agent , BaseChatClient
4139from agent_framework_ag_ui import AgentFrameworkAgent
@@ -101,7 +99,7 @@ def _extract_pdf_text(b64: str) -> str:
10199 return ""
102100
103101
104- def _classify_attachment_part (part : Any ) -> tuple [ str , str , str ] | None :
102+ def _classify_attachment_part (part : Any ) -> Optional [ Tuple [ str , str , str ]] :
105103 """Inspect a content part and return (kind, mime, base64_payload).
106104
107105 ``kind`` is one of ``"image"``, ``"pdf"``, ``"other"``. Returns ``None``
@@ -124,7 +122,7 @@ def _classify_attachment_part(part: Any) -> tuple[str, str, str] | None:
124122
125123 if part_type == "image_url" :
126124 image_url = part .get ("image_url" )
127- url : str | None = None
125+ url : Optional [ str ] = None
128126 if isinstance (image_url , str ):
129127 url = image_url
130128 elif isinstance (image_url , dict ):
@@ -217,14 +215,12 @@ def _flatten_messages(self, messages: Any) -> Any:
217215 rewritten .append ({** message , "content" : new_parts })
218216 return rewritten
219217
220- async def run (self , * args : Any , ** kwargs : Any ) -> Any : # type: ignore[override]
221- # AG-UI may hand us messages via a positional or keyword argument;
222- # normalize both shapes before delegating to the base implementation.
223- if "messages" in kwargs :
224- kwargs ["messages" ] = self ._flatten_messages (kwargs ["messages" ])
225- elif args and isinstance (args [0 ], list ):
226- args = (self ._flatten_messages (args [0 ]), * args [1 :])
227- return await super ().run (* args , ** kwargs )
218+ async def run (self , input_data : dict [str , Any ]): # type: ignore[override]
219+ messages = input_data .get ("messages" )
220+ if isinstance (messages , list ):
221+ input_data = {** input_data , "messages" : self ._flatten_messages (messages )}
222+ async for event in super ().run (input_data ):
223+ yield event
228224
229225
230226def create_multimodal_agent (chat_client : BaseChatClient ) -> AgentFrameworkAgent :
0 commit comments