
     `iuZ                    r   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                   ZJdS ))    )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                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
RequestOptionszHeaders | Noneextra_headerszQuery | Noneextra_queryzBody | None
extra_bodyz'float | httpx.Timeout | None | NotGiventimeoutN)__name__
__module____qualname____annotations__     t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/anthropic/lib/tools/_beta_runner.pyr6   r6   8   sB         !!!!444444r@   r6   F)totalc                  6    e Zd ZdddddZddZddZddZdS )BaseToolRunnerNmax_iterationscompaction_controlparams-ParseMessageCreateParamsBase[ResponseFormatT]optionsr6   toolsIterable[AnyFunctionToolT]rF   
int | NonerG   CompactionControl | NonereturnNonec                   d |D             | _         i |dd |d         D             i| _        || _        d| _        d | _        || _        d| _        || _        d S )Nc                    i | ]
}|j         |S r?   )name).0tools     rA   
<dictcomp>z+BaseToolRunner.__init__.<locals>.<dictcomp>I   s    AAA4ty$AAAr@   messagesc                    g | ]}|S r?   r?   rT   messages     rA   
<listcomp>z+BaseToolRunner.__init__.<locals>.<listcomp>L   s    CCCWCCCr@   Fr   )_tools_by_name_params_options_messages_modified_cached_tool_call_response_max_iterations_iteration_count_compaction_control)selfrH   rJ   rK   rF   rG   s         rA   __init__zBaseToolRunner.__init__@   s     BA5AAAG
G
CCz0BCCCG
 G
  "'CG'- !#5   r@   ParseMessageCreateParamsBase[ResponseFormatT] | Callable[[ParseMessageCreateParamsBase[ResponseFormatT]], ParseMessageCreateParamsBase[ResponseFormatT]]c                R    t          |          r || j                  }|| _        dS )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)callabler]   )rd   rH   s     rA   set_messages_paramsz"BaseToolRunner.set_messages_paramsU   s0     F 	*VDL))Fr@   rW   5BetaMessageParam | ParsedBetaMessage[ResponseFormatT]c                p     d |D             d _                               fd           d _        dS )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.
        c                Z    g | ](}t          |t                    r|j        |j        d n|)S )rolecontent)
isinstancer   rn   ro   rY   s     rA   r[   z2BaseToolRunner.append_messages.<locals>.<listcomp>j   sL     2
 2
 2
 CMWVaBbBboW\go>>>ho2
 2
 2
r@   Tc                2    i | dg j         d         iS )NrW   )r]   )rH   message_paramsrd   s    rA   <lambda>z0BaseToolRunner.append_messages.<locals>.<lambda>o   s+    0t60t:GsV`IaGsdrGs0t0t r@   N)r_   ri   r`   )rd   rW   rr   s   ` @rA   append_messageszBaseToolRunner.append_messagesd   s[    2
 2
#2
 2
 2
 #'  !t!t!t!t!tuuu*.'''r@   boolc                8    | j         | j        | j         k    rdS dS )NTF)ra   rb   rd   s    rA   _should_stopzBaseToolRunner._should_stopr   s%    +0EI]0]0]4ur@   )rH   rI   rJ   r6   rK   rL   rF   rM   rG   rN   rO   rP   )rH   rf   rO   rP   )rW   rj   rO   rP   rO   ru   )r;   r<   r=   re   ri   rt   rx   r?   r@   rA   rD   rD   ?   sv         &*7;6 6 6 6 6 6*   / / / /     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   rH   rI   rJ   r6   rK   Iterable[BetaRunnableTool]clientr0   rF   rM   rG   rN   rO   rP   c                   t                                          |||||           || _        |                                 | _        d | _        d S N)rH   rJ   rK   rF   rG   superre   _client__run__	_iterator_last_messagerd   rH   rJ   rK   r}   rF   rG   	__class__s          rA   re   zBaseSyncToolRunner.__init__y   s`     	)1 	 	
 	
 	
   	r@   r4   c                4    | j                                         S N)r   __next__rw   s    rA   r   zBaseSyncToolRunner.__next__   s    ~&&(((r@   Iterator[RunnerItemT]c              #  &   K   | j         D ]}|V  d S r   r   rd   items     rA   __iter__zBaseSyncToolRunner.__iter__   s,      N 	 	DJJJJ	 	r@   c              #  "   K   t                      r   NotImplementedErrorrw   s    rA   _handle_requestz"BaseSyncToolRunner._handle_request          "###r@   ru   c                6  	 | j         | j         d         sdS |                                 }d}|9|j        j        |j        j        pdz   |j        j        pdz   }||j        j        z   }| j                             dt                    }||k     rdS t          
                    d| d| d           | j                             d	| j        d	                   }t          | j        d
                   }|d         d         dk    r:d |d         d         D             }|r||d         d<   n|                                 g |t          d| j                             dt                              }| j        j        j                            ||| j        d         ddi          }t          
                    d|j        j                    t          |j                  d         		j        dk    rt-          d          |                     	fd           dS )
        Check token usage and compact messages if threshold exceeded.
        Returns True if compaction was performed, False otherwise.
        NenabledFr   context_token_thresholdToken usage  has exceeded the threshold of . Performing compaction.modelrW   rn   	assistantc                n    g | ]2}t          |t                    r|                    d           dk    0|3S typetool_userp   dictgetrT   blocks     rA   r[   z9BaseSyncToolRunner._check_and_compact.<locals>.<listcomp>   M       eT** 05yy/@/@J/N/N /N/N/Nr@   ro   usersummary_promptrm   
max_tokensX-Stainless-Helper
compactionr   rW   r   r7   &Compaction complete. New token usage: text1Compaction response content is not of type 'text'c                .    i | dddj         dgdgiS NrW   r   r   )r   r   rm   r   rH   first_contents    rA   rs   z7BaseSyncToolRunner._check_and_compact.<locals>.<lambda>   K      & )/(5(: $ 
  r@   Trc   _get_last_messageusageinput_tokenscache_creation_input_tokenscache_read_input_tokensoutput_tokensr   r%   loginfor]   listpopr   r&   r   betarW   createro   r   
ValueErrorri   
rd   rZ   tokens_usedtotal_input_tokens	thresholdr   rW   non_tool_blocksresponser   s
            @rA   _check_and_compactz%BaseSyncToolRunner._check_and_compact   sk   
 #+43KI3V+5((***=<AC=8=A? 
 -w}/JJK,001JL]^^	""5 	oooIoooppp(,,Wdl76KLLZ011B<;.. %b\)4  O  *9Y''

