
    piuZ                       d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZmZ d dlZddlmZmZmZmZ dd	lm Z m!Z! dd
l"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6 ddl7m8Z8 ddl9m:Z: erddl;m<Z<m=Z=  edee&e	   e(e	   e*e+f         Z> ed      Z? ej                  eA      ZB G d ded      ZC G d dee>e4f         ZD G d deDe'e4f   ee?e4f   e      ZE G d d eEe5e4   e4f         ZF G d! d"eEe1e4   e4f         ZG G d# d$eDe)e4f   ee?e4f   e      ZH G d% d&eHe5e4   e4f         ZI G d' d(eHe2e4   e4f         ZJy))    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyListUnionGenericTypeVarCallableIterableIterator	CoroutineAsyncIterator)contextmanagerasynccontextmanager)	TypedDictoverride   )BodyQueryHeadersNotGiven)consume_sync_iteratorconsume_async_iterator)BetaMessageBetaMessageParam   )BetaFunctionToolBetaRunnableToolBetaAsyncFunctionToolBetaAsyncRunnableToolBetaBuiltinFunctionToolBetaAsyncBuiltinFunctionTool)DEFAULT_THRESHOLDDEFAULT_SUMMARY_PROMPTCompactionControl   )BetaMessageStreamBetaAsyncMessageStream)ResponseFormatTParsedBetaMessageParsedBetaContentBlock)ParseMessageCreateParamsBase)BetaToolResultBlockParam)	AnthropicAsyncAnthropicAnyFunctionToolT)boundRunnerItemTc                  6    e Zd ZU ded<   ded<   ded<   ded<   y	)
RequestOptionszHeaders | Noneextra_headerszQuery | Noneextra_queryzBody | None
extra_bodyz'float | httpx.Timeout | None | NotGiventimeoutN)__name__
__module____qualname____annotations__     b/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/anthropic/lib/tools/_beta_runner.pyr6   r6   8   s    !!44r@   r6   F)totalc                  R    e Zd Zddd	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZd	dZd
dZy)BaseToolRunnerNmax_iterationscompaction_controlc                   |D ci c]  }|j                   | c}| _        i |d|d   D cg c]  }| c}i| _        || _        d| _        d | _        || _        d| _        || _        y c c}w c c}w )NmessagesFr   )	name_tools_by_name_params_options_messages_modified_cached_tool_call_response_max_iterations_iteration_count_compaction_control)selfparamsoptionstoolsrF   rG   toolmessages           rA   __init__zBaseToolRunner.__init__@   s     <AA4tyy$AG
G
z0BCWCG
  "'CG'- !#5  B Ds
   A*	A/c                L    t        |      r || j                        }|| _        y)a  
        Update the parameters for the next API call. This invalidates any cached tool responses.

        Args:
            params (ParsedMessageCreateParamsBase[ResponseFormatT] | Callable): Either new parameters or a function to mutate existing parameters
        N)callablerL   )rS   rT   s     rA   set_messages_paramsz"BaseToolRunner.set_messages_paramsU   s!     FDLL)Fr@   c                     |D cg c]-  }t        |t              r|j                  |j                  dn|/ c}d _         j                   fd       d _        yc c}w )zAdd one or more messages to the conversation history.

        This invalidates the cached tool response, i.e. if tools were already called, then they will
        be called again on the next loop iteration.
        rolecontentTc                6    i | dg j                   d   iS )NrI   )rL   )rT   message_paramsrS   s    rA   <lambda>z0BaseToolRunner.append_messages.<locals>.<lambda>o   s*    0t60t:GsV`IaGsdrGs0t r@   N)
isinstancer   r_   r`   rN   r\   rO   )rS   rI   rX   rb   s   `  @rA   append_messageszBaseToolRunner.append_messagesd   sb     $2
 CMWVaBbW\\goo>hoo2
 #'  !tu*.'2
s   2A c                P    | j                   | j                  | j                   k\  ryy)NTF)rP   rQ   rS   s    rA   _should_stopzBaseToolRunner._should_stopr   s'    +0E0EI]I]0]r@   )rT   -ParseMessageCreateParamsBase[ResponseFormatT]rU   r6   rV   zIterable[AnyFunctionToolT]rF   
int | NonerG   CompactionControl | NonereturnNone)rT   zParseMessageCreateParamsBase[ResponseFormatT] | Callable[[ParseMessageCreateParamsBase[ResponseFormatT]], ParseMessageCreateParamsBase[ResponseFormatT]]rl   rm   )rI   z5BetaMessageParam | ParsedBetaMessage[ResponseFormatT]rl   rm   rl   bool)r;   r<   r=   rY   r\   re   rh   r?   r@   rA   rD   rD   ?   so     &*7;6 >6  	6
 *6 #6 56 
6*s 
	/r@   rD   c                       e Zd Zddd	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZeedd              ZddZ	ddZ
dd	Zdd
ZddZddZddZ xZS )BaseSyncToolRunnerNrE   c               t    t         |   |||||       || _        | j                         | _        d | _        y N)rT   rU   rV   rF   rG   superrY   _client__run__	_iterator_last_messagerS   rT   rU   rV   clientrF   rG   	__class__s          rA   rY   zBaseSyncToolRunner.__init__y   sI     	)1 	 	
   	r@   c                6    | j                   j                         S N)rx   __next__rg   s    rA   r   zBaseSyncToolRunner.__next__   s    ~~&&((r@   c              #  6   K   | j                   D ]  }|  y wr~   rx   rS   items     rA   __iter__zBaseSyncToolRunner.__iter__   s     NN 	DJ	s   c              #     K   t               wr~   NotImplementedErrorrg   s    rA   _handle_requestz"BaseSyncToolRunner._handle_request         "##   c                  
 | j                   | j                   d   sy| j                         }d}|e|j                  j                  |j                  j                  xs dz   |j                  j
                  xs dz   }||j                  j                  z   }| j                   j                  dt              }||k  ryt        j                  d| d| d       | j                   j                  d| j                  d         }t        | j                  d	         }|d
   d   dk(  rT|d
   d   D cg c](  }t        |t              r|j                  d      dk7  r|* }}|r	||d
   d<   n|j                          g |t!        d| j                   j                  dt"                    }| j$                  j&                  j(                  j+                  ||| j                  d   ddi      }	t        j                  d|	j                  j                          t        |	j,                        d   

j.                  dk7  rt1        d      | j3                  
fd       yc c}w )
        Check token usage and compact messages if threshold exceeded.
        Returns True if compaction was performed, False otherwise.
        enabledFr   context_token_thresholdToken usage  has exceeded the threshold of . Performing compaction.modelrI   r_   	assistantr`   typetool_useusersummary_promptr^   
