
    Pmj                       d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ  ej        e          Z edd	h          Z ed
dh          Zdddd_dZdddd_dZdddd`dZdddd`dZdad Zdddd!dbd'Zdddddddd(dcd0Z G d1 d2e
e                   Z G d3 d4          Zddd:Z ded>Z!dfdDZ"dgdFZ#dhdHZ$didLZ%djdMZ&dkdQZ'dldTZ(dmdVZ)dndWZ*dodYZ+dodZZ,dpd]Z-dod^Z.dS )qz?Core NeMo Relay adapters for physical Hermes provider attempts.    )annotationsN)CallableIterator)SimpleNamespace)Any)relay_runtimereasoning_contentreasoning_detailszx-dynamo-parent-session-idzx-dynamo-session-idF)metadatadefer_logical_completionrequestdict[str, Any]callbackCallable[[dict[str, Any]], Any]
session_idstrname
model_namer   dict[str, Any] | Noner   boolreturnr   c                   t          j        |          \  }}}	|||                                s            S t          |||	          }
|
|
d         n|	}	t	                     |j                            i           }t          |j        |          i dt          j	                    d fd}	 t          |                    ||j        j        j        ||||	t          pi           |t          |j                  t          |j                  
  
                  }nM# t           $ r@}t          j        |          rt%          ||
|	          rd
         cY d}~S  d}~ww xY w|st'          |
d           d
v rt)          |d                   rd
         S t+          |          S )z>Run one non-streaming physical provider attempt through Relay.N   relay_request_bodyr   next_requestr   r   c                    	 t          | 
          }                                                    |          }n# t          $ r}| d }~ww xY w|	d<   t	          |          	d<   	d         S )Nr   codec_baseline_bodyr   valuejson)_provider_requestcopyrunBaseException	_jsonable)r   final_requestrawexcr   callback_contextcallback_errorr   r   raw_responser   r   s       5/home/thesage/.hermes/hermes-agent/agent/relay_llm.pyinvokezexecute.<locals>.invoke8   s    	-#5$7!  M #''))--hFFCC 	 	 	 N	 !$W(~~VF##s   <A   
