o
    i=                     @  sB  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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- ddl.m/Z/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 erddl6m7Z7m8Z8 ede
e%e e'e e)e*f dZ9edZ:e;e<Z=G dd deddZ>G dd dee9e/f Z?G dd de?e&e/f ee:e/f eZ@G dd de@e0e/ e/f ZAG d d! d!e@e,e/ e/f ZBG d"d# d#e?e(e/f ee:e/f eZCG d$d% d%eCe0e/ e/f ZDG d&d' d'eCe-e/ e/f ZEd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   )BetaMessageStreamBetaAsyncMessageStream)ResponseFormatTParsedBetaMessageParsedBetaContentBlock)ParseMessageCreateParamsBase)BetaToolResultBlockParam)	AnthropicAsyncAnthropicAnyFunctionToolT)boundRunnerItemTc                   @  s.   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__ r:   r:   f/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/anthropic/lib/tools/_beta_runner.pyr1   6   s
   
 r1   F)totalc                   @  s:   e Zd ZdddddZdddZdddZdddZdS )BaseToolRunnerNmax_iterationsparams-ParseMessageCreateParamsBase[ResponseFormatT]optionsr1   toolsIterable[AnyFunctionToolT]r?   
int | NonereturnNonec                C  sR   dd |D | _ i |ddd |d D i| _|| _d| _d | _|| _d| _d S )Nc                 S  s   i | ]}|j |qS r:   )name).0toolr:   r:   r;   
<dictcomp>F   s    z+BaseToolRunner.__init__.<locals>.<dictcomp>messagesc                 S  s   g | ]}|qS r:   r:   rI   messager:   r:   r;   
<listcomp>I   s    z+BaseToolRunner.__init__.<locals>.<listcomp>Fr   )_tools_by_name_params_options_messages_modified_cached_tool_call_response_max_iterations_iteration_count)selfr@   rB   rC   r?   r:   r:   r;   __init__>   s   
zBaseToolRunner.__init__ParseMessageCreateParamsBase[ResponseFormatT] | Callable[[ParseMessageCreateParamsBase[ResponseFormatT]], ParseMessageCreateParamsBase[ResponseFormatT]]c                 C  s   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)callablerQ   )rW   r@   r:   r:   r;   set_messages_paramsQ   s   

