Ë
    uPêj  ã                   óR   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	  G d„ de«      Z
y	)
z!
A2A Streaming Response Iterator
é    )ÚFinal)ÚBaseModelResponseIterator)ÚGenericStreamingChunkÚModelResponseStreamé   )Úextract_text_from_a2a_responsec                   óh   ‡ — e Zd ZdZ	 	 ddededz  defˆ fd„Zdedee	z  fd	„Z
dededz  fd
„Zˆ xZS )ÚA2AModelResponseIteratorz€
    Iterator for parsing A2A streaming responses.

    Converts A2A JSON-RPC streaming chunks to OpenAI-compatible format.
    Úsync_streamÚ	json_modeNÚmodelc                 ó8   •— t         ‰| �  |||¬«       || _        y )N)Ústreaming_responser   r   )ÚsuperÚ__init__r   )Úselfr   r   r   r   Ú	__class__s        €úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/a2a/chat/streaming_iterator.pyr   z!A2AModelResponseIterator.__init__   s)   ø€ ô 	‰ÑØ1Ø#Øð 	ô 	
ð
 ˆ�
ó    ÚchunkÚreturnc           	      ó¸   — 	 t        |«      }| j                  |«      }t        |t        |«      |xs dddd¬«      S # t        $ r t        dddddd¬«      cY S w xY w)aQ  
        Parse A2A streaming chunk to OpenAI format.

        A2A chunk format:
        {
            "jsonrpc": "2.0",
            "id": "request-id",
            "result": {
                "message": {
                    "parts": [{"kind": "text", "text": "content"}]
                }
            }
        }

        Or for tasks:
        {
            "jsonrpc": "2.0",
            "result": {
                "kind": "task",
                "status": {"state": "running"},
                "artifacts": [{"parts": [{"kind": "text", "text": "content"}]}]
            }
        }
        Ú Nr   )ÚtextÚis_finishedÚfinish_reasonÚusageÚindexÚtool_useF)r   Ú_get_finish_reasonr   ÚboolÚ	Exception)r   r   r   r   s       r   Úchunk_parserz%A2AModelResponseIterator.chunk_parser"   s~   € ð2	ä8¸Ó?ˆDð $(×#:Ñ#:¸5Ó#AˆMô )ØÜ  Ó/Ø+Ò1¨rØØØôð øô ò 		ä(ØØ!Ø ØØØôò ð		ús   ‚9< ¼AÁAc                 óî   — |j                  di «      }t        |t        «      r?|j                  di «      }t        |t        «      r|j                  d«      }|dk(  ry|dk(  ry|j                  d«      du ryy	)
z$Extract finish reason from A2A chunkÚresultÚstatusÚstateÚ	completedÚstopÚfailedÚdoneTN)ÚgetÚ
isinstanceÚdict)r   r   r%   r&   r'   s        r   r    z+A2AModelResponseIterator._get_finish_reasonV   su   € àŸ	™	 (¨BÓ/ˆô �fœdÔ#Ø"ŸJ™J x°Ó4ˆFÜ˜&¤$Ô'Ø%Ÿz™z¨'Ó2�Ø˜KÒ'Ø!Ø˜hÒ&Ø!ð �9‰9�VÓ Ñ$Øàr   )Fz	a2a/agent)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   Ústrr   r.   r   r   r#   r    Ú__classcell__)r   s   @r   r
   r
      si   ø„ ñð "'Ø ñð ðð ˜$‘;ð	ð
 õð2 $ð 2Ð+@ÐCVÑ+Vó 2ðh¨ð °°t±÷ r   r
   N)r2   Útypingr   Ú)litellm.llms.base_llm.base_model_iteratorr   Úlitellm.types.utilsr   r   Úcommon_utilsr   r
   © r   r   ú<module>r:      s'   ðñõ å Oß Jå 9ô[Ð8õ [r   