
    Lh&=                    `   d dl m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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 m!Z! d
dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ erddl0m1Z1m2Z2  ede
e#e   e%e   e'e(f         Z3 ed      Z4 ejj                  e6      Z7 G d ded      Z8 G d dee3         Z9 G d de9e$   ee4   e      Z: G d de:e         Z; G d de:e*         Z< G d  d!e9e&   ee4   e      Z= G d" d#e=e         Z> G d$ d%e=e+         Z?y)&    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyListUnionGenericTypeVarCallableIterableIterator	CoroutineAsyncIterator)	TypedDictoverride   )BodyQueryHeadersNotGiven)consume_sync_iteratorconsume_async_iterator)BetaMessageBetaContentBlockBetaMessageParam   )BetaFunctionToolBetaRunnableToolBetaAsyncFunctionToolBetaAsyncRunnableToolBetaBuiltinFunctionToolBetaAsyncBuiltinFunctionTool   )BetaMessageStreamBetaAsyncMessageStream)MessageCreateParamsBase)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__     S/var/www/html/venv/lib/python3.12/site-packages/anthropic/lib/tools/_beta_runner.pyr/   r/   4   s    !!44r9   r/   F)totalc                  L    e Zd Zdd	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 ddZd	dZd
dZy)BaseToolRunnerNmax_iterationsc                   |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)selfparamsoptionstoolsr?   toolmessages          r:   __init__zBaseToolRunner.__init__<   s     <AA4tyy$A1
1
z0BCWC1
  "'CG'- ! B Ds
   A#	A(c                L    t        |      r || j                        }|| _        y)z
        Update the parameters for the next API call. This invalidates any cached tool responses.

        Args:
            params (MessageCreateParamsBase | Callable): Either new parameters or a function to mutate existing parameters
        N)callablerD   )rJ   rK   s     r:   set_messages_paramsz"BaseToolRunner.set_messages_paramsO   s!     FDLL)Fr9   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 )NrA   )rD   )rK   message_paramsrJ   s    r:   <lambda>z0BaseToolRunner.append_messages.<locals>.<lambda>g   s*    0t60t:GsV`IaGsdrGs0t r9   N)