0445EG]^^  
 <$-44|L1/>	 5 
 
 	X(.:VXXYYYX-..q1''PQQQ     	
 	
 	
  tr@   c              #    K   |                                  s|                                 5 }|V  |                                 }|J 	 d d d            n# 1 swxY w Y   | xj        dz  c_        |                                 sO|                                 }|t                              d           d S | j        s| 	                    ||           d| _        d | _
        |                                  d S d S Nr   z;Tool call was not requested, exiting from tool runner loop.Frx   r   r   rb   r   generate_tool_call_responser   debugr_   rt   r`   rd   r   rZ   r   s       rA   r   zBaseSyncToolRunner.__run__   s]     ##%% 	3%%'' +4


0022****+ + + + + + + + + + + + + + +
 !!Q&!! **,, <;;==#II[\\\F. <(((;;;&+D#.2D+' ##%% 	3 	3 	3 	3 	3s   AAA"ParsedBetaMessage[ResponseFormatT]c                T    t          |            |                                 }|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   rd   last_messages     rA   
until_donezBaseSyncToolRunner.until_done  s5    
 	d###--//'''r@   BetaMessageParam | Nonec                    | j         !t                              d           | j         S |                                 }|| _         |S a  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.
        Nz$Returning cached tool call response.r`   r   r   _generate_tool_call_responserd   r   s     rA   r   z.BaseSyncToolRunner.generate_tool_call_response  sG     *6II<===224466*2'r@   c           
        |                                  }|sd S d |D             }|sd S g }|D ]9}| j                            |j                  }|ut	          j        d|j         dt          | j                                                   dt          d           |	                    d|j
        d|j         d	d
