o
    i                     @  s   d dl mZ d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ d	d
lmZmZ d	dlmZ ddlmZmZ e
ddG dd dee Ze
G dd dee ZdS )    )annotationsN)Lock)CallableSequence)AsyncExitStack)	dataclassfieldreplace)Any)Self   )
AgentDepsT
RunContext)	UserError   )AbstractToolsetToolsetToolT)kw_onlyc                   @  s"   e Zd ZU dZded< ded< dS )_CombinedToolsetToolz_A tool definition for a combined toolset tools that keeps track of the source toolset and tool.AbstractToolset[AgentDepsT]source_toolsetToolsetTool[AgentDepsT]source_toolN)__name__
__module____qualname____doc____annotations__ r   r   c/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/toolsets/combined.pyr      s   
 r   c                   @  s   e Zd ZU dZded< eddedZded< eddd	Zd
ed< eddd	Z	ded< e
d3ddZe
d4ddZd5ddZd6ddZd7d!d"Zd8d(d)Zd9d-d.Zd:d1d2ZdS );CombinedToolsetzA toolset that combines multiple toolsets.

    See [toolset docs](../toolsets.md#combining-toolsets) for more information.
    z%Sequence[AbstractToolset[AgentDepsT]]toolsetsF)compareinitdefault_factoryr   _enter_lockr   )r#   defaultint_entered_countNzAsyncExitStack | None_exit_stackreturn
str | Nonec                 C  s   d S Nr   selfr   r   r   id&   s   zCombinedToolset.idstrc                 C  s&   | j j dddd | jD  dS )N(z, c                 s  s    | ]}|j V  qd S r,   )label.0toolsetr   r   r   	<genexpr>,   s    z(CombinedToolset.label.<locals>.<genexpr>))	__class__r   joinr!   r-   r   r   r   r2   *   s   &zCombinedToolset.labelr   c              
     s   | j 4 I d H H | jdkr>t 4 I d H }| jD ]
}||I d H  q| | _W d   I d H  n1 I d H s9w   Y  |  jd7  _W d   I d H  | S 1 I d H sVw   Y  | S )Nr   r   )r%   r(   r   r!   enter_async_contextpop_allr)   )r.   
exit_stackr5   r   r   r   
__aenter__.   s   

(zCombinedToolset.__aenter__argsr
   bool | Nonec              	     sz   | j 4 I d H ( |  jd8  _| jdkr%| jd ur%| j I d H  d | _W d   I d H  d S 1 I d H s6w   Y  d S )Nr   r   )r%   r(   r)   aclose)r.   r>   r   r   r   	__aexit__8   s   .zCombinedToolset.__aexit__ctxRunContext[AgentDepsT]"dict[str, ToolsetTool[AgentDepsT]]c              
     s   t j fdd| jD  I d H }i }t| j|D ]F\}}| D ]=\}}|j}|| }	rO|jd  |jdd   }
t	|
 d|	jj d|d|j
 t||j|j|j||d||< q!q|S )	Nc                 3  s    | ]}|  V  qd S r,   )	get_toolsr3   rB   r   r   r6   @   s    z,CombinedToolset.get_tools.<locals>.<genexpr>r   r   z= defines a tool whose name conflicts with existing tool from z: z. )r5   tool_defmax_retriesargs_validatorr   r   )asynciogatherr!   zipitemsr5   getr2   upperr   tool_name_conflict_hintr   rG   rH   rI   )r.   rB   toolsets_tools	all_toolsr5   toolsnametooltool_toolsetexisting_toolcapitalized_toolset_labelr   rF   r   rE   ?   s*    zCombinedToolset.get_toolsrT   	tool_argsdict[str, Any]rU   r   c                   s*   t |tsJ |j||||jI d H S r,   )
isinstancer   r   	call_toolr   )r.   rT   rY   rB   rU   r   r   r   r\   V   s   zCombinedToolset.call_toolvisitor-Callable[[AbstractToolset[AgentDepsT]], None]Nonec                 C  s   | j D ]}|| qd S r,   )r!   apply)r.   r]   r5   r   r   r   r`   \   s   
zCombinedToolset.applyDCallable[[AbstractToolset[AgentDepsT]], AbstractToolset[AgentDepsT]]r   c                   s   t |  fdd| jD dS )Nc                   s   g | ]}|  qS r   )visit_and_replacer3   r]   r   r   
<listcomp>c   s    z5CombinedToolset.visit_and_replace.<locals>.<listcomp>)r!   )r	   r!   )r.   r]   r   rc   r   rb   `   s   z!CombinedToolset.visit_and_replace)r*   r+   )r*   r0   )r*   r   )r>   r
   r*   r?   )rB   rC   r*   rD   )
rT   r0   rY   rZ   rB   rC   rU   r   r*   r
   )r]   r^   r*   r_   )r]   ra   r*   r   )r   r   r   r   r   r   r   r%   r(   r)   propertyr/   r2   r=   rA   rE   r\   r`   rb   r   r   r   r   r       s    
 





r    )
__future__r   rJ   r   collections.abcr   r   
contextlibr   dataclassesr   r   r	   typingr
   typing_extensionsr   _run_contextr   r   
exceptionsr   abstractr   r   r   r    r   r   r   r   <module>   s    