isinstancer   rV   rW   rF   rS   rG   )rJ   rA   rO   rY   s   `  @r:   append_messageszBaseToolRunner.append_messages\   sb     $2
 CMWVaBbW\\goo>hoo2
 #'  !tu*.'2
s   2A c                P    | j                   | j                  | j                   k\  ryy)NTF)rH   rI   rJ   s    r:   _should_stopzBaseToolRunner._should_stopj   s'    +0E0EI]I]0]r9   )
rK   r'   rL   r/   rM   zIterable[AnyFunctionToolT]r?   
int | NonereturnNone)rK   zVMessageCreateParamsBase | Callable[[MessageCreateParamsBase], MessageCreateParamsBase]ra   rb   )rA   zBetaMessageParam | BetaMessagera   rb   )ra   bool)r4   r5   r6   rP   rS   r\   r_   r8   r9   r:   r=   r=   ;   s]     &*" ("  	"
 *" #" 
"&l	/r9   r=   c                       e Zd Zdd	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZedd       ZddZddZ	dd	Z
dd
ZddZ xZS )BaseSyncToolRunnerNr>   c               r    t         |   ||||       || _        | j                         | _        d | _        y N)rK   rL   rM   r?   superrP   _client__run__	_iterator_last_messagerJ   rK   rL   rM   clientr?   	__class__s         r:   rP   zBaseSyncToolRunner.__init__q   s8     	uUcdMQr9   c                6    | j                   j                         S N)rl   __next__r^   s    r:   rs   zBaseSyncToolRunner.__next__   s    ~~&&((r9   c              #  6   K   | j                   D ]  }|  y wrr   rl   rJ   items     r:   __iter__zBaseSyncToolRunner.__iter__   s     NN 	DJ	s   c                    t               rr   NotImplementedErrorr^   s    r:   rk   zBaseSyncToolRunner.__run__   s    !##r9   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   _get_last_messagerJ   last_messages     r:   
until_donezBaseSyncToolRunner.until_done   s,    
 	d#--/'''r9   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.rG   logdebug_generate_tool_call_responserJ   responses     r:   generate_tool_call_responsez.BaseSyncToolRunner.generate_tool_call_response   sD     **6II<=222446*2'r9   c           	     z   | j                         }|sy |D cg c]  }|j                  dk(  s| }}|sy g }|D ]  }| j                  j                  |j                        }|/|j                  d|j                  d|j                   ddd       Y	 |j                  |j                        }|j                  d|j                  |d        d
|dS c c}w # t        $ rW}t        j                  d|j                   |	       |j                  d|j                  t        |      dd       Y d }~d }~ww xY wNtool_usetool_resultzError: Tool 'z' not foundT)typetool_use_idrW   is_error)r   r   rW   z#Error occurred while calling tool: )exc_infouserrU   #_get_last_assistant_message_contentr   rC   getrB   appendidcallinput	Exceptionr   	exceptionrepr	rJ   rW   blocktool_use_blocksresultsr   rN   resultexcs	            r:   r   z/BaseSyncToolRunner._generate_tool_call_response   s<   ::<.5RUz9Q5RR24' 	H&&**8==9D| -'/{{%28==/#M$(	 8>>2hkk^def	6 733C S,  	 CDII;OZ]^ -'/{{#'9$(	 	s#   CC:C	D:#AD55D:c                d    t        | j                        r| j                         S | j                  S rr   rR   rm   r^   s    r:   r~   z$BaseSyncToolRunner._get_last_message   s+    D&&'%%''!!!r9   c                v    | j                         }||j                  dk7  s|j                  sy |j                  S N	assistantr~   rV   rW   r   s     r:   r   z6BaseSyncToolRunner._get_last_assistant_message_content   s:    --/<#4#4#C<K_K_###r9   )rK   r'   rL   r/   rM   zIterable[BetaRunnableTool]ro   r)   r?   r`   ra   rb   ra   r-   )ra   zIterator[RunnerItemT]ra   r   ra   zBetaMessageParam | Nonera   zBetaMessage | Nonera   zlist[BetaContentBlock] | None)r4   r5   r6   rP   rs   rx   r   rk   r   r   r   r~   r   __classcell__rp   s   @r:   re   re   p   s     &*R (R  	R
 *R R #R 
R) $ $&4P"
$r9   re   c                      e Zd Zedd       Zy)BetaToolRunnerc              #    K    | j                   j                  j                  j                  di | j                  | j
                  x| _        }| | xj                  dz  c_        | j                         s| j                         }|t        j                  d       y | j                  s| j                  ||       | xj                  dz  c_        d| _        d | _         | j                   j                  j                  j                  di | j                  | j
                  x| _        }| | j                         sy y wNr   z;Tool call was not requested, exiting from tool runner loop.Fr8   rj   betarA   createrD   rE   rm   rI   r_   r   r   r   rF   r\   rG   rJ   rO   r   s      r:   rk   zBetaToolRunner.__run__   s    'Ht||'8'8'A'A'H'H'i4<<'i[_[h[h'iiW"##%779H		WX**$$Wh7!!Q&!&+D#.2D++L4<<+<+<+E+E+L+L+mt||+m_c_l_l+mmDM ##%s   EEEN)ra   zIterator[BetaMessage]r4   r5   r6   r   rk   r8   r9   r:   r   r      s     r9   r   c                      e Zd Zedd       Zy)BetaStreamingToolRunnerc              #  N  K    | j                   j                  j                  j                  di | j                  | j
                  5 }|j                  | _        | |j                         }d d d        | xj                  dz  c_        | j                         s| j                         }|t        j                  d       y | j                  s| j                  |       | xj                  dz  c_        d| _         | j                   j                  j                  j                  di | j                  | j
                  5 }d | _        |j                  | _        | |j                         }d d d        | j                         sy y # 1 sw Y   xY w# 1 sw Y   )xY wwr   rj   r   rA   streamrD   rE   get_final_messagerm   rI   r_   r   r   r   rF   r\   rG   rJ   r   rO   r   s       r:   rk   zBetaStreamingToolRunner.__run__   sb    .T\\''..OOO 	1SY!'!9!9DL..0G	1 	"##%779H		WX**$$Wh7!!Q&!&+D#2""++22ST\\ST]]S 5W]26/%+%=%=" 224	5 ##%	1 	1"5 5s=   AF%	&F/CF%-F1F%
F%FF%F"F%N)ra   zIterator[BetaMessageStream]r   r8   r9   r:   r   r      s    5 5r9   r   c                       e Zd Zdd	 	 	 	 	 	 	 	 	 	 	 d fdZddZddZedd       ZddZddZ	dd	Z
dd
ZddZ xZS )BaseAsyncToolRunnerNr>   c               r    t         |   ||||       || _        | j                         | _        d | _        y rg   rh   rn   s         r:   rP   zBaseAsyncToolRunner.__init__
  s8     	uUcddhr9   c                R   K   | j                   j                          d {   S 7 wrr   )rl   	__anext__r^   s    r:   r   zBaseAsyncToolRunner.__anext__  s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wrr   ru   rv   s     r:   	__aiter__zBaseAsyncToolRunner.__aiter__  s&     .. 	 	$J	.s   "  " "c                  K   t               wrr   rz   r^   s    r:   rk   zBaseAsyncToolRunner.__run__  s     !##s   c                t   K   t        |        d{    | j                          d{   }|J |S 7 "7 w)r}   N)r   r~   r   s     r:   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     r:   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rr   r   r^   s    r:   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     r:   r   z7BaseAsyncToolRunner._get_last_assistant_message_contentB  sF     !3355<#4#4#C<K_K_###	 6s   AA/Ac           	       K   | j                          d {   }|sy |D cg c]  }|j                  dk(  s| }}|sy g }|D ]  }| j                  j                  |j                        }|/|j                  d|j                  d|j                   ddd       Y	 |j                  |j                         d {   }|j                  d|j                  |d        d