max_tokensX-Stainless-Helper
compactionr   rI   r   r7   &Compaction complete. New token usage: text1Compaction response content is not of type 'text'c                8    i | dddj                   dgdgiS NrI   r   r   )r   r   r^   r   rT   first_contents    rA   rc   z7BaseSyncToolRunner._check_and_compact.<locals>.<lambda>   ?      & )/(5(:(:$
 r@   TrR   _get_last_messageusageinput_tokenscache_creation_input_tokenscache_read_input_tokensoutput_tokensgetr%   loginforL   listrd   dictpopr   r&   rv   betarI   creater`   r   
ValueErrorr\   rS   rX   tokens_usedtotal_input_tokens	thresholdr   rI   blocknon_tool_blocksresponser   s             @rA   _check_and_compactz%BaseSyncToolRunner._check_and_compact   s^   
 ##+43K3KI3V((***==<<AC==88=A? 
 -w}}/J/JJK,,001JL]^	" 	<},KI;Vnop((,,Wdll76KLZ01B<;.
 &b\)4eT*uyy/@J/N O  *9Y'

00445EG]^
 <<$$--44||L1/>	 5 
 	9(..:V:V9WXYX--.q1'PQQ  	
  cs   /-Ic              #    K   | j                         s| j                         5 }| | j                         }|J 	 d d d        | xj                  dz  c_        | j	                         sF| j                         }|t        j                  d       y | j                  s| j                  |       d| _        d | _
        | j                         sy y # 1 sw Y   xY wwNr   z;Tool call was not requested, exiting from tool runner loop.Frh   r   r   rQ   r   generate_tool_call_responser   debugrN   re   rO   rS   r   rX   r   s       rA   rw   zBaseSyncToolRunner.__run__   s     ##%%%' +4
002***+
 !!Q&! **,;;=#II[\..(((;&+D#.2D+' ##%+ +s"   !CCBCCCCc                D    t        |        | j                         }|J |S )
        Consumes the tool runner stream and returns the last message if it has not been consumed yet.
        If it has, it simply returns the last message.
        )r   r   rS   last_messages     rA   
until_donezBaseSyncToolRunner.until_done  s,    
 	d#--/'''r@   c                    | j                   !t        j                  d       | j                   S | j                         }|| _         |S )  Generate a MessageParam by calling tool functions with any tool use blocks from the last message.

        Note the tool call response is cached, repeated calls to this method will return the same response.

        None can be returned if no tool call was applicable.
        $Returning cached tool call response.rO   r   r   _generate_tool_call_responserS   r   s     rA   r   z.BaseSyncToolRunner.generate_tool_call_response  sD     **6II<=222446*2'r@   c           
        | j                         }|sy |D cg c]  }|j                  dk(  s| }}|sy g }|D ]  }| j                  j                  |j                        }|}t        j                  d|j                   dt        | j                  j                                dt        d       |j                  d|j                  d|j                   d	d
d       	 |j                  |j                        }|j                  d|j                  |d        d|dS c c}w # t        $ rX}t        j!                  d|j                   |       |j                  d|j                  t#        |      d
d       Y d }~Jd }~ww xY w)Nr   Tool '-' not found in tool runner. Available tools: z. If using a raw tool definition, handle the tool call manually and use `append_messages()` to add the result. Otherwise, pass the tool using `beta_tool(func)` or a `@beta_tool` decorated function.r   
stackleveltool_resultError: Tool '' not foundTr   tool_use_idr`   is_errorr   r   r`   #Error occurred while calling tool: exc_infor   r^   #_get_last_assistant_message_contentr   rK   r   rJ   warningswarnr   keysUserWarningappendidcallinput	Exceptionr   	exceptionrepr	rS   r`   r   tool_use_blocksresultsr   rW   resultexcs	            rA   r   z/BaseSyncToolRunner._generate_tool_call_response   s   ::<.5RUz9Q5RR24' !	H&&**8==9D|X]]O ,((,T-@-@-E-E-G(H'I Jmn     -'/{{%28==/#M$(	 8>>2hkk^def/!	F 733S S<  	 CDII;OZ]^ -'/{{#'9$(	 	s#   D#D#":D((	F	1AFF	c                d    t        | j                        r| j                         S | j                  S r~   r[   ry   rg   s    rA   r   z$BaseSyncToolRunner._get_last_messageP  s+    D&&'%%''!!!r@   c                v    | j                         }||j                  dk7  s|j                  sy |j                  S Nr   r   r_   r`   r   s     rA   r   z6BaseSyncToolRunner._get_last_assistant_message_contentU  s:    --/<#4#4#C<K_K_###r@   )rT   ri   rU   r6   rV   zIterable[BetaRunnableTool]r{   r0   rF   rj   rG   rk   rl   rm   rl   r4   )rl   zIterator[RunnerItemT]rn   rl   z"ParsedBetaMessage[ResponseFormatT]rl   zBetaMessageParam | Nonerl   z)ParsedBetaMessage[ResponseFormatT] | Nonerl   z4list[ParsedBetaContentBlock[ResponseFormatT]] | None)r;   r<   r=   rY   r   r   r   r   r   r   rw   r   r   r   r   r   __classcell__r|   s   @rA   rq   rq   x   s     &*7; >  	
 *  # 5 
0)   Rh3,.4`"
$r@   rq   c                  (    e Zd Zeedd              Zy)BetaToolRunnerc              #     K    | j                   j                  j                  j                  di | j                  | j
                  }|| _        | y wNr?   rv   r   rI   parserL   rM   ry   rS   rX   s     rA   r   zBetaToolRunner._handle_request^  sG      3$,,##,,22ST\\ST]]S$s   AAN)rl   z,Iterator[ParsedBetaMessage[ResponseFormatT]]r;   r<   r=   r   r   r   r?   r@   rA   r   r   ]  s      r@   r   c                  (    e Zd Zeedd              Zy)BetaStreamingToolRunnerc              #     K    | j                   j                  j                  j                  di | j                  | j
                  5 }|j                  | _        | d d d        y # 1 sw Y   y xY wwr   rv   r   rI   streamrL   rM   get_final_messagery   rS   r  s     rA   r   z'BetaStreamingToolRunner._handle_requestg  sb      /T\\''..OOO 	SY!'!9!9DL	 	 	s   AA4	A(	A4(A1-A4N)rl   z,Iterator[BetaMessageStream[ResponseFormatT]]r  r?   r@   rA   r  r  f  s      r@   r  c                       e Zd Zddd	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZeedd              ZddZ	ddZ
dd	Zdd
ZddZddZddZ xZS )BaseAsyncToolRunnerNrE   c               t    t         |   |||||       || _        | j                         | _        d | _        y rs   rt   rz   s          rA   rY   zBaseAsyncToolRunner.__init__r  sI     	)1 	 	
 
 	 	r@   c                R   K   | j                   j                          d {   S 7 wr~   )rx   	__anext__rg   s    rA   r  zBaseAsyncToolRunner.__anext__  s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr~   r   r   s     rA   	__aiter__zBaseAsyncToolRunner.__aiter__  s&     .. 	 	$J	.s   "  " "c                  K   t               wr~   r   rg   s    rA   r   z#BaseAsyncToolRunner._handle_request  r   r   c                  
K   | j                   | j                   d   sy| j                          d{   }d}|e|j                  j                  |j                  j                  xs dz   |j                  j
                  xs dz   }||j                  j                  z   }| j                   j                  dt              }||k  ryt        j                  d| d| d       | j                   j                  d	| j                  d	         }t        | j                  d
         }|d   d   dk(  rT|d   d   D cg c](  }t        |t              r|j                  d      dk7  r|* }}|r	||d   d<   n|j                          g | j                  d
   t!        d| j                   j                  dt"                    }| j$                  j&                  j(                  j+                  ||| j                  d   ddi       d{   }	t        j                  d|	j                  j                          t        |	j,                        d   

j.                  dk7  rt1        d      | j3                  
fd       y7 Ic c}w 7 w)r   Nr   Fr   r   r   r   r   r   rI   r   r_   r   r`   r   r   r   r   r^   r   r   r   r   r   r   r   c                8    i | dddj                   dgdgiS r   r   r   s    rA   rc   z8BaseAsyncToolRunner._check_and_compact.<locals>.<lambda>  r   r@   Tr   r   s             @rA   r   z&BaseAsyncToolRunner._check_and_compact  s}    
 ##+43K3KI3V..00**==<<AC==88=A? 
 -w}}/J/JJK,,001JL]^	" 	<},KI;Vnop((,,Wdll76KLZ01B<;.
 &b\)4eT*uyy/@J/N O  *9Y'
