Ë
    uPêjM2  ã                   ó†  — U d Z ddlmZmZmZmZ ddlmZmZ ddl	Z	ddl
mZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ dZeed<    eddddeh«      Zeed<    G d„ d«      Z	 	 ddedeeef   deeef   dedz  deeef   dz  deeef   fd„Z	 	 ddedeeef   deeef   dedz  deeef   dz  deeeef      fd„Z y)aÐ  
Handler for A2A to LiteLLM completion bridge.

Routes A2A requests through litellm.acompletion based on custom_llm_provider.

A2A Streaming Events (in order):
1. Task event (kind: "task") - Initial task creation with status "submitted"
2. Status update (kind: "status-update") - Status change to "working"
3. Artifact update (kind: "artifact-update") - Content/artifact delivery
4. Status update (kind: "status-update") - Final status "completed" with final=true
é    )ÚAsyncIteratorÚCallableÚ	CoroutineÚMapping)ÚAnyÚFinalN)Úverbose_logger)Ú!A2ACompletionBridgeTransformationÚA2AStreamingContext)ÚA2AProviderConfigManager)Úmerge_agent_headers)ÚCustomStreamWrapper)ÚModelResponseÚlitellm_a2a_user_api_key_hashÚA2A_USER_API_KEY_HASH_PARAMÚ	is_publicÚ
agent_nameÚagent_idÚagent_card_paramsÚ_AGENT_ONLY_PARAMSc                   óz  — e Zd ZdZedeeef   deeef   dedz  deeef   dz  de	deee
f   fd	„«       Zed
eee
f   deez  fd„«       Ze	 	 dddœdedeee
f   deeef   dedz  deeef   dz  de	deee
f   fd„«       Ze	 	 dddœdedeeef   deeef   dedz  deeef   dz  de	deeee
f      fd„«       Zy)ÚA2ACompletionBridgeHandlerzJ
    Static methods for handling A2A requests via LiteLLM completion.
    ÚparamsÚlitellm_paramsÚapi_baseNÚagent_extra_headersÚstreamÚreturnc                óH  — | j                  di «      }t        j                  |«      }|j                  d«      }|j                  dd«      }|r|j                  |› d�«      s|› d|› �}	n|}	|rt	        j
                  d|	|«       nt	        j
                  d|	|«       |	|||dœ}
|j                  «       D ��ci c]  \  }}|d	vr|t        vr||“Œ }}}|
j                  |«       t        j                  |
|| ¬
«       |rt        ||
j                  d«      ¬«      |
d<   |
S c c}}w )NÚmessageÚcustom_llm_providerÚmodelÚagentú/z6A2A completion bridge streaming: model=%s, api_base=%sz,A2A completion bridge: model=%s, api_base=%s)r"   Úmessagesr   r   )r"   r!   )Úcompletion_paramsÚa2a_messager   Úextra_headers)Údynamic_headersÚstatic_headers)Úgetr
   Úa2a_message_to_openai_messagesÚ