A
AAhandler   r   codecresponse_codecrelay_errorr+   logicalr   r    successoutcomer!   r   r   r   r   )r   resolve_execution_contextmanaged_execution_enabled_logical_parent_relay_request_bodyrelay
LLMRequest_codec_round_trip_request_bodycontextvarscopy_context_run_awaitablerun_in_session_asyncllmexecuter&   _codecr%    _is_relay_wrapped_callback_error_recover_successful_callback_complete_logical_json_equal
_namespacer   r   r   r   r   r   r   runtimesessionparentr5   relay_requestr.   managedr)   r*   r+   r   r,   r   s   ``   `         @@@@@r-   rF   rF      sn     -FzRRGWf'/1R1R1T1T/x   gwAAG".WQZZFF,Wh??M,,R1CDDM8-	   $&L+/N"/11$ $ $ $ $ $ $ $ $ $ $ $ $$ ((!)"8>r22%W]H55%gmX>> )  
 
    &>sNSS ' ! ')%=
 
 
 	)  (((((((  $ 6'95555,;wV8L#M#MG$$gs%   
A0D; ;
F4F 9F?F  Fc                  K   t          j        |          \  }}}	|||                                s             d{V S t          |||	          }
|
|
d         n|	}	t	                     |j                            i           }t          |j        |          i dt          j	                    d fd}	 |
                    ||j        j        j        ||||	t          pi           |t          |j                  t          |j                  
  
         d{V }nM# t          $ r@}t          j        |          rt#          ||
|	          rd
         cY d}~S  d}~ww xY w|st%          |
d           d
v rt'          |d                   rd
         S t)          |          S )z=Run one asynchronous physical provider attempt through Relay.Nr   r   r   r   r   c                0  K   	 t          | 	
          dfd}                                                    t          j         |                      }| d {V }n# t
          $ r}| d }~ww xY w|d<   t          |          d<   d         S )Nr   r   r   c                 *   K                d {V S N )r   r'   s   r-   call_providerz4execute_async.<locals>.invoke.<locals>.call_provider   s)      %Xm444444444    r    r!   r   r   )r"   r#   r$   asynciocreate_taskr%   r&   )r   rX   taskr(   r)   r'   r   r*   r+   r   r   r,   r   r   s        @r-   r.   zexecute_async.<locals>.invoke   s      	-#5$7!  M5 5 5 5 5 5 5 $((**..# D ******CC 	 	 	 N	 !$W(~~VF##s   AA$ $
A6.A11A6r/   r3   r    r6   r7   r!   r9   )r   r:   r;   r<   r=   r>   r?   r@   rA   rB   rD   rE   rF   r&   rG   r%   rH   rI   rJ   rK   rL   rM   s   ``   `         @@@@@r-   execute_asyncr^   p   s       -FzRRGWf'/1R1R1T1T/Xg&&&&&&&&&gwAAG".WQZZFF,Wh??M,,R1CDDM8-	   $&L+/N"/11$ $ $ $ $ $ $ $ $ $ $ $ $244M%x~2..!11!'-:: 5 
 
 
 
 
 
 
 
    &>sNSS ' ! ')%=
 
 
 	)  (((((((  $ 6'95555,;wV8L#M#MG$$gs%   A)D< <
F4F:F FFc          	         t          j                    }| ||           S t          | ||j        j        ||||          S )zDRun a provider attempt under the inherited Hermes turn when present.Nr   r   r   r   r   )r   active_turnrF   leaser   r   r   r   r   r   r   turns          r-   execute_currentre      sX     $&&D|x   :(!9   rY   c          	        K   t          j                    }| ||            d{V S t          | ||j        j        ||||           d{V S )zDRun an async provider attempt under the inherited turn when present.Nr`   )r   ra   r^   rb   r   rc   s          r-   execute_current_asyncrg      s       $&&D|Xg&&&&&&&&&:(!9         rY   c                 R    	 t          j                     n# t          $ r Y dS w xY wdS )NFT)r[   get_running_loopRuntimeErrorrW   rY   r-   _has_running_event_looprk      s@     """"   uu4s    
$$)r   r   completed_response_predicatestream_factory	finalizerCallable[[], Any]rl   Callable[[Any], bool] | Nonec                   t          j                    }| ||           S t                      r ||           S t          | ||j        j        ||||||	  	        }	|t          |	dd          }
|
|
S |	S )u  Run a provider stream under the inherited Hermes turn when present.

    When ``completed_response_predicate`` is set and the stream_factory returns
    a complete response instead of an iterator (e.g. AnthropicAuxiliaryClient
    and other shims that ignore ``stream=True``), unwrap and return the
    completed response directly. This mirrors the pre-Relay behavior where
    ``call_llm(stream=True)`` returned the raw response and the consumer's
    own ``hasattr(stream, "choices")`` check handled it (#11732, #55933) —
    without the unwrap the response stays trapped as ``final_response`` on the
    inner ManagedLlmStream and the outer consumer sees an empty stream.
    N)r   r   r   rn   r   r   rl   final_response)r   ra   rk   streamrb   r   getattr)r   rm   r   r   rn   r   r   rl   rd   rR   	completeds              r-   stream_currentrv     s    , $&&D|~g&&&   
' ~g&&&:(!9%A
 
 
G $/G%5t<<	 NrY   )on_stream_createdon_chunkchunk_adapteraccept_chunkrl   r   r   rw   Callable[[Any], None] | Nonerx   ry   Callable[[Any], Any] | Nonerz   'ManagedLlmStream'c               :    t          | |||||||||	|
||          S )z?Return a synchronous view of one Relay-managed provider stream.)r   r   r   rn   rw   rx   ry   rz   rl   r   r   )ManagedLlmStream)r   rm   r   r   r   rn   rw   rx   ry   rz   rl   r   r   s                r-   rs   rs   <  sB    " +#!%A!9   rY   c                  J    e Zd ZdZd%dZd&dZd'dZd(dZd(d Zd)d"Z	d(d#Z
d$S )*r   z@Drive Relay's async stream from Hermes's provider worker thread.r   r   rm   r   r   r   r   r   rn   ro   rw   r{   rx   ry   r|   rz   rp   rl   r   r   r   r   r   Nonec               $    d  _         d  _        d  _        d  _        d _        d  _        d  _        d  _        | _        | _	        |	pt           _        |
 _        d _        d _        g  _        d _        t#          j                    dfdt'          j        |          \  }}}|||                                s^           }' |          r| _         t-          d           _        n(| _         |           t-          |           _        d S t/          |||           _         j         j        d	         }t1                    |j                            i           }t7          |j        |
          d f	d}d fd}d fd}t9          j                    }| _        d _        	 |                    |                    ||j        j         j!        ||||||tE          pi           |tG          |j                  tG          |j                                       _        d S # tH          $ r}tK          |tL                    rD j        r= j        6tN          (                    dd            )                                 Y d }~d S  j        s.tU           j        tW          |          rdnd           d  _        |,                                 d  _         d }~ww xY w)NFr   Callable[..., Any]argsr   r   c                D                                      j        | g|R  S rV   )r#   r$   )r   r   r*   s     r-   run_callbackz/ManagedLlmStream.__init__.<locals>.run_callback  s-     /#((**.x?$????rY   rW   r   r   r   c           
      	K   d }	  t          | 	                    }e |          rY|_        d_        	 t          |dd           }t	          |          r(	  |           d S # t
          $ r}|_         d }~ww xY wd S 
 
|            t          |          }	 	  t          |          }n# t          $ r Y nNw xY wj
         j
        |          sn1t          |          }j                            ||f           |W V  md_        n# t
          $ r}|_         d }~ww xY w	 t          |dd           }t	          |          r(	  |           d S # t
          $ r}|_         d }~ww xY wd S # t          |dd           }t	          |          r'	  |           w # t
          $ r}|_         d }~ww xY ww xY w)Nr   Tclose)r"   rr   _provider_completedrt   callabler%   _close_erroriternextStopIteration_accept_chunkr&   _raw_chunksappend_callback_error)r   
raw_streamr   r)   raw_iteratorchunkencoded_chunkr   rl   r   rw   r   r   r   selfrm   s          r-   provider_streamz2ManagedLlmStream.__init__.<locals>.provider_stream  s     J0)\"%$+=,?!)  	 	
 1<$4"  = +5D'/3D,,  
GT::E?? $U+++++(   ,/) - %0 L!2J???+|D*==( ,T< @ @(   )5ll*? ?5 $-e$4$4M$++]E,BCCC'''''( ,0((    '*$ )
  
GT::E?? $U+++++(   ,/)   
GT::E?? $U++++(   ,/)s   :D! #A0 0
B:BB D! -B? >D! ?
C	D! CAD!  F !
D8+D33D88F E* *
F4E<<F!G(F43G4
G>GGGr   r   c                V    j           j         t          |                      d S d S rV   )	_on_chunkr&   )r   r   r   s    r-   observe_chunkz0ManagedLlmStream.__init__.<locals>.observe_chunk  s5    ~)T^Yu-=-=>>>>> *)rY   c                     j         d S 	 j        t          j                  S t                               S # t          $ r} | _          d } ~ ww xY wrV   )r   rr   r&   r%   )r)   rn   r   r   s    r-   relay_finalizerz2ManagedLlmStream.__init__.<locals>.relay_finalizer  st     #/t&2$T%8999 i!8!8999    '*$s   ? ? 
A	AATr/   _NeMo Relay stream post-processing failed after provider success; preserving the provider resultexc_info	cancelledfailedr7   )r   r   r   r   r   r   )r   r   )r   r   r   r   rZ   )-rr   _loop_stream_raw_stream_resource_closedr   r   _logical_defer_logical_completionr   rL   _chunk_adapterr   _relay_observes_chunksr   r   output_modifiedrA   rB   r   r:   r;   r   r<   r=   r>   r?   r@   r[   new_event_looprun_until_completerD   rE   stream_executer&   rG   r%   
isinstance	Exceptionloggerwarning!_preserve_pending_provider_chunksrJ   _is_cancellationr   )r   r   rm   r   r   r   rn   rw   rx   ry   rz   rl   r   r   rN   rO   rP   r   rQ   r   r   r   loopr)   r*   r   r   r   s   ```   ``   ``           @@@@r-   __init__zManagedLlmStream.__init__a  s   " $(7;
 )-!2659PT)A&!+9z)&+##( 24$&355	@ 	@ 	@ 	@ 	@ 	@
 $1#J:#V#V &O4466  (00J+7<X<X= =7 '1##Bxx,6)$0%%j111#J//F'&(KK=$]1%F0(CC005GHH<M1	
 
 
2	 2	 2	 2	 2	 2	 2	 2	 2	 2	 2	 2	 2	 2	h	? 	? 	? 	? 	? 	? 	?	 	 	 	 	 	 	 	 %''
&*#&	22,,M%4!#!#!&x~266) 99#)'-#B#B -   DLLL   	 	 	3	**, (05!    
 668881 %!M+;C+@+@NKKh    !%JJLLLDJ+	s!   A=I 
L AL
9AL

Lr}   c                    | S rV   rW   r   s    r-   __iter__zManagedLlmStream.__iter__  s    rY   r   c                     j         rt           j        v	 t           j                  }n%# t          $ r                      d            w xY w j        2                     |          s                     d           t          |S d fd}	  j                             |                      }n+# t          $ rQ  j	        rd _
         j        st           j        d           d  _                             d           t          d t          $ r} j        }|-t!          j        ||          r                     d	           |t%          |t&                    rM j        rF|Dt*                              d