|dS 7 c c}w 7 1# t        $ rX}t        j                  d|j                   |	       |j                  d|j                  t        |      dd       Y d }~d }~ww xY wwr   r   r   s	            r:   r   z0BaseAsyncToolRunner._generate_tool_call_responseI  sN    @@BB.5RUz9Q5RR24' 	H&&**8==9D| -'/{{%28==/#M$(	 #yy88hkk^def	6 733K C S( 9 	 CDII;OZ]^ -'/{{#'9$(	 	sb   EC'EC)C)A"EC0<C.=#C0 E)E.C00	E9AEEEE)rK   r'   rL   r/   rM   zIterable[BetaAsyncRunnableTool]ro   r*   r?   r`   ra   rb   r   )ra   zAsyncIterator[RunnerItemT]r   r   r   r   )r4   r5   r6   rP   r   r   r   rk   r   r   r~   r   r   r   r   s   @r:   r   r   	  s     &*i (i  	i
 /i i #i 
i0  "
$&4r9   r   c                      e Zd Zedd       Zy)BetaAsyncToolRunnerc                 K    | j                   j                  j                  j                  di | j                  | j
                   d {   x| _        }| | xj                  dz  c_        | j                         s| j                          d {   }|t        j                  d       y | j                  s| j                  ||       | xj                  dz  c_        d| _        d | _         | j                   j                  j                  j                  di | j                  | j
                   d {   x| _        }| | j                         sy y 7 7 7 (wr   r   r   s      r:   rk   zBetaAsyncToolRunner.__run__s  s6    -NT\\->->-G-G-N-N-oQUQ]Q]-oaeanan-o'ooW"##%!==??H		WX**$$Wh7!!Q&!&+D#.2D+1R1B1B1K1K1R1R1sUYUaUa1seierer1s+ssDM ##%	 (p
 @ ,ts>   A
E'E AE'E#B&E'<E%= E'E'#E'%E'N)ra   zAsyncIterator[BetaMessage]r   r8   r9   r:   r   r   r  s     r9   r   c                      e Zd Zedd       Zy)BetaAsyncStreamingToolRunnerc                 K    | j                   j                  j                  j                  di | j                  | j
                  4 d {   }|j                  | _        | |j                          d {   }d d d       d {    | xj                  dz  c_        | j                         s| j                          d {   }|t        j                  d       y | j                  s| j                  |       | xj                  dz  c_        d| _         | j                   j                  j                  j                  di | j                  | j
                  4 d {   }|j                  | _        d | _        | |j                          d {   }d d d       d {    | j                         sy y 7 {7 P7 C# 1 d {  7  sw Y   TxY w7 7 7 L7 ># 1 d {  7  sw Y   NxY wwr   r   r   s       r:   rk   z$BetaAsyncStreamingToolRunner.__run__  s    44<<$$--44Ut||Ut}}U 	7 	7Y_!'!9!9DL"4466G	7 	7 	"##%!==??H		WX**$$Wh7!!Q&!&+D#8t||((1188Y4<<Y4==Y ; ;]c%+%=%="26/ & 8 8 ::	; ; ##%%	7 7	7 	7 	7 	7 @; ;	; ; ; ;s   AHGH*G;G<G HG=H	G'
B H*G*+H.1G0G, G0$H/G.0HHGHG$GG$	H*H,G0.H0H6G97H>HN)ra   z%AsyncIterator[BetaAsyncMessageStream]r   r8   r9   r:   r   r     s    ; ;r9   r   )@
__future__r   loggingabcr   r   typingr   r   r   r	   r
   r   r   r   r   r   r   typing_extensionsr   r   httpx_typesr   r   r   r   _utilsr   r   
types.betar   r   r   _beta_functionsr   r   r    r!   r"   r#   streaming._beta_messagesr%   r&    types.beta.message_create_paramsr'   'types.beta.beta_tool_result_block_paramr(   rj   r)   r*   r+   r-   	getLoggerr4   r   r/   r=   re   r   r   r   r   r   r8   r9   r:   <module>r      sM   "  #    2  4 4 C I I  Q G O4 
4S9;RTpp  m$g!5Ye 52W-. 2jd$(897;;OQT d$N'4 .501BC 56f4.)>?AUWZ f4R-k: ,;#67M#N ;r9   