startswithr	   ÚinfoÚitemsr   ÚupdateÚ+apply_forward_metadata_to_completion_paramsr   )r   r   r   r   r   r    Úopenai_messagesr!   r"   Ú
full_modelr&   ÚkÚvÚlitellm_params_to_adds                 ú{/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/a2a_protocol/litellm_completion_bridge/handler.pyÚ_build_completion_paramsz3A2ACompletionBridgeHandler._build_completion_params1   sa  € ð  Ÿ™ I¨rÓ2ˆô "C×!aÑ!aÐbiÓ!jˆð &4×%7Ñ%7Ð8MÓ%NÐØ*×.Ñ.¨w¸Ó@ˆñ  u×'7Ñ'7Ð;NÐ:OÈqÐ8QÔ'RØ/Ð0°°%°Ð9‰JàˆJáÜ×ÑÐ XÐZdÐfnÕoä×ÑÐ NÐPZÐ\dÔeð  Ø'Ø Øñ	4
Ðð '×,Ñ,Ó.÷(
á��1ØÐ8Ñ8¸QÔFXÑ=Xð ˆq‰Dð(
Ðñ (
ð
 	× Ñ Ð!6Ô7ô 	*×UÑUØ/ØØõ	
ñ Ü1DØ 3Ø0×4Ñ4°_ÓEô2Ð˜oÑ.ð
 !Ð ùó+(
s   Â6Dr&   c              ƒ   óR   K  — t        t        «      d   } |di | ¤Žƒ d {  –—† S 7 Œ­w)NÚacompletion© )ÚvarsÚlitellm)r&   Úacompletion_fns     r7   Ú_acompletionz'A2ACompletionBridgeHandler._acompletiono   s4   è ø€ äosÜóp
à
ñpˆñ $Ñ8Ð&7Ñ8×8Ð8Ð8úó   ‚' %¡'F)Ú_skip_a2a_provider_routingÚ
request_idrA   c             ƒ   ó¼  K  — |j                  d«      }|s\t        j                  ||j                  d«      ¬«      }|�4t        j                  d|«       |j                  | ||||¬«      ƒ d{  –—† S t        j                  ||||d¬«      }t        j                  |«      ƒ d{  –—† }	t        j                  |	| ¬	«      }
t        j                  d
| «       |
S 7 Œj7 Œ5­w)a8  
        Handle non-streaming A2A request via litellm.acompletion.

        Args:
            request_id: A2A JSON-RPC request ID
            params: A2A MessageSendParams containing the message
            litellm_params: Agent's litellm_params (custom_llm_provider, model, etc.)
            api_base: API base URL from agent_card_params
            agent_extra_headers: Per-request headers (from x-a2a-{agent}-* rewrite and
                admin extra_headers) to forward on the upstream HTTP call.

        Returns:
            A2A SendMessageResponse dict
        r!   r"   ©r!   r"   Nz!A2A: Using provider config for %s©rB   r   r   r   r   F©r   r   r   r   r   )ÚresponserB   z.A2A completion bridge completed: request_id=%s)r+   r   Úget_provider_configr	   r.   Úhandle_non_streamingr   r8   r?   r
   Úopenai_response_to_a2a_response)rB   r   r   r   r   rA   r!   Úa2a_provider_configr&   rG   Úa2a_responses              r7   rI   z/A2ACompletionBridgeHandler.handle_non_streamingv   s  è ø€ ð0 &4×%7Ñ%7Ð8MÓ%NÐÙ)Ü)A×)UÑ)UØ$7Ø$×(Ñ(¨Ó1ô*Ðð
 #Ð.Ü×#Ñ#Ð$GÐI\Ô]à0×EÑEØ)Ø!Ø%Ø#1Ø(;ð Fó ÷ ð ô $>×#VÑ#VØØ)ØØ 3Øð $Wó $
Ðô !;× GÑ GÐHYÓ Z×Zˆô @×_Ñ_ØØ!ô
ˆô
 	×ÑÐLÈjÔYàÐð7øð" [ús$   ‚A+CÁ-CÁ.6CÂ$CÂ%4CÃCc               ó¼  K  — |j                  d«      }|sct        j                  ||j                  d«      ¬«      }|�;t        j                  d|«       |j                  | ||||¬«      2 3 d{  –—† }|­–— Œt        | |j                  di «      ¬«      }	t        j                  ||||d	¬
«      }
t        j                  |	«      }|­–— t        j                  |	ddd¬«      }|­–— t        j                  |
«      ƒ d{  –—† }d}d}|2 3 d{  –—† }|dz  }d}|�Yt        |d«      rM|j                  rA|j                  d   }t        |d«      r&|j                  r|j                  j                   xs d}|sŒn||z  }Œt7 �Œ6 y7 Œƒ7 Œv6 |rt        j"                  |	|¬«      }|­–— t        j                  |	dd	¬«      }|­–— t        j                  d| |«       y­w)a•  
        Handle streaming A2A request via litellm.acompletion with stream=True.

        Emits proper A2A streaming events:
        1. Task event (kind: "task") - Initial task with status "submitted"
        2. Status update (kind: "status-update") - Status "working"
        3. Artifact update (kind: "artifact-update") - Content delivery
        4. Status update (kind: "status-update") - Final "completed" status

        Args:
            request_id: A2A JSON-RPC request ID
            params: A2A MessageSendParams containing the message
            litellm_params: Agent's litellm_params (custom_llm_provider, model, etc.)
            api_base: API base URL from agent_card_params
            agent_extra_headers: Per-request headers (from x-a2a-{agent}-* rewrite and
                admin extra_headers) to forward on the upstream HTTP call.

        Yields:
            A2A streaming response events
        r!   r"   rD   Nz-A2A: Using provider config for %s (streaming)rE   r    )rB   Úinput_messageTrF   ÚworkingFzProcessing request...)ÚctxÚstateÚfinalÚmessage_textÚ r   é   ÚchoicesÚdelta)rP   ÚtextÚ	completed)rP   rQ   rR   zCA2A completion bridge streaming completed: request_id=%s, chunks=%s)r+   r   rH   r	   r.   Úhandle_streamingr   r   r8   r
   Úcreate_task_eventÚcreate_status_update_eventr?   ÚhasattrrV   rW   ÚcontentÚcreate_artifact_update_event)rB   r   r   r   r   rA   r!   rK   ÚchunkrP   r&   Ú