d                                             t                     cY d }~S                      t1          |          rdnd	            d }~ww xY w j        s j                             |           t7           j	                  D ]6\  }\  }}t9          ||          r|dk    rd _
         j	        d |dz   = |c S 7d _
                             |          S )Nr   logical_outcomer   r   c                 <   K   t           j                   d {V S rV   )anextr   r   s   r-   
next_chunkz-ManagedLlmStream.__next__.<locals>.next_chunk*  s)      t|,,,,,,,,,rY   Tr6   r7   r   r   r   r   r   rZ   )r   r   r   r   r   _closer   r   StopAsyncIterationr   r   r   rJ   r   r%   r   r   rH   r   r   r   r   r   r   r   r   r   	enumeraterK   r   )r   r   r   r)   r+   indexencodedr(   s   `       r-   __next__zManagedLlmStream.__next__  s   < 	 :T\**    K888 !-d6H6H6O6O-K888##L	- 	- 	- 	- 	- 	-!	J11**,,??EE! 	* 	* 	* ,'+$1 %!$-CCCC $KKK444T) 	 	 	!1N*!B3WW + H555$$3	**"," #*5!    
 66888Dzz!!!!!!KK/?/D/D R(     /	0 * 	"t~/INN5!!!%.t/?%@%@ 	 	!E>GS5'** 199+/D($[uqy[1


	
  $""5)))s/   - "A"B8 8A#G BG-G 3(GG c                V    |                      d           | j        }d| _        ||dS )zAClose an explicitly abandoned stream and cancel its logical call.r   r   N)r   r   )r   close_errors     r-   r   zManagedLlmStream.closeZ  s:    K000' " #"rY   c                $   d | j         D             }| j                                          | j        }| j        }d| _        t	          |          | _        d| _        d| _        |t          |dd          t                    rQdfd}	 |	                     |                       n,# t          $ r t                              dd	           Y nw xY w|                                 | j        st          | j        d
           d| _        dS dS )z@Switch a failed Relay stream to its undelivered provider chunks.c                    g | ]\  }}|S rW   rW   ).0_encodedr(   s      r-   
<listcomp>zFManagedLlmStream._preserve_pending_provider_chunks.<locals>.<listcomp>d  s    ====8S3===rY   Nacloser   r   c                 ,   K                  d {V  d S rV   rW   r   s   r-   close_streamzHManagedLlmStream._preserve_pending_provider_chunks.<locals>.close_streamp  s"      %''MMMMMMMMMrY   z4Relay stream cleanup failed during provider fallbackTr   r6   r7   r   r   )r   clearr   r   r   r   r   rt   r   r   r   r   debugr   r   rJ   r   )r   pendingr   relay_streamr   r   s        @r-   r   z2ManagedLlmStream._preserve_pending_provider_chunksb  sO   ==D,<===   z|
G}}$(!!L(D99E " " " " " "++LLNN;;;;    LLN!% !     
 JJLLL- 	!dmY???? DMMM	! 	!s   B* *&CCr   c                  | j         rd S d| _         | j        }d | _        || j        | j        f}d | _        d | _        t	                      }|D ]}|t          |          |v r|                    t          |                     t          |dd           t                    rM	               d# t          $ r4}| j
        || _
        t                              dd           Y d }~d }~ww xY w| j        st          | j        |           d | _        d S t          | j        dd           t                    rJd
fd	}	 |                     |                       n%# t          $ r}| j
        || _
        Y d }~nd }~ww xY w| j        st          | j        |           d | _        |                                 d S )NTr   zProvider stream cleanup failedr   r7   r   r   r   c                 ,   K                  d {V  d S rV   rW   r   s   r-   r   z-ManagedLlmStream._close.<locals>.close_stream  s"      eggrY   r   )r   r   r   r   setidaddrt   r   r   r   r   r   r   rJ   r   r   r   )	r   r   r   	resources
closed_idsresourcer)   r   r   s	           @r-   r   zManagedLlmStream._close  s1   < 	Fz
<t'@AIDL(,D%#&55J%  #r(||z'A'Ar(||,,,'488E?? 	$   ,403D-<%) %        	 1 %!$-IIII $Fh55E?? 		,     ,''7777 , , ,$,(+D%, - 	!dm_EEEE DM

s0   '
B22
C0<*C++C0E$ $
F.FFc                2    |                      d           d S )Nr   r   )r   r   s    r-   __del__zManagedLlmStream.__del__  s    K00000rY   N)r   r   rm   r   r   r   r   r   r   r   rn   ro   rw   r{   rx   r{   ry   r|   rz   rp   rl   rp   r   r   r   r   r   r   )r   r}   rZ   r   )r   r   r   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   rW   rY   r-   r   r   ^  s        JJv v v vp   <* <* <* <*|   ! ! ! !:, , , ,\1 1 1 1 1 1rY   r   c                  4    e Zd ZdZddZddZdd	ZdddZd
S )AnthropicStreamAccumulatorz<Rebuild an Anthropic Message from post-intercept SSE events.r   r   c                "    i | _         i | _        d S rV   )_message_blocksr   s    r-   r   z#AnthropicStreamAccumulator.__init__  s    (*24rY   eventr   c                   t          |          }t          |t                    sd S |                    d          }|dk    rE|                    d          }t          |t                    rdD ]}||v r||         | j        |<   d S |dk    rm|                    d          }|                    d          }t          |t
                    r,t          |t                    rt          |          | j        |<   d S |dk    r|                    d          }|                    d	          }t          |t
                    rt          |t                    sd S | j                            |i           }|                    d          }	|	d
k    rNt          |                    d          pd          t          |                    d          pd          z   |d<   n3|	dk    rMt          |                    d          pd          t          |                    d          pd          z   |d<   n|	dk    rMt          |                    d          pd          t          |                    d          pd          z   |d<   n|	dk    rNt          |	                    dd                    t          |                    d          pd          z   }
|
|d<   n9|	dk    r3d|v r/|                    dg           
                    |d                    d S |dk    r|                    d	          }t          |t                    rdD ]}||v r||         | j        |<   d|v rj|d         }| j                            d          }t          |t                    r%t          |t                    ri ||| j        d<   d S || j        d<   d S d S d S )Ntypemessage_startmessage)r   r   rolemodelusagecontent_block_startr   content_blockcontent_block_deltadelta
text_deltatext thinking_deltathinkingsignature_delta	signatureinput_json_delta_partial_jsonpartial_jsoncitations_deltacitation	citationsmessage_delta)stop_reasonstop_sequencer   )r&   r   dictgetr   intr   
setdefaultr   popr   )r   r   payload
event_typer   keyr   blockr   
delta_typepartialr   current_usages                r-   observez"AnthropicStreamAccumulator.observe  s
   E""'4(( 	F[[((
((kk),,G'4(( :C : :Cg~~-4S\c*F...KK((EKK00E%%% 2*UD*A*A 2&*5kkU#F...KK((EKK((EeS)) E41H1H L++E266E6**J\)) #EIIf$5$5$; < <sIIf%%+@ @ !f ///$'		*(=(=(C$D$DsIIj))/RH H %j!! 000%(;)?)?)E2%F%FIIk**0bJ J &k"" 111eii<<==IIn--3A A  *1o&&000Z55H5H  b1188z9JKKKF((KK((E%&& 8; 8 8Ce||-23Zc*'!!( $ 1 1' : :mT22 3z%7N7N 3-G-G-GDM'***-2DM'*** )( "!rY   r   c                F   g }t          | j                  D ]~}t          | j        |                   }|                    dd           }|5	 t	          j        |          |d<   n# t          t          f$ r ||d<   Y nw xY w|                    |           i | j	        d|iS )Nr   inputcontent)
sortedr   r  r	  r!   loads	TypeError
ValueErrorr   r   )r   blocksr   r  r  s        r-   finalizez#AnthropicStreamAccumulator.finalize  s    DL)) 	! 	!Ee,--Eii66G"-%)Z%8%8E'NN!:. - - -%,E'NNN-MM%    3$-3F333s   A$$A=<A=Nbasec                    |                                  }t          |          }t          |t                    si }|                    dg           }i ||}|sd|vr||d<   t          |          S )z8Return the attribute-shaped response consumed by Hermes.r  )r  r&   r   r  r	  rL   )r   r  	assembledbase_payloadr  mergeds         r-   responsez#AnthropicStreamAccumulator.response   s}    MMOO	 ,-- 	L--	2...L.I. 	(iv-- 'F9&!!!rY   r   )r   r   r   r   )r   r   rV   )r  r   r   r   )r   r   r   r   r   r  r  r   rW   rY   r-   r   r     sp        FF5 5 5 593 93 93 93v4 4 4 4
" 
" 
" 
" 
" 
" 
"rY   r   rN   relay_runtime.RelayRuntimerO   rP   6tuple[relay_runtime.RelayTurnContext, Any, str] | Nonec                   t          j        |j                  }t          |pi                     d          pd          }||r|j        j        | urd S |j        5  |j        r	 d d d            d S |j	        5  |j
                            |          }||                     || j        j        j        t           j        | j        j        j        |i t           j        t           j        t           j        | j        dt          |pi                     d          pd          i          }||j
        |<   d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |||fS )Napi_request_idr   zhermes.call_role	call_roleprimary)r0   r  r   )r   ra   r   r   r  rb   hostfinalize_lockclosedlogical_llm_locklogical_llm_callsrun_in_sessionr>   scopepushLOGICAL_LLM_SCOPE	ScopeTypeFunctionRUNTIME_SCHEMA_KEYRUNTIME_SCHEMA_VERSIONRUNTIME_INSTANCE_KEY
runtime_id)rN   rO   rP   r   rd   
request_idr0   s          r-   r<   r<     s    $W%788Dhn"))*:;;ArBBJ|:|)G)Gt		 < <; 	< < < < < < < < " 	< 	<+//
;;F~ //M',!3M+4!%8-:^%:G<N*C%^00==J- - 0   6<&z2%	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<< < < < < < < < < < < < < < <, ##s=   	E1E8B8D<0E<E 	 EE 	EEEr5   r8   r   c               j   | d S | \  }}}|j         }t          |j        t          j                  sd S |j        5  |j        5  |j                            |          |ur	 d d d            d d d            d S 	 d d d            n# 1 swxY w Y   |j	        	 d d d            d S 	 |j        
                    |j	        |j        j        j        j        |d|it          j        t          j        t          j        |j        j        i           n8# t$          $ r+ t&                              dd           Y d d d            d S w xY w|j        5  |j                            |          |u r|j                            |d            d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr8   )outputr   z,Hermes Relay logical LLM finalization failedTr   )rb   r   r'  r   RelayRuntimer(  r*  r+  r  rO   r,  r>   r-  r	  r2  r3  r4  r5  r   r   r   )r5   r8   rd   r0   r6  rb   s         r-   rJ   rJ   0  s   
 &D&*JEej-"<== 		 = =" 	 	%))*55VCC	 	 	 	 	 	= = = = = = = =C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 = = = = = = = = =	J%%
 &*!7+!4m6Z!6
8M & 	 	 	 	  	 	 	 NN>     1= = = = = = = ="	 " 	= 	=%))*55??&**:t<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=3= = = = = = = = = = = = = = = = = =s   F(B F(9F(B			F(B		F(&A&DF(&E3F(E
F(8FF(F	F(F	F((F,/F,r,   r4   r%   r+   BaseException | Nonec                   t          |t                    r|d| vrdS t                              dd           |st	          |d           dS )Nr    Fz]NeMo Relay LLM post-processing failed after provider success; returning the provider responseTr   r6   r7   )r   r   r   r   rJ   )r,   r4   r+   r5   r   s        r-   rI   rI   Y  sq     {I..%,&&u
NN	*    
 $ 6'955554rY   errorc                P    t          | t          j        t          t          f          S rV   )r   r[   CancelledErrorInterruptedErrorKeyboardInterrupt)r<  s    r-   r   r   q  s&    		!13DE  rY   r$  c                   t          j                    }|| sdS |j        5  |j                            |           }ddd           n# 1 swxY w Y   |t          ||| f|           dS dS )zDComplete the active turn's logical LLM call after caller validation.Nr7   )r   ra   r*  r+  r  rJ   )r$  r8   rd   r0   s       r-   complete_logical_callrB  x  s    $&&D|>|		 < <'++N;;< < < < < < < < < < < < < < <48'JJJJJJ s   AAAoriginalr   r   c                  t          |d|          }t          |t                    s|}|t          ||          rt          |           }n|}t	          ||          }t          |           }|                                |                                z  D ]H}	|	|vr|                    |	d            |	|vst          ||	         ||	                   s||	         ||	<   It          | |||           t          |dd           }
t          |
t                    rd |
                                D             }
|
r+i t          |	                    d          pi           |
|d<   |S )Nr  )baselineinterceptedheadersc                j    i | ]0\  }}t          |                                          t          v-||1S rW   )r   lower _RELAY_INTERNAL_PROVIDER_HEADERSr   r  r    s      r-   
<dictcomp>z%_provider_request.<locals>.<dictcomp>  sD     
 
 
U3xx~~'GGG GGGrY   extra_headers)
rt   r   r  rK   _provider_request_bodykeysr	  $_restore_provider_message_extensionsitemsr  )rC  r   r   r   r   r  finalrE  rF  r  rG  s              r-   r"   r"     s    gy'22Ggt$$ %$"k';M&N&N"X&,Wh??X ==??[%5%5%7%77 	. 	.C+%%		#t$$$$H$$KC - -$ )-c
,#		
 	
 	
 	
 gy$//G'4   

 
%mmoo
 
 

  
"
599_--344"
"
o LrY   c                |   t          |           }t          |t                    si S t          |pi                     d          pd          dk    ryt          |          }|                    d          |                    dd            nt          |                    d          t                    rd |d         D             |d<   nrt          |pi                     d          pd          dk    rH|                    d          }t          |t                    rt          |          }d |D             |d<   |S )Napi_moder   codex_responsestoolsc                    g | ]W}t          |t                    r>|                    d           dk    r%d|vr!dd |                                D             dn|XS )r   functionc                &    i | ]\  }}|d k    ||S )r   rW   rK  s      r-   rL  z2_relay_request_body.<locals>.<listcomp>.<dictcomp>  s/     ! ! !&C&== U(==rY   r   rX  )r   r  r  rQ  r   tools     r-   r   z'_relay_request_body.<locals>.<listcomp>  s        	 dD)) HHV$$
22d** '! !*.**,,! ! !     rY   chat_completionsc                X    g | ]'}t          |t                    rd |v r
d|vrdd i|n|(S )rX  r   r   r  r[  s     r-   r   z'_relay_request_body.<locals>.<listcomp>  sf        	 dD))$&&$&& ,t,,   rY   )r&   r   r  r   r  r	  list)r   r   bodyrV  s       r-   r=   r=     sV    WDdD!! 	
 HN
++1r226GGGDzz88G$HHWd####))400 	  !M  DM 
hn"!!*--3	4	48J	J	J!!eT"" 		::D  "  DM KrY   rR  rE  rF  c               B   |                      d          }|                     d          }|                     d          }|                     d          }t          d ||||fD                       sdS t          |          t          |          cxk    r't          |          cxk    rt          |          k    sn dS t          ||||d          D ]J\  }}	}
}t          d ||	|
|fD                       s%t          D ]}||v r||
vr||vr||	vr||         |	|<   KdS )zGRestore provider wire fields that Relay's typed codec cannot represent.messagesc              3  @   K   | ]}t          |t                    V  d S rV   )r   r`  )r   rc  s     r-   	<genexpr>z7_restore_provider_message_extensions.<locals>.<genexpr>  s@         	8T""     rY   NT)strictc              3  @   K   | ]}t          |t                    V  d S rV   r_  )r   r   s     r-   re  z7_restore_provider_message_extensions.<locals>.<genexpr>  s@       
 
 w%%
 
 
 
 
 