d           	 |                    |j                  }|	                    d|j
        |d           # t          $ r[}t                              d|j         |           |	                    d|j
        t!          |          d
d           Y d }~3d }~ww xY wd|dS )Nc                (    g | ]}|j         d k    |S r   r   r   s     rA   r[   zCBaseSyncToolRunner._generate_tool_call_response.<locals>.<listcomp>%  $    RRRUz9Q9Q59Q9Q9Qr@   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_idro   is_errorr   r   ro   #Error occurred while calling tool: exc_infor   rm   #_get_last_assistant_message_contentr\   r   rS   warningswarnr   keysUserWarningappendidcallinput	Exceptionr   	exceptionreprrd   ro   tool_use_blocksresultsr   rU   resultexcs           rA   r   z/BaseSyncToolRunner._generate_tool_call_response   s   ::<< 	4RRgRRR 	424' !	 !	H&**8=99D|nX] n n(,T-@-E-E-G-G(H(Hn n n        -'/{#M8=#M#M#M$(	    8>22hk^deeffff 	 	 	ODIOOZ]^^^ -'/{#'99$(	        	 7333s   8D  
E%
AE  E%)ParsedBetaMessage[ResponseFormatT] | Nonec                `    t          | j                  r|                                 S | j        S r   rh   r   rw   s    rA   r   z$BaseSyncToolRunner._get_last_messageP  s0    D&'' 	(%%'''!!r@   4list[ParsedBetaContentBlock[ResponseFormatT]] | Nonec                d    |                                  }||j        dk    s|j        sd S |j        S Nr   r   rn   ro   r   s     rA   r   z6BaseSyncToolRunner._get_last_assistant_message_contentU  s<    --//<#4#C#C<K_#C4##r@   )rH   rI   rJ   r6   rK   r|   r}   r0   rF   rM   rG   rN   rO   rP   rO   r4   )rO   r   ry   rO   r   rO   r   rO   r  rO   r  )r;   r<   r=   re   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @rA   r{   r{   x   s3        &*7;       0) ) ) )       ^ ^R R R Rh3 3 3 3,      .4 .4 .4 .4`" " " "
$ $ $ $ $ $ $ $r@   r{   c                  6    e Zd Zeedd                        ZdS )BetaToolRunnerrO   ,Iterator[ParsedBetaMessage[ResponseFormatT]]c              #  p   K    | j         j        j        j        di | j        | j        }|| _        |V  d S Nr?   r   r   rW   parser]   r^   r   rd   rZ   s     rA   r   zBetaToolRunner._handle_request^  sF       3$,#,2SST\ST]SS$r@   N)rO   r  r;   r<   r=   r   r   r   r?   r@   rA   r  r  ]  s<           ^ X  r@   r  c                  6    e Zd Zeedd                        ZdS )BetaStreamingToolRunnerrO   ,Iterator[BetaMessageStream[ResponseFormatT]]c              #     K    | j         j        j        j        di | j        | j        5 }|j        | _        |V  d d d            d S # 1 swxY w Y   d S r  r   r   rW   streamr]   r^   get_final_messager   rd   r!  s     rA   r   z'BetaStreamingToolRunner._handle_requestg  s       /T\'.OOOOO 	SY!'!9DLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A		AAN)rO   r  r  r?   r@   rA   r  r  f  s<           ^ X  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   rH   rI   rJ   r6   rK   Iterable[BetaAsyncRunnableTool]r}   r1   rF   rM   rG   rN   rO   rP   c                   t                                          |||||           || _        |                                 | _        d | _        d S r   r   r   s          rA   re   zBaseAsyncToolRunner.__init__r  s`     	)1 	 	
 	
 	
 
 	 	r@   r4   c                D   K   | j                                          d {V S r   )r   	__anext__rw   s    rA   r)  zBaseAsyncToolRunner.__anext__  s,      ^--/////////r@   AsyncIterator[RunnerItemT]c               4   K   | j         2 3 d {V }|W V  6 d S r   r   r   s     rA   	__aiter__zBaseAsyncToolRunner.__aiter__  sF      . 	 	 	 	 	 	 	$JJJJJ )..s   c               "   K   t                      r   r   rw   s    rA   r   z#BaseAsyncToolRunner._handle_request  r   r@   ru   c                h  	K   | j         | j         d         sdS |                                  d{V }d}|9|j        j        |j        j        pdz   |j        j        pdz   }||j        j        z   }| j                             dt                    }||k     rdS t          
                    d| d| d           | j                             d	| j        d	                   }t          | j        d
                   }|d         d         dk    r:d |d         d         D             }|r||d         d<   n|                                 g | j        d
         t          d| j                             dt                              }| j        j        j                            ||| j        d         ddi           d{V }t          
                    d|j        j                    t          |j                  d         		j        dk    rt-          d          |                     	fd           dS )r   Nr   Fr   r   r   r   r   r   rW   r   rn   r   c                n    g | ]2}t          |t                    r|                    d           dk    0|3S r   r   r   s     rA   r[   z:BaseAsyncToolRunner._check_and_compact.<locals>.<listcomp>  r   r@   ro   r   r   rm   r   r   r   r   r   r   r   c                .    i | dddj         dgdgiS r   r   r   s    rA   rs   z8BaseAsyncToolRunner._check_and_compact.<locals>.<lambda>  r   r@   Tr   r   s
            @rA   r   z&BaseAsyncToolRunner._check_and_compact  s     
 #+43KI3V+5..00000000*=<AC=8=A? 
 -w}/JJK,001JL]^^	""5 	oooIoooppp(,,Wdl76KLLZ011B<;.. %b\)4  O  *9Y''