\\*%
00445EG]^
 **33::||L1/>	 ; 
 
 	9(..:V:V9WXYX--.q1'PQQ  	
  U 12&
s0   0JI<DJ9-I?&BJJA8J?Jc               4  K   | j                         s| j                         4 d {   }| | j                          d {   }|J d d d       d {    | xj                  dz  c_        | j	                          d {   sN| j                          d {   }|t        j                  d       y | j                  s| j                  |       d| _        d | _
        | j                         sy y 7 7 7 # 1 d {  7  sw Y   xY w7 7 xwr   r   r   s       rA   rw   zBaseAsyncToolRunner.__run__  s    ##%++- + +
 $ 6 6 88***+ +
 !!Q&! 00222!%!A!A!CC#II[\..(((;&+D#.2D+' ##%+8+ + + + 3Cs{   %DC9DC?C;C?DC=,DDDDAD7D;C?=D?DDDDDc                t   K   t        |        d{    | j                          d{   }|J |S 7 "7 w)r   N)r   r   r   s     rA   r   zBaseAsyncToolRunner.until_done  sB     
 %T***!3355''' 	+5s   848688c                   K   | j                   !t        j                  d       | j                   S | j                          d{   }|| _         |S 7 w)r   Nr   r   r   s     rA   r   z/BaseAsyncToolRunner.generate_tool_call_response  sP      **6II<=222::<<*2' =s   AAAAc                   K   t        | j                        r| j                          d {   S | j                  S 7 wr~   r   rg   s    rA   r   z%BaseAsyncToolRunner._get_last_message  s7     D&&'++---!!! .s   )><>c                   K   | j                          d {   }||j                  dk7  s|j                  sy |j                  S 7 .wr   r   r   s     rA   r   z7BaseAsyncToolRunner._get_last_assistant_message_content!  sF     !3355<#4#4#C<K_K_###	 6s   AA/Ac           
     J  K   | j                          d {   }|sy |D cg c]  }|j                  dk(  s| }}|sy g }|D ]  }| j                  j                  |j                        }|}t        j                  d|j                   dt        | j                  j                                dt        d       |j                  d|j                  d|j                   d	d
d       	 |j                  |j                         d {   }|j                  d|j                  |d        d|dS 7 c c}w 7 2# t        $ rX}t        j!                  d|j                   |       |j                  d|j                  t#        |      d
d       Y d }~Wd }~ww xY ww)Nr   r   r   z. If using a raw tool definition, handle the tool call manually and use `append_messages()` to add the result. Otherwise, pass the tool using `beta_async_tool(func)` or a `@beta_async_tool` decorated function.r   r   r   r   r   Tr   r   r   r   r   r^   r   r   s	            rA   r   z0BaseAsyncToolRunner._generate_tool_call_response(  s    @@BB.5RUz9Q5RR24' !	H&&**8==9D|X]]O ,((,T-@-@-E-E-G(H'I Jyz     -'/{{%28==/#M$(	 #yy88hkk^def/!	F 733[ C S8 9 	 CDII;OZ]^ -'/{{#'9$(	 	sb   F#D5F#D8D8B0F#,D?
D=#D?.F#8F#=D??	F AFF#F  F#)rT   ri   rU   r6   rV   zIterable[BetaAsyncRunnableTool]r{   r1   rF   rj   rG   rk   rl   rm   r   )rl   zAsyncIterator[RunnerItemT]rn   r   r   r   r   )r;   r<   r=   rY   r  r  r   r   r   r   rw   r   r   r   r   r   r   r   s   @rA   r  r  o  s     &*7; >  	
 /  # 5 
40   Rh3,"
$.4r@   r  c                  (    e Zd Zeedd              Zy)BetaAsyncToolRunnerc                  K    | j                   j                  j                  j                  di | j                  | j
                   d {   }|| _        | y 7 wr   r   r  s     rA   r   z#BetaAsyncToolRunner._handle_requestZ  sP      9))2288Y4<<Y4==YY$ Zs   A
A AA N)rl   z1AsyncIterator[ParsedBetaMessage[ResponseFormatT]]r;   r<   r=   r   r   r   r?   r@   rA   r  r  Y  s      r@   r  c                  (    e Zd Zeedd              Zy)BetaAsyncStreamingToolRunnerc               (  K    | j                   j                  j                  j                  di | j                  | j
                  4 d {   }|j                  | _        | d d d       d {    y 7 +7 # 1 d {  7  sw Y   y xY wwr   r  r
  s     rA   r   z,BetaAsyncStreamingToolRunner._handle_requestc  s}      54<<$$--44Ut||Ut}}U 	 	Y_!'!9!9DL	 	 	 	 	 	 	sH   ABA9BA=(B3A;4B;B=BBBBN)rl   z6AsyncIterator[BetaAsyncMessageStream[ResponseFormatT]]r  r?   r@   rA   r   r   b  s      r@   r   )K
__future__r   loggingr   abcr   r   typingr   r   r   r	   r
   r   r   r   r   r   r   
contextlibr   r   typing_extensionsr   r   httpx_typesr   r   r   r   _utilsr   r   
types.betar   r   _beta_functionsr   r    r!   r"   r#   r$   _beta_compaction_controlr%   r&   r'   streaming._beta_messagesr)   r*   types.beta.parsed_beta_messager+   r,   r-    types.beta.message_create_paramsr.   'types.beta.beta_tool_result_block_paramr/   rv   r0   r1   r2   r4   	getLoggerr;   r   r6   rD   rq   r   r  r  r  r   r?   r@   rA   <module>r3     s   "   #    ; 1  4 4 C 7  c b P h h L O4 
4S9;RTpp  m$g!5Ye 56W->? 6rb$(8/(IJGT_apTpLqsv b$J'(9/(JO([\ 01B?1SUd1de g4(/9:GKQ`D`<acfg4T-.?.PRa.ab #67Mo7^`o7o#p r@   