task_eventÚworking_eventrG   Úaccumulated_textÚchunk_countr^   ÚchoiceÚartifact_eventÚcompleted_events                       r7   rZ   z+A2ACompletionBridgeHandler.handle_streamingµ   s*  è ø€ ð< &4×%7Ñ%7Ð8MÓ%NÐÙ)Ü)A×)UÑ)UØ$7Ø$×(Ñ(¨Ó1ô*Ðð
 #Ð.Ü×#Ñ#Ð$SÐUhÔià#6×#GÑ#GØ)Ø!Ø%Ø#1Ø(;ð $Hó $÷  ð  ˜%ð  ”Kô
 )Ø!Ø Ÿ*™* Y°Ó3ô
ˆô
 $>×#VÑ#VØØ)ØØ 3Øð $Wó $
Ðô >×OÑOÐPSÓTˆ
ØÓô  A×[Ñ[ØØØØ0ô	 
ˆð Óô !;× GÑ GÐHYÓ Z×Zˆð ÐØˆØ#÷ 	,ð 	,�%Ø˜1ÑˆKð ˆGØÐ ¤W¨U°IÔ%>À5Ç=Â=ØŸ™ qÑ)�Ü˜6 7Ô+°·²Ø$Ÿl™l×2Ñ2Ò8°b�GâØ  GÑ+Ñ ðo ùð $ð ð< [øð
	,ø˜8ñ Ü$E×$bÑ$bØØ%ô%ˆNð !Ó ô "C×!]Ñ!]ØØØô"
ˆð
 Óä×ÑØQÐS]Ð_jõ	
ùsc   ‚A(GÁ*FÁ.E?Á/FÁ2BGÄ FÄ
GÄFÄFÄFÄA%GÅ9GÅ?FÆGÆFÆAG©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstaticmethodÚdictÚstrr   r   ÚboolÚobjectr8   r   r   r?   rI   r   rZ   r;   ó    r7   r   r   ,   sæ  „ ñð ð;!Ø�S˜#�X‘ð;!à  S Ñ)ð;!ð ˜‘*ð;!ð % S¨# XÑ.°Ñ5ð	;!ð ð;!ð 
��f�Ñ	ò;!ó ð;!ðz ð9¨g°c¸6°kÑ.Bð 9À}ÐWjÑGjò 9ó ð9ð ð
  $Ø59ð<ð ,1ò<Øð<à�S˜&�[Ñ!ð<ð ˜S #˜X™ð<ð ˜‘*ð	<ð
 " # s (™^¨dÑ2ð<ð %)ð<ð 
ˆc�6ˆkÑ	ò<ó ð<ð| ð
  $Ø59ðr
ð ,1òr
Øðr
à�S˜#�X‘ðr
ð ˜S #˜X™ðr
ð ˜‘*ð	r
ð
 " # s (™^¨dÑ2ðr
ð %)ðr
ð 
�t˜C ˜KÑ(Ñ	)òr
ó ñr
rr   r   rB   r   r   r   r   r   c              ƒ   óR   K  — t         j                  | ||||¬«      ƒ d{  –—† S 7 Œ­w)z6Convenience function for non-streaming A2A completion.©rB   r   r   r   r   N)r   rI   rt   s        r7   Úhandle_a2a_completionru   ,  s:   è ø€ ô ,×@Ñ@ØØØ%ØØ/ð Aó ÷ ð ð úr@   c                ód   K  — t         j                  | ||||¬«      2 3 d{  –—† }|­–— Œ7 Œ
6 y­w)z2Convenience function for streaming A2A completion.rt   N)r   rZ   )rB   r   r   r   r   r`   s         r7   Úhandle_a2a_completion_streamingrw   =  sI   è ø€ ô 2×BÑBØØØ%ØØ/ð Có ÷ ð ˆeð Œðøñ ùs   ‚0�.¡,¢.¥0¬.®0rh   )!rl   Úcollections.abcr   r   r   r   Útypingr   r   r=   Úlitellm._loggingr	   Ú=litellm.a2a_protocol.litellm_completion_bridge.transformationr
   r   Ú-litellm.a2a_protocol.providers.config_managerr   Ú!litellm.interactions.agents.utilsr   Ú,litellm.litellm_core_utils.streaming_handlerr   Úlitellm.types.utilsr   r   Ú__annotations__Ú	frozensetr   r   ro   rn   rq   ru   rw   r;   rr   r7   ú<module>r‚      sZ  ðò
÷ HÓ Gß ã Ý +÷õ SÝ AÝ LÝ -ð
 &EÐ ˜UÓ Dñ &àØØØØ#ðóÐ �Eó ÷|
ñ |
ðH  Ø15ñØðà��f�Ñðð ˜˜f˜Ñ%ðð �D‰jð	ð
 ˜c 3˜h™¨$Ñ.ðð 
ˆ#ˆvˆ+Ñóð*  Ø15ñØðà��f�Ñðð ˜˜f˜Ñ%ðð �D‰jð	ð
 ˜c 3˜h™¨$Ñ.ðð �4˜˜V˜Ñ$Ñ%ôrr   