rY   )r  alllenzip _PROVIDER_MESSAGE_EXTENSION_KEYS)rC  rR  rE  rF  original_messagesfinal_messagesbaseline_messagesintercepted_messagesoriginal_messagefinal_messagebaseline_messageintercepted_messager  s                r-   rP  rP    s    !Z00YYz**N Z00&??:66    	
     	 	~	% 	% 	% 	% !!	% 	% 	% 	% #$$	% 	% 	% 	%
 	RUS S S ; ;N-)9;N  
 
 ! #	
 
 
 
 
 		 3 	; 	;C'''///222},,%5c%:c"	;#; ;rY   r>   rQ   c                  t          | |          }|t          ||          S 	 |                    |          }|                    ||          }t	          |d|          }t          |t                    rt          ||          S n-# t          $ r  t          	                    dd           Y dS w xY wt          	                    d           dS )zCReturn the codec-only request shape used to identify real rewrites.Nr  zCNeMo Relay request codec baseline failed; ignoring request rewritesTr   zTNeMo Relay request codec returned an unsupported baseline; ignoring request rewrites)
rG   rN  decodeencodert   r   r  r   r   r   )r>   rQ   r   r   r1   	annotatedr   r  s           r-   r@   r@     s     5(##E}%&8(CCCLL//	,,y-88'9g66gt$$ 	=)'8<<<	=   Q 	 	
 	
 	
 tt NN	$   4s   A B &B0/B0r  c                    t          |           }t          |pi                     d          pd          dk    r|S |                    d          }t          |t                    s|S d |D             |d<   |S )NrT  r   rU  rV  c                    g | ]s}t          |t                    rZ|                    d           dk    rAt          |                    d          t                    rd dit          |d                   n|tS rZ  )r   r  r  r[  s     r-   r   z*_provider_request_body.<locals>.<listcomp>@  s     
 
 
 	 dD!!		
 HHV
**txx
++T22 +	 J	
4
#$$	
 	
 
 
 
rY   )r  r   r  r   r`  )r  r   ra  rV  s       r-   rN  rN  7  s     ==D
HN
++1r226GGGHHWEeT"" 
 
 
 
 
DM KrY   c                B   t          |pi                     d          pd          }t          | dd           }|d S |dk    rt          |dd           }n2|dk    rt          |dd           }n|dk    rt          |d	d           }nd }t          |          r
 |            nd S )
NrT  r   codecsr]  OpenAIChatCodecanthropic_messagesAnthropicMessagesCodecrU  OpenAIResponsesCodec)r   r  rt   r   )r>   r   rT  r{  r1   s        r-   rG   rG   N  s    HN''
339r::HUHd++F~t%%% 1488	)	)	) 8$??	&	&	& 6==uoo/557774/rY   r    c                   | (t          | t          t          t          t          f          r| S t          | t
                    rd |                                 D             S t          | t          t          t          f          rd | D             S t          t          |           dd           }t          |          r4	 t          |                     d                    S # t          $ r Y nw xY w	 d t!          |                                           D             }n&# t"          t$          f$ r t          |           cY S w xY w|rt          |          nt          |           S )Nc                N    i | ]"\  }}t          |          t          |          #S rW   )r   r&   r   r  items      r-   rL  z_jsonable.<locals>.<dictcomp>b  s*    IIIic4C)D//IIIrY   c                ,    g | ]}t          |          S rW   )r&   r   r  s     r-   r   z_jsonable.<locals>.<listcomp>d  s    222D	$222rY   
model_dumpr!   )modec                x    i | ]7\  }}t          |                              d           't          |          |8S )_)r   
startswithr  s      r-   rL  z_jsonable.<locals>.<dictcomp>l  sN     
 
 
Ts88&&s++
HHd
 
 
rY   )r   r   r  floatr   r  rQ  r`  tupler   rt   r   r   r&   r  r   varsr  AttributeError)r    r  
attributess      r-   r&   r&   ^  ss   }
53UD*ABB}% JII5;;==IIII%$s+,, 322E2222elD99J
 	U--6-::;;; 	 	 	D	
 
!%[[..00
 
 



 ~&   5zz$.>9Z   CJJ>s$   <"C 
C,+C,0+D  D?>D?c                    t          | t                    r(t          di d |                                 D             S t          | t                    rd | D             S | S )Nc                N    i | ]"\  }}t          |          t          |          #S rW   )r   rL   r  s      r-   rL  z_namespace.<locals>.<dictcomp>x  s9     "
 "
 "
+43CHHj&&"
 "
 "
rY   c                ,    g | ]}t          |          S rW   )rL   r  s     r-   r   z_namespace.<locals>.<listcomp>|  s     333T
4  333rY   rW   )r   r  r   rQ  r`  r    s    r-   rL   rL   v  s    %    "
 "
8="
 "
 "
   	 % 433U3333LrY   leftrightc                    	 t          j        t          |           dd          t          j        t          |          dd          k    S # t          t          f$ r Y dS w xY w)NT),:)	sort_keys
separatorsF)r!   dumpsr&   r  r  )r  r  s     r-   rK   rK     sy    zdOOt

 
 
Z	%((DZPPPQ 	Q z"   uus   A	A A! A!c                    t          j        |           s| S 	 t          j                     n$# t          $ r t          j        |           cY S w xY wt	          d          )NzBSynchronous Relay LLM execution cannot run on an event-loop thread)inspectisawaitabler[   ri   rj   r$   r  s    r-   rC   rC     sw    u%% " """" " " "{5!!!!!"
L  s   , AA)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   rm   r   r   r   r   r   rn   ro   r   r   r   r   rl   rp   r   r   )r   r   rm   r   r   r   r   r   r   r   rn   ro   rw   r{   rx   r{   ry   r|   rz   rp   rl   rp   r   r   r   r   r   r}   )
rN   r!  rO   r   rP   r   r   r   r   r"  )r5   r"  r8   r   r   r   )r,   r   r4   r%   r+   r:  r5   r"  r   r   r   r   )r<  r%   r   r   )r$  r   r8   r   r   r   )rC  r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )
rC  r   rR  r   rE  r   rF  r   r   r   )
r>   r   rQ   r   r   r   r   r   r   r   )r  r   r   r   r   r   )r>   r   r   r   r   r   )r    r   r   r   )r  r   r  r   r   r   )/r   
__future__r   r[   rA   r  r!   loggingcollections.abcr   r   typesr   typingr   agentr   	getLoggerr   r   	frozensetrk  rJ  rF   r^   re   rg   rk   rv   rs   r   r   r<   rJ   rI   r   rB  r"   r=   rP  r@   rN  rG   r&   rL   rK   rC   rW   rY   r-   <module>r     s   E E " " " " " "         . . . . . . . . ! ! ! ! ! !            		8	$	$ $-9-.$ $   $-9!#89$ $   '+%*R R R R R Rx '+%*W W W W W W@ '+%*     < '+%*     0    '+%*AE7 7 7 7 7 7D 7;-11515AE&*%*     DP1 P1 P1 P1 P1x} P1 P1 P1f
Y" Y" Y" Y" Y" Y" Y" Y"x $  $  $  $F&= &= &= &=R   0   K K K K. . . .b* * * *Z5; 5; 5; 5;p   <   .0 0 0 0 ? ? ? ?0      	 	 	 	 	 	rY   