z"BaseToolRunner.set_messages_paramsrL   5BetaMessageParam | ParsedBetaMessage[ResponseFormatT]c                   s2   dd |D  d_  fd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                 S  s(   g | ]}t |tr|j|jd n|qS )rolecontent)
isinstancer   r^   r_   rM   r:   r:   r;   rO   f   s    z2BaseToolRunner.append_messages.<locals>.<listcomp>Tc                   s   i | dg j d  iS )NrL   )rQ   )r@   message_paramsrW   r:   r;   <lambda>k   s    z0BaseToolRunner.append_messages.<locals>.<lambda>N)rS   r[   rT   )rW   rL   r:   ra   r;   append_messages`   s   
zBaseToolRunner.append_messagesboolc                 C  s   | j d ur| j| j krdS dS )NTF)rU   rV   rW   r:   r:   r;   _should_stopn   s   zBaseToolRunner._should_stop)
r@   rA   rB   r1   rC   rD   r?   rE   rF   rG   )r@   rY   rF   rG   )rL   r\   rF   rG   )rF   re   )r6   r7   r8   rX   r[   rd   rg   r:   r:   r:   r;   r=   =   s    

r=   c                      s   e Zd Zddd) fddZd*ddZd+ddZeed+ddZd+ddZ	d,ddZ
d-dd Zd-d!d"Zd.d$d%Zd/d'd(Z  ZS )0BaseSyncToolRunnerNr>   r@   rA   rB   r1   rC   Iterable[BetaRunnableTool]clientr,   r?   rE   rF   rG   c                  .   t  j||||d || _|  | _d | _d S N)r@   rB   rC   r?   superrX   _client__run__	_iterator_last_messagerW   r@   rB   rC   rj   r?   	__class__r:   r;   rX   u   s
   	
zBaseSyncToolRunner.__init__r0   c                 C  s
   | j  S N)rq   __next__rf   r:   r:   r;   rw      s   
zBaseSyncToolRunner.__next__Iterator[RunnerItemT]c                 c  s    | j D ]}|V  qd S rv   rq   rW   itemr:   r:   r;   __iter__   s   
zBaseSyncToolRunner.__iter__c                 c  s    t  rv   NotImplementedErrorrf   r:   r:   r;   _handle_request      z"BaseSyncToolRunner._handle_requestc                 c  s    |   }|V  |  }|d usJ W d    n1 sw   Y  |  jd7  _|  sy|  }|d u r<td d S | jsE| || |  jd7  _d| _d | _	|   }|V  |  }|d usdJ W d    n1 snw   Y  |  r-d S d S Nr   z;Tool call was not requested, exiting from tool runner loop.F
r   _get_last_messagerV   rg   generate_tool_call_responselogdebugrS   rd   rT   rW   r{   rN   responser:   r:   r;   rp      s.   


zBaseSyncToolRunner.__run__"ParsedBetaMessage[ResponseFormatT]c                 C  s    t |  |  }|dusJ |S z
        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.
        N)r   r   rW   last_messager:   r:   r;   
until_done   s   zBaseSyncToolRunner.until_doneBetaMessageParam | Nonec                 C  s,   | j dur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.rT   r   r   _generate_tool_call_responserW   r   r:   r:   r;   r      s   

z.BaseSyncToolRunner.generate_tool_call_responsec                 C  s   |   }|sd S dd |D }|sd S g }|D ]Z}| j|j}|d u r5|d|jd|j ddd qz||j}|d|j|d W q tyq } zt	j
d	|j |d
 |d|jt|dd W Y d }~qd }~ww d|dS )Nc                 S     g | ]	}|j d kr|qS tool_usetyperI   blockr:   r:   r;   rO          zCBaseSyncToolRunner._generate_tool_call_response.<locals>.<listcomp>tool_resultError: Tool '' not foundTr   tool_use_idr_   is_errorr   r   r_   #Error occurred while calling tool: exc_infouserr]   #_get_last_assistant_message_contentrP   getrH   appendidcallinput	Exceptionr   	exceptionreprrW   r_   tool_use_blocksresultsr   rJ   resultexcr:   r:   r;   r      sB   
z/BaseSyncToolRunner._generate_tool_call_response)ParsedBetaMessage[ResponseFormatT] | Nonec                 C  s   t | jr	|  S | jS rv   rZ   rr   rf   r:   r:   r;   r      s   
z$BaseSyncToolRunner._get_last_message4list[ParsedBetaContentBlock[ResponseFormatT]] | Nonec                 C  s*   |   }|d u s|jdks|jsd S |jS N	assistantr   r^   r_   r   r:   r:   r;   r      s   z6BaseSyncToolRunner._get_last_assistant_message_content)r@   rA   rB   r1   rC   ri   rj   r,   r?   rE   rF   rG   rF   r0   )rF   rx   rF   r   rF   r   rF   r   rF   r   )r6   r7   r8   rX   rw   r|   r   r   r   rp   r   r   r   r   r   __classcell__r:   r:   rt   r;   rh   t   s    







(rh   c                   @     e Zd ZeedddZdS )BetaToolRunnerrF   ,Iterator[ParsedBetaMessage[ResponseFormatT]]c                 c  s0    | j jjjdi | j| j}|| _|V  d S Nr:   ro   betarL   parserQ   rR   rr   rW   rN   r:   r:   r;   r      s   
zBetaToolRunner._handle_requestN)rF   r   r6   r7   r8   r   r   r   r:   r:   r:   r;   r          r   c                   @  r   )BetaStreamingToolRunnerrF   ,Iterator[BetaMessageStream[ResponseFormatT]]c                 c  sT    | j jjjdi | j| j}|j| _|V  W d    d S 1 s#w   Y  d S r   ro   r   rL   streamrQ   rR   get_final_messagerr   rW   r   r:   r:   r;   r     s
    "z'BetaStreamingToolRunner._handle_requestN)rF   r   r   r:   r:   r:   r;   r     r   r   c                      s   e Zd Zddd) fddZd*ddZd+ddZeed+ddZd+ddZ	d,ddZ
d-dd Zd.d"d#Zd/d%d&Zd-d'd(Z  ZS )0BaseAsyncToolRunnerNr>   r@   rA   rB   r1   rC   Iterable[BetaAsyncRunnableTool]rj   r-   r?   rE   rF   rG   c                  rk   rl   rm   rs   rt   r:   r;   rX     s
   	
zBaseAsyncToolRunner.__init__r0   c                   s   | j  I d H S rv   )rq   	__anext__rf   r:   r:   r;   r     s   zBaseAsyncToolRunner.__anext__AsyncIterator[RunnerItemT]c                 C s"   | j 2 z	3 d H W }|V  q6 d S rv   ry   rz   r:   r:   r;   	__aiter__"  s   zBaseAsyncToolRunner.__aiter__c                 C s   t  rv   r}   rf   r:   r:   r;   r   &  r   z#BaseAsyncToolRunner._handle_requestc              	   C s0  |   4 I d H }|V  |  I d H }|d usJ W d   I d H  n1 I d H s*w   Y  |  jd7  _|  s|  I d H }|d u rLtd d S | jsU| || |  jd7  _d| _d | _	|   4 I d H }|V  |  I d H }|d us{J W d   I d H  n1 I d H sw   Y  |  r:d S d S r   r   r   r:   r:   r;   rp   ,  s.   (
(zBaseAsyncToolRunner.__run__r   c                   s.   t | I dH  |  I dH }|dusJ |S r   )r   r   r   r:   r:   r;   r   D  s
   zBaseAsyncToolRunner.until_doner   c                   s4   | j durtd | j S |  I dH }|| _ |S r   r   r   r:   r:   r;   r   N  s   

z/BaseAsyncToolRunner.generate_tool_call_responser   c                   s    t | jr|  I d H S | jS rv   r   rf   r:   r:   r;   r   ]  s   
z%BaseAsyncToolRunner._get_last_messager   c                   s2   |   I d H }|d u s|jdks|jsd S |jS r   r   r   r:   r:   r;   r   b  s
   z7BaseAsyncToolRunner._get_last_assistant_message_contentc                   s   |   I d H }|sd S dd |D }|sd S g }|D ]]}| j|j}|d u r9|d|jd|j ddd qz||jI d H }|d|j|d W q tyx } zt	j
d	|j |d
 |d|jt|dd W Y d }~qd }~ww d|dS )Nc                 S  r   r   r   r   r:   r:   r;   rO   n  r   zDBaseAsyncToolRunner._generate_tool_call_response.<locals>.<listcomp>r   r   r   Tr   r   r   r   r   r]   r   r   r:   r:   r;   r   i  sD   
z0BaseAsyncToolRunner._generate_tool_call_response)r@   rA   rB   r1   rC   r   rj   r-   r?   rE   rF   rG   r   )rF   r   r   r   r   r   )r6   r7   r8   rX   r   r   r   r   r   rp   r   r   r   r   r   r   r:   r:   rt   r;   r   
  s    








r   c                   @  r   )BetaAsyncToolRunnerrF   1AsyncIterator[ParsedBetaMessage[ResponseFormatT]]c                 C s6   | j jjjdi | j| jI d H }|| _|V  d S r   r   r   r:   r:   r;   r     s   $
z#BetaAsyncToolRunner._handle_requestN)rF   r   r6   r7   r8   r   r   r   r:   r:   r:   r;   r     r   r   c                   @  r   )BetaAsyncStreamingToolRunnerrF   6AsyncIterator[BetaAsyncMessageStream[ResponseFormatT]]c              	   C sh   | j jjjdi | j| j4 I d H }|j| _|V  W d   I d H  d S 1 I d H s-w   Y  d S r   r   r   r:   r:   r;   r     s
   (.z,BetaAsyncStreamingToolRunner._handle_requestN)rF   r   r   r:   r:   r:   r;   r     r   r   )F
__future__r   logging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#   streaming._beta_messagesr%   r&   types.beta.parsed_beta_messager'   r(   r)    types.beta.message_create_paramsr*   'types.beta.beta_tool_result_block_paramr+   ro   r,   r-   r.   r0   	getLoggerr6   r   r1   r=   rh   r   r   r   r   r   r:   r:   r:   r;   <module>   sJ    4 
$7 	
	 	 	