\*%
0445EG]^^  
 *3::|L1/>	 ; 
 
 
 
 
 
 
 
 	X(.:VXXYYYX-..q1''PQQQ     	
 	
 	
  tr@   c               @  K   |                                  s|                                 4 d {V }|W V  |                                  d {V }|J 	 d d d           d {V  n# 1 d {V swxY w Y   | xj        dz  c_        |                                  d {V sU|                                  d {V }|t                              d           d S | j        s| 	                    ||           d| _        d | _
        |                                  d S d S r   r   r   s       rA   r   zBaseAsyncToolRunner.__run__  s     ##%% 	3++-- + + + + + + +



 $ 6 6 8 8888888****+ + + + + + + + + + + + + + + + + + + + + + + + + + +
 !!Q&!! 0022222222 <!%!A!A!C!CCCCCCC#II[\\\F. <(((;;;&+D#.2D+' ##%% 	3 	3 	3 	3 	3s   $A))
A36A3r   c                p   K   t          |            d{V  |                                  d{V }|J |S )r   N)r   r   r   s     rA   r   zBaseAsyncToolRunner.until_done  s]      
 %T*********!3355555555'''r@   r   c                   K   | j         !t                              d           | j         S |                                  d{V }|| _         |S r   r   r   s     rA   r   z/BaseAsyncToolRunner.generate_tool_call_response  s]       *6II<===22::<<<<<<<<*2'r@   r  c                p   K   t          | j                  r|                                  d {V S | j        S r   r  rw   s    rA   r   z%BaseAsyncToolRunner._get_last_message  sF      D&'' 	.++---------!!r@   r  c                t   K   |                                   d {V }||j        dk    s|j        sd S |j        S r
  r  r   s     rA   r   z7BaseAsyncToolRunner._get_last_assistant_message_content!  sR      !3355555555<#4#C#C<K_#C4##r@   c           
       K   |                                   d {V }|sd S d |D             }|sd S g }|D ]?}| j                            |j                  }|ut	          j        d|j         dt          | j                                                   dt          d           |	                    d|j
        d|j         d	d
d           	 |                    |j                   d {V }|	                    d|j
        |d           # t          $ r[}t                              d|j         |           |	                    d|j
        t!          |          d
d           Y d }~9d }~ww xY wd|dS )Nc                (    g | ]}|j         d k    |S r   r   r   s     rA   r[   zDBaseAsyncToolRunner._generate_tool_call_response.<locals>.<listcomp>-  r   r@   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   rm   r   r   s           rA   r   z0BaseAsyncToolRunner._generate_tool_call_response(  s     @@BBBBBBBB 	4RRgRRR 	424' !	 !	H&**8=99D|zX] z z(,T-@-E-E-G-G(H(Hz z z        -'/{#M8=#M#M#M$(	    #yy88888888hk^deeffff 	 	 	ODIOOZ]^^^ -'/{#'99$(	        	 7333s   >D
E3AE..E3)rH   rI   rJ   r6   rK   r&  r}   r1   rF   rM   rG   rN   rO   rP   r  )rO   r*  ry   r  r  r  r  )r;   r<   r=   re   r)  r,  r   r   r   r   r   r   r   r   r   r   r  r  s   @rA   r%  r%  o  s3        &*7;       40 0 0 0        ^R R R Rh3 3 3 3,      " " " "
$ $ $ $.4 .4 .4 .4 .4 .4 .4 .4r@   r%  c                  6    e Zd Zeedd                        ZdS )BetaAsyncToolRunnerrO   1AsyncIterator[ParsedBetaMessage[ResponseFormatT]]c               ~   K    | j         j        j        j        di | j        | j         d {V }|| _        |W V  d S r  r  r  s     rA   r   z#BetaAsyncToolRunner._handle_requestZ  sZ       9)28YY4<Y4=YYYYYYYY$r@   N)rO   r:  r;   r<   r=   r   r   r   r?   r@   rA   r9  r9  Y  s=            X  r@   r9  c                  6    e Zd Zeedd                        ZdS )BetaAsyncStreamingToolRunnerrO   6AsyncIterator[BetaAsyncMessageStream[ResponseFormatT]]c                  K    | j         j        j        j        di | j        | j        4 d {V }|j        | _        |W V  d d d           d {V  d S # 1 d {V swxY w Y   d S r  r   r#  s     rA   r   z,BetaAsyncStreamingToolRunner._handle_requestc  s      54<$-4UUt|Ut}UU 	 	 	 	 	 	 	Y_!'!9DLLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   A
A #A N)rO   r?  r<  r?   r@   rA   r>  r>  b  s=            X  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/   r   r0   r1   r2   r4   	getLoggerr;   r   r6   rD   r{   r  r  r%  r9  r>  r?   r@   rA   <module>rR     s   " " " " " "   # # # # # # # #                          ; : : : : : : : 1 1 1 1 1 1 1 1  4 4 4 4 4 4 4 4 4 4 4 4 C C C C C C C C 7 7 7 7 7 7 7 7                c b b b b b b b b b P P P P P P P P h h h h h h h h h h L L L L L L O O O O O O 544444444 7
4S9;RTpp    gm$$g!!5 5 5 5 5Ye 5 5 5 56 6 6 6 6W->? 6 6 6rb$ b$ b$ b$ b$(8/(IJGT_apTpLqsv b$ b$ b$J    '(9/(JO([\       01B?1SUd1de   g4 g4 g4 g4 g4(/9:GKQ`D`<acfg4 g4 g4T    -.?.PRa.ab       #67Mo7^`o7o#p     r@   