
    sj                       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 ddlmZ  ej        e          Z ed	d
h          Z eddh          Z edd           G d d                      Z edd           edd           edd          dZdydZdzd Zd{d"Zdd#d$d|d.Zdd#d$d|d/Zdd#d$d}d0Z dd#d$d}d1Z!d~d2Z"dd#dd3dd9Z#ddddddd#d:ddBZ$ G dC dDe
e                   Z% G dE dF          Z&ddLZ'dddddMddUZ(dd[Z)dd]Z*dddd^dd`Z+ddbZ,ddfZ-ddgZ.ddkZ/ddnZ0ddpZ1ddqZ2ddsZ3ddtZ4ddwZ5ddxZ6dS )z?Core NeMo Relay adapters for physical Hermes provider attempts.    )annotationsN)CallableIterator)	dataclass)SimpleNamespace)Any)relay_runtimereasoning_contentreasoning_detailszx-dynamo-parent-session-idzx-dynamo-session-idT)frozenslotsc                  $    e Zd ZU ded<   ded<   dS )_RelayProtocolstr	operationcodec_classN)__name__
__module____qualname____annotations__     3/home/agent/.hermes/hermes-agent/agent/relay_llm.pyr   r      s'         NNNr   r   zopenai.chat_completionsOpenAIChatCodec)r   r   zopenai.responsesOpenAIResponsesCodeczanthropic.messagesAnthropicMessagesCodec)chat_completionscodex_responsesanthropic_messagesmetadatadict[str, Any] | Nonereturn_RelayProtocol | Nonec                    | pi                      d          }t          |t                    sdS t                               |          S )z>Return Relay's operation and codec descriptor for an API mode.api_modeN)get
isinstancer   _RELAY_PROTOCOL_BY_API_MODE)r    r%   s     r   _relay_protocolr)   0   sD    B##J//Hh$$ t&**8444r   provider_namer   c                6    t          |          }||j        n| S )zGReturn Relay's canonical operation name when Hermes knows the API mode.)r)   r   )r*   r    protocols      r   _relay_operation_namer-   8   s"    x((H!)!58=Hr   dict[str, Any]c                    t          |pi           }t          |t                    si }|                    d|            |S )zHPreserve the physical provider when the operation name is canonicalized.zhermes.provider)	_jsonabler'   dict
setdefault)r*   r    relay_metadatas      r   _relay_metadatar4   >   sI     x~2..Nnd++ /???r   F)r    defer_logical_completionrequestcallbackCallable[[dict[str, Any]], Any]
session_idname
model_namer5   boolr   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          |          |||	t          |          |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                    d	fd}	 t          | 	          }                                                    ||          }n# t          $ r}| d }~ww xY w|
d<   t	          |          
d<   
d         S )
Nfinalr.   r"   r   c                t    t          j                    5   |           cd d d            S # 1 swxY w Y   d S Nr	   managed_callback_guard)rC   r7   s    r   guardedz(execute.<locals>.invoke.<locals>.guardedi   s     577 ' 'x' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   -11r@   codec_baseline_bodyr    valuejson)rC   r.   r"   r   )_provider_requestcopyrunBaseExceptionr0   )rA   rH   final_requestrawexcr7   callback_contextcallback_errorrJ   r    raw_responser@   r6   s        r   invokezexecute.<locals>.invokef   s    	' 	' 	' 	' 	' 	'	-#5$7!  M #''))--g}EECC 	 	 	 N	 !$W(~~VF##s   <A 
AAAhandler    r;   codecresponse_codecrelay_errorrU   logicalr5   rK   successoutcomerL   rA   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-   r4   _codecrP    _is_relay_wrapped_callback_error_recover_successful_callback_complete_logical_json_equal
_namespacer6   r7   r9   r:   r;   r    r5   runtimesessionparentr^   relay_requestrW   managedrS   rT   rU   rJ   rV   r@   s   ``   `         @@@@@r   ro   ro   I   sv     -FzRRGWf'/1R1R1T1T/x   gwAAG".WQZZFF,Wh??M,,R1CDDM8-	   $&L+/N"/11$ $ $ $ $ $ $ $ $ $ $ $ $2 ((!)%dH55(x88%W]H55%gmX>> )  
 
    &>sNSS ' ! ')%=
 
 
 	)  (((((((  $ 6'95555,;wV8L#M#MG$$gs%   
A=E 
F4F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          |          |||	t          |          |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?   rA   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 )NrI   r"   r   c                    K   t          j                    5               d {V cd d d            S # 1 swxY w Y   d S rE   rF   )r7   rQ   s   r   call_providerz4execute_async.<locals>.invoke.<locals>.call_provider   s       #9;; 9 9!)-!8!88888889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9s   599rK   rL   r"   r   )rM   rN   rO   asynciocreate_taskrP   r0   )rA   r   taskrR   rS   rQ   r7   rT   rU   rJ   r    rV   r@   r6   s        @r   rW   zexecute_async.<locals>.invoke   s      	-#5$7!  M9 9 9 9 9 9 9 $((**..# D ******CC 	 	 	 N	 !$W(~~VF##s   AA$ $
A6.A11A6rX   r\   rK   r_   r`   rL   rb   )r	   rc   rd   re   rf   rg   rh   ri   rj   rk   rm   rn   ro   r-   r4   rp   rP   rq   rr   rs   rt   ru   rv   s   ``   `         @@@@@r   execute_asyncr      s       -FzRRGWf'/1R1R1T1T/Xg&&&&&&&&&gwAAG".WQZZFF,Wh??M,,R1CDDM8-	   $&L+/N"/11$ $ $ $ $ $ $ $ $ $ $ $ $844M%!$11$T844!11!'-:: 5 
 
 
 
 
 
 
 
    &>sNSS ' ! ')%=
 
 
 	)  (((((((  $ 6'95555,;wV8L#M#MG$$gs%   A6E	 	
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r9   r:   r;   r    r5   )r	   active_turnro   leaser9   r6   r7   r:   r;   r    r5   turns          r   execute_currentr     sX     $&&D|x   :(!9   r   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	   r   r   r   r9   r   s          r   execute_current_asyncr     s       $&&D|Xg&&&&&&&&&:(!9         r   c                 R    	 t          j                     n# t          $ r Y dS w xY wdS )NFT)r   get_running_loopRuntimeErrorr   r   r   _has_running_event_loopr   2  s@     """"   uu4s    
$$)r    r5   completed_response_predicatestream_factory	finalizerCallable[[], Any]r   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.

    Determining that return shape requires starting the lazy managed pipeline,
    and Relay may read ahead internally while satisfying that first pull. A
    genuine first returned chunk remains buffered, while provider work,
    latency, and pre-first-yield errors may surface before this function
    returns.
    N)r9   r:   r;   r   r    r5   r   final_response)r	   r   r   streamr   r9   _prime_completed_responsegetattr)r6   r   r:   r;   r   r    r5   r   r   r{   	completeds              r   stream_currentr   :  s    8 $&&D|~g&&&   
' ~g&&&:(!9%A
 
 
G $/ 	))+++G%5t<<	 Nr   )on_stream_createdon_chunkchunk_adapteraccept_chunkr   r    r5   r   Callable[[Any], None] | Noner   r   Callable[[Any], Any] | Noner   'ManagedLlmStream'c               :    t          | |||||||||	|
||          S )z?Return a synchronous view of one Relay-managed provider stream.)r9   r:   r;   r   r   r   r   r   r   r    r5   )ManagedLlmStream)r6   r   r9   r:   r;   r   r   r   r   r   r   r    r5   s                r   r   r   z  sB    " +#!%A!9   r   c                  Z    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)d$Zd)d%Zd&S ),r   z@Drive Relay's async stream from Hermes's provider worker thread.r6   r.   r   r8   r9   r   r:   r;   r   r   r   r   r   r   r   r   r   r   r    r!   r5   r<   r"   Nonec               :    d  _         d  _        d  _        d  _        d _        d  _        d  _        d  _        d  _        | _	        t          pi                     d          pd                              d          r| _        | _        d  _        nd  _        d  _        d  _        | _        |	pt"           _        |
 _        d _        d _        g  _        g  _        d _        t3          j                    dfd
t7          j        |          \  }}}|||                                s^           }' |          r| _         t=          d           _        n(| _         |           t=          |           _        d S t?          |||           _         j         j        d         }tA                    |j!        "                    i           }tG          |j!        |          d f	d}d fd}d fd}|$                                 _        	 tK          j&                    }n## tN          $ r  (                                  w xY w| _        d _        	 |)                    |*                    ||j!        j+        j,        t[          |          |||||t]          |          |t_          |j!                  t_          |j!                                       _        d S # tN          $ r}ta          |tb                    rD j        r= j        6td          3                    dd            4                                 Y d }~d S  j	        sFtk           j        tm          |          rdnd j         j         j         j                   d  _        	 |7                                 d  _         (                                 n # d  _         (                                 w xY w d }~ww xY w)NF	call_role z
auxiliary:r7   Callable[..., Any]argsr   r"   c                d     d fd}                                                     |          S )Nr"   r   c                 h    t          j                    5     cd d d            S # 1 swxY w Y   d S rE   rF   )r   r7   s   r   rH   z@ManagedLlmStream.__init__.<locals>.run_callback.<locals>.guarded  s     #9;; + +#8T?+ + + + + + + + + + + + + + + + + +s   '++r   )rN   rO   )r7   r   rH   rT   s   `` r   run_callbackz/ManagedLlmStream.__init__.<locals>.run_callback  sJ    + + + + + + + $((**..w777r   r   r>   r?   rA   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)NrI   Tclose)rM   r   _provider_completedr   callablerP   _close_erroriternextStopIteration_accept_chunkr0   _raw_chunksappend_callback_error)rA   
raw_streamr   rS   raw_iteratorchunkencoded_chunkrJ   r   r    r   r@   r6   r   selfr   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 rE   )	_on_chunkr0   )r   r   r   s    r   observe_chunkz0ManagedLlmStream.__init__.<locals>.observe_chunk+  s5    ~)T^Yu-=-=>>>>> *)r   c                     j         d S 	 j        j        } n           } j        t          |           _        t          |           S # t          $ r}|_          d }~ww xY wrE   )r   r   _logical_model_name_response_model_name_logical_response_model_namer0   rP   )responserS   r   r   r   s     r   relay_finalizerz2ManagedLlmStream.__init__.<locals>.relay_finalizer/  s     #/t
&2#2HH+|I66H+78LX8V8VD5 ***    '*$s   AA 
A'A""A'TrX   _NeMo Relay stream post-processing failed after provider success; preserving the provider resultexc_info	cancelledfailedra   r;   r*   response_model_nameoperation_lease)r7   r   r   r   r"   r   )rA   r   )r   r   r"   r   r   )8r   _loop_stream_raw_stream_resource_closed_runtime_leaser   r   _logical_defer_logical_completionr   r&   
startswithr   _logical_provider_namer   r   ru   _chunk_adapterr   _relay_observes_chunksr   r   _prefetched_chunksoutput_modifiedrj   rk   r	   rc   rd   r   re   rf   rg   rh   ri   acquire_operation_leaser   new_event_looprP   _release_runtime_leaserun_until_completerm   rn   stream_executer-   r4   rp   r'   	Exceptionloggerwarning!_preserve_pending_provider_chunksrs   _is_cancellationr   )r   r6   r   r9   r:   r;   r   r   r   r   r   r   r    r5   rw   rx   ry   r   rz   r   r   r   looprS   rT   rJ   r@   r   s   ```   ``   ``           @@@@r   __init__zManagedLlmStream.__init__  s"   " $(7;
 )-!HL2659PT)A&B##K006B77BB<PP 	53=D$6:D'<@D--'+D$*.D'04D-!+9z)&+##( 24-/$&355
	8 
	8 
	8 
	8 
	8 
	8 $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	? 	? 	? 	? 	? 	? 	?	 	 	 	 	 	 	 	$ &==??	)++DD 	 	 	'')))	 
&*#-	22,,M%4)$99!#!#!,T8<<) 99#)'-#B#B -   DLLL   	 	 	3	**, (05!    
 668881 	%!M+;C+@+@NKKh#7"&"=(,(I$($7    !%.

!
++---- "
++----9	sE   I  I5B
L 
PAP6APO4P4PPPr   c                    | S rE   r   r   s    r   __iter__zManagedLlmStream.__iter__x  s    r   c                    | j         s| j        rdS 	 | j                            t          |                      dS # t          $ r Y dS w xY w)z4Advance once while preserving a genuine first chunk.N)r   r   r   r   r   r   s    r   r   z*ManagedLlmStream._prime_completed_response{  se    < 	42 	F	#**4::66666 	 	 	DD	s   '; 
A	A	r   c           	     J     j         rt           j        r j                                        S  j        v	 t           j                  }n%# t          $ r                      d            w xY w j        2                     |          s                     d           t          |S d fd}	  j        	                     |                      }nC# t          $ ri  j        rd _         j        s5t           j        d j         j         j         j                   d  _                             d           t          d t(          $ r} j        }|-t-          j        ||          r                     d	           |t1          |t2                    rM j        rF|Dt6                              d
d                                             t                     cY d }~S                      t=          |          rdnd	            d }~ww xY w j        s j                               |           tC           j                  D ]6\  }\  }}tE          ||          r|dk    rd _         j        d |dz   = |c S 7d _         #                    |          S )Nr   logical_outcomer"   r   c                 <   K   t           j                   d {V S rE   )anextr   r   s   r   
next_chunkz-ManagedLlmStream.__next__.<locals>.next_chunk  s)      t|,,,,,,,,,r   Tr_   r   r   r   r   r   r>   r   )$r   r   r   popr   r   r   _closer   r   StopAsyncIterationr   r   r   rs   r   r   r   r   r   rP   r   r	   rq   r'   r   r   r   r   r   r   r   r   	enumeratert   r   )r   r   r   rS   rU   indexencodedrR   s   `       r   __next__zManagedLlmStream.__next__  s@   < 	 " 	1*..000:T\**    K888 !-d6H6H6O6O-K888##L	- 	- 	- 	- 	- 	-(	J11**,,??EE! 	* 	* 	* ,'+$1 	%!M%#7"&"=(,(I$($7    !%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)))s1   A "A/4"C A;HBH%H+(HH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.close  s:    K000' " #"r   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        s5t          | j        d
| j        | j        | j        | j                   d| _        |                                  dS # |                                  w xY w)z@Switch a failed Relay stream to its undelivered provider chunks.c                    g | ]\  }}|S r   r   ).0_encodedrR   s      r   
<listcomp>zFManagedLlmStream._preserve_pending_provider_chunks.<locals>.<listcomp>  s    ====8S3===r   Nacloser"   r   c                 ,   K                  d {V  d S rE   r   r   s   r   close_streamzHManagedLlmStream._preserve_pending_provider_chunks.<locals>.close_stream  s"      #eggr   z4Relay stream cleanup failed during provider fallbackTr   r_   r   r"   r   )r   clearr   r   r   r   r   r   r   r   r   r   debugr   r   rs   r   r   r   r   r   r   )r   pendingr   relay_streamr  r   s        @r   r   z2ManagedLlmStream._preserve_pending_provider_chunks  s   ==D,<===   z|
G}}$(!!	*h==E?? & & & & & &//????$   R%) %     
 

1 	%!M%#7"&"=(,(I$($7    !%'')))))D''))))s1   $(D= B+ *D= +&CD= CAD= =Er   c                  | j         rd S d| _         | j                                         	 | 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        s5t!          | j        || j        | j        | j        | 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        s5t!          | j        || j        | j        | j        | j                   d | _        |                                 |                                  d S # |                                  w xY w)NTr   zProvider stream cleanup failedr   r   r  r"   r   c                 ,   K                  d {V  d S rE   r   r  s   r   r  z-ManagedLlmStream._close.<locals>.close_stream$  s"      %''MMMMMMMMMr   r	  )r   r   r
  r   r   r   setidaddr   r   r   r   r   r  r   rs   r   r   r   r   r   r   r   r   )	r   r   r   	resources
closed_idsresourcerS   r  r   s	           @r   r   zManagedLlmStream._close  s   < 	F%%'''9	*:DDJ|!\4+DE	#,0)'*uu
 )  H'2h<<:+E+E NN2h<<000#Hgt<<E 	!EGGGG(   #0847 1"LL @)- )        	 5 	)% /#'#;&*&A,0,M(,(;    %)DM0 '')))))/ DL(D99E 	0" " " " " "0++LLNN;;;;  0 0 0(0,/)0 1 	%!M+#7"&"=(,(I$($7    !%JJLLL'')))))D''))))sh   BH7 
CH7 
D*DH7 DA H7 "+H7 F, +H7 ,
G6G	H7 	GAH7 7Ic                R    | j         }d | _         ||                                 d S d S rE   )r   release)r   r   s     r   r   z'ManagedLlmStream._release_runtime_lease:  s1    #"MMOOOOO r   c                2    |                      d           d S )Nr   r   )r   r   s    r   __del__zManagedLlmStream.__del__@  s    K00000r   N)r6   r.   r   r8   r9   r   r:   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r5   r<   r"   r   )r"   r   r	  r   )r   r   r"   r   )r   r   r   __doc__r   r   r   r   r   r   r   r   r  r   r   r   r   r     s        JJW W W Wr      E* E* E* E*N   %* %* %* %*N>* >* >* >*@   1 1 1 1 1 1r   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 rE   )_message_blocksr   s    r   r   z#AnthropicStreamAccumulator.__init__G  s    (*24r   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textr   thinking_deltathinkingsignature_delta	signatureinput_json_delta_partial_jsonpartial_jsoncitations_deltacitation	citationsmessage_delta)stop_reasonstop_sequencer'  )r0   r'   r1   r&   r  intr  r2   r   r   r   )r   r   payload
event_typer$  keyr   blockr+  
delta_typepartialr'  current_usages                r   observez"AnthropicStreamAccumulator.observeK  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'*** )( "!r   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 )Nr3  inputcontent)
sortedr  r1   r   rL   loads	TypeError
ValueErrorr   r  )r   blocksr   r?  rA  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.rF  )rL  r0   r'   r1   r   ru   )r   rM  	assembledbase_payloadrF  mergeds         r   r   z#AnthropicStreamAccumulator.response  s}    MMOO	 ,-- 	L--	2...L.I. 	(iv-- 'F9&!!!r   r	  )r   r   r"   r   )r"   r.   rE   )rM  r   r"   r   )r   r   r   r  r   rC  rL  r   r   r   r   r  r  D  sp        FF5 5 5 593 93 93 93v4 4 4 4
" 
" 
" 
" 
" 
" 
"r   r  rw   relay_runtime.RelayRuntimerx   ry   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_roler   primary)rY   rE  r    )r	   r   r9   r   r&   r   hostfinalize_lockclosedlogical_llm_locklogical_llm_callsrun_in_sessionrg   scopepushLOGICAL_LLM_SCOPE	ScopeTypeFunctionRUNTIME_SCHEMA_KEYRUNTIME_SCHEMA_VERSIONRUNTIME_INSTANCE_KEY
runtime_id)rw   rx   ry   r    r   
request_idrY   s          r   re   re     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)r;   r*   r   r   r^   ra   
str | Noner   r   (relay_runtime.RelayOperationLease | Noner   c                  | 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 	 d|i}
|!||

                    ||d           |||
d<   |	j        j        }||j        } ||	j	        t          j        |	j        j        ||
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 )Nra   )r&  providerresponse_model)outputr    z,Hermes Relay logical LLM finalization failedTr   )r   r'   rW  r	   RelayRuntimerX  rZ  r[  r&   rx   updater\  pop_relay_scoperg   rb  rc  rd  re  r   r   r   r   )r^   ra   r;   r*   r   r   r   rY   rf  r   rl  r7   s               r   rs   rs     sZ    &D&*JEej-"<== 		 $= $=" 	 	%))*55VCC	 	 	 	 	 	$= $= $= $= $= $= $= $=C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 = $= $= $= $= $= $= $= $=	)F%-*C
NNOOO&2/BF+,z0H**9H-
 !4m6Z!6
8M
 
 
 
 
  	 	 	 NN>     C$= $= $= $= $= $= $= $=4	 " 	= 	=%))*55??&**:t<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=E$= $= $= $= $= $= $= $= $= $= $= $= $= $= $= $= $= $=s   GB G9GB			GB		G&BD98G9&E.G-E..
G88F<0G<G 	 GG 	GGGrV   r]   rP   rU   BaseException | Nonec                   t          |t                    r|d| vrdS t                              dd           |st	          |d           dS )NrK   Fz]NeMo Relay LLM post-processing failed after provider success; returning the provider responseTr   r_   r`   )r'   r   r   r   rs   )rV   r]   rU   r^   r5   s        r   rr   rr     sq     {I..%,&&u
NN	*    
 $ 6'955554r   errorc                P    t          | t          j        t          t          f          S rE   )r'   r   CancelledErrorInterruptedErrorKeyboardInterrupt)rr  s    r   r   r     s&    		!13DE  r   )r;   r*   r   rU  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.N)ra   r;   r*   r   )r	   r   rZ  r[  r&   rs   )rU  ra   r;   r*   r   r   rY   s          r   complete_logical_callrx    s     $&&D|>|		 < <'++N;;< < < < < < < < < < < < < < <6>*!' 3	
 	
 	
 	
 	
 	
 s   AAAr   c                    t          | t                    r|                     d          }nt          | dd          }t          |t                    r|                                r|ndS )z<Return a provider-reported model name when one is available.r&  N)r'   r1   r&   r   r   strip)r   rK   s     r   r   r   0  s^    (D!! 1W%%'400uc**Fu{{}}F55$Fr   originalr@   rJ   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 )NrF  )baselineinterceptedheadersc                j    i | ]0\  }}t          |                                          t          v-||1S r   )r   lower _RELAY_INTERNAL_PROVIDER_HEADERSr  r>  rK   s      r   
<dictcomp>z%_provider_request.<locals>.<dictcomp>]  sD     
 
 
U3xx~~'GGG GGGr   extra_headers)
r   r'   r1   rt   _provider_request_bodykeysr   $_restore_provider_message_extensionsitemsr&   )r{  r6   r@   rJ   r    rF  rC   r}  r~  r>  r  s              r   rM   rM   9  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 Lr   c                   t          |           }t          |t                    si S |                    dd            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timeoutr%   r   r   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"  r   r  s      r   r  z2_relay_request_body.<locals>.<listcomp>.<dictcomp>  s/     ! ! !&C&== U(==r   r"  r  )r'   r1   r&   r  r  tools     r   r  z'_relay_request_body.<locals>.<listcomp>}  s        	 dD)) HHV$$
22d** '! !*.**,,! ! !     r   r   c                X    g | ]'}t          |t                    rd |v r
d|vrdd i|n|(S )r  r"  r'   r1   r  s     r   r  z'_relay_request_body.<locals>.<listcomp>  sf        	 dD))$&&$&& ,t,,   r   )r0   r'   r1   r   r   r&   list)r6   r    bodyr  s       r   rf   rf   j  sl    WDdD!! 	 	HHY
 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 Kr   rC   r}  r~  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 rE   )r'   r  )r  r  s     r   	<genexpr>z7_restore_provider_message_extensions.<locals>.<genexpr>  s@         	8T""     r   NT)strictc              3  @   K   | ]}t          |t                    V  d S rE   r  )r  r$  s     r   r  z7_restore_provider_message_extensions.<locals>.<genexpr>  s@       
 
 w%%
 
 
 
 
 
r   )r&   alllenzip _PROVIDER_MESSAGE_EXTENSION_KEYS)r{  rC   r}  r~  original_messagesfinal_messagesbaseline_messagesintercepted_messagesoriginal_messagefinal_messagebaseline_messageintercepted_messager>  s                r   r  r    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"	;#; ;r   rg   rz   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.NrF  zCNeMo Relay request codec baseline failed; ignoring request rewritesTr   zTNeMo Relay request codec returned an unsupported baseline; ignoring request rewrites)
rp   r  decodeencoder   r'   r1   r   r   r   )rg   rz   r@   r    rZ   	annotatedr   rF  s           r   ri   ri     s     5(##E}%&8(CCCLL//	,,y-88'9g66gt$$ 	=)'8<<<	=   Q 	 	
 	
 	
 tt NN	$   4s   A B &B0/B0rF  c                    t          |           }t          |pi                     d          pd          dk    r|S |                    d          }t          |t                    s|S d |D             |d<   |S )Nr%   r   r   r  c                    g | ]s}t          |t                    rZ|                    d           dk    rAt          |                    d          t                    rd dit          |d                   n|tS r  )r'   r1   r&   r  s     r   r  z*_provider_request_body.<locals>.<listcomp>  s     
 
 
 	 dD!!		
 HHV
**txx
++T22 +	 J	
4
#$$	
 	
 
 
 
r   )r1   r   r&   r'   r  )rF  r    r  r  s       r   r  r    s     ==D
HN
++1r226GGGHHWEeT"" 
 
 
 
 
DM Kr   c                    t          |          }t          | dd           }||d S t          ||j        d           }t          |          r
 |            nd S )Ncodecs)r)   r   r   r   )rg   r    r,   r  rZ   s        r   rp   rp     s^    x((HUHd++F6>tFH0$77Euoo/557774/r   rK   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          |          rg	 	 t          |                     dd                    S # t          $ r$ t          |                                           cY S w xY w# 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 r   )r   r0   r  r>  items      r   r  z_jsonable.<locals>.<dictcomp>  s*    IIIic4C)D//IIIr   c                ,    g | ]}t          |          S r   )r0   r  r  s     r   r  z_jsonable.<locals>.<listcomp>  s    222D	$222r   
model_dumprL   F)modewarningsc                x    i | ]7\  }}t          |                              d           't          |          |8S )_)r   r   r  s      r   r  z_jsonable.<locals>.<dictcomp>'  sN     
 
 
Ts88&&s++
HHd
 
 
r   )r'   r   r;  floatr<   r1   r  r  tupler  r   r"  r   r0   r  rI  r   varsAttributeError)rK   r  
attributess      r   r0   r0     s   }
53UD*ABB}% JII5;;==IIII%$s+,, 322E2222elD99J
 	
5 !1!1v!1!N!NOOO 5 5 5 !1!1!3!3444445  	 	 	D	
 
!%[[..00
 
 



 ~&   5zz$.>9Z   CJJ>s<   =#C! !+DD DD 
DD#+E  E21E2c                    t          | t                    r(t          di d |                                 D             S t          | t                    rd | D             S | S )Nc                N    i | ]"\  }}t          |          t          |          #S r   )r   ru   r  s      r   r  z_namespace.<locals>.<dictcomp>3  s9     "
 "
 "
+43CHHj&&"
 "
 "
r   c                ,    g | ]}t          |          S r   )ru   r  s     r   r  z_namespace.<locals>.<listcomp>7  s     333T
4  333r   r   )r'   r1   r   r  r  rK   s    r   ru   ru   1  s    %    "
 "
8="
 "
 "
   	 % 433U3333Lr   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)rL   dumpsr0   rI  rJ  )r  r  s     r   rt   rt   ;  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   r   r   rO   r  s    r   rl   rl   D  sw    u%% " """" " " "{5!!!!!"
L  s   , AA)r    r!   r"   r#   )r*   r   r    r!   r"   r   )r*   r   r    r!   r"   r.   )r6   r.   r7   r8   r9   r   r:   r   r;   r   r    r!   r5   r<   r"   r   )r6   r.   r7   r8   r:   r   r;   r   r    r!   r5   r<   r"   r   )r"   r<   )r6   r.   r   r8   r:   r   r;   r   r   r   r    r!   r5   r<   r   r   r"   r   )r6   r.   r   r8   r9   r   r:   r   r;   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r5   r<   r"   r   )
rw   rR  rx   r   ry   r   r    r!   r"   rS  )r^   rS  ra   r   r;   rg  r*   rg  r   rg  r   rh  r"   r   )rV   r.   r]   rP   rU   rp  r^   rS  r5   r<   r"   r<   )rr  rP   r"   r<   )rU  r   ra   r   r;   rg  r*   rg  r   rg  r"   r   )r   r   r"   rg  )r{  r.   r6   r   r@   r.   rJ   r!   r    r!   r"   r.   )r6   r.   r    r!   r"   r.   )
r{  r.   rC   r.   r}  r.   r~  r.   r"   r   )
rg   r   rz   r   r@   r.   r    r!   r"   r!   )rF  r.   r    r!   r"   r.   )rg   r   r    r!   r"   r   )rK   r   r"   r   )r  r   r  r   r"   r<   )7r  
__future__r   r   rj   r  rL   loggingcollections.abcr   r   dataclassesr   typesr   typingr   agentr	   	getLoggerr   r   	frozensetr  r  r   r(   r)   r-   r4   ro   r   r   r   r   r   r   r   r  re   rs   rr   r   rx  r   rM   rf   r  ri   r  rp   r0   ru   rt   rl   r   r   r   <module>r     s   E E " " " " " "         . . . . . . . . ! ! ! ! ! ! ! ! ! ! ! !            		8	$	$ $-9-.$ $   $-9!#89$ $   $d###       $# '+%   &~$*   ).&,     5 5 5 5I I I I   $ '+%*Y Y Y Y Y YF '+%*Z Z Z Z Z ZF '+%*     < '+%*     0    '+%*AE= = = = = =P 7;-11515AE&*%*     De1 e1 e1 e1 e1x} e1 e1 e1PY" Y" Y" Y" Y" Y" Y" Y"x $  $  $  $N " $&*@D3= 3= 3= 3= 3= 3=l   0    " $&*
 
 
 
 
 
0G G G G. . . .b. . . .b5; 5; 5; 5;p   <   .0 0 0 0? ? ? ?@      	 	 	 	 	 	r   