o
    i{                     @  s   U d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	m
Z
mZ d dlmZ ddlmZmZ d	d
lmZmZ eee gee dB eee dB  B f Zded< 	 eG dd dee ZdS )    )annotationsN)	AwaitableCallable)	dataclassreplace)Any	TypeAlias)Self   )
AgentDepsT
RunContext   )AbstractToolsetToolsetToolr   ToolsetFuncc                      s   e Zd ZU dZded< dZded< dZded	< dZd
ed< ed.ddZ	d/ddZ
d0ddZd1ddZd2d#d$Zd3 fd(d)Zd4 fd,d-Z  ZS )5DynamicToolsetzA toolset that dynamically builds a toolset using a function that takes the run context.

    It should only be used during a single agent run as it stores the generated toolset.
    To use it multiple times, copy it using `dataclasses.replace`.
    zToolsetFunc[AgentDepsT]toolset_funcTboolper_run_stepNz"AbstractToolset[AgentDepsT] | None_toolsetz
int | None	_run_stepreturn
str | Nonec                 C  s   d S N selfr   r   c/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/toolsets/_dynamic.pyid"   s   zDynamicToolset.idr	   c                   s   | S r   r   r   r   r   r   
__aenter__&   s   zDynamicToolset.__aenter__argsr   bool | Nonec                   sN   z| j d ur| j j| I d H W d | _ d | _S W d | _ d | _d S d | _ d | _w r   )r   	__aexit__r   )r   r    r   r   r   r"   )   s   

zDynamicToolset.__aexit__ctxRunContext[AgentDepsT]"dict[str, ToolsetTool[AgentDepsT]]c                   s   | j d u s| jr=|j| jkr=| j d ur| j  I d H  | |}t|r+|I d H }|d ur6| I d H  || _ |j| _| j d u rDi S | j 	|I d H S r   )
r   r   run_stepr   r"   r   inspectisawaitabler   	get_tools)r   r#   toolsetr   r   r   r)   1   s   




zDynamicToolset.get_toolsnamestr	tool_argsdict[str, Any]toolToolsetTool[AgentDepsT]c                   s(   | j d usJ | j ||||I d H S r   )r   	call_tool)r   r+   r-   r#   r/   r   r   r   r1   E   s   zDynamicToolset.call_toolvisitor-Callable[[AbstractToolset[AgentDepsT]], None]Nonec                   s*   | j d u rt | d S | j | d S r   )r   superapplyr   r2   	__class__r   r   r6   K   s   
zDynamicToolset.applyDCallable[[AbstractToolset[AgentDepsT]], AbstractToolset[AgentDepsT]]AbstractToolset[AgentDepsT]c                   s*   | j d u rt |S t| | j |dS )N)r   )r   r5   visit_and_replacer   r7   r8   r   r   r<   Q   s   
z DynamicToolset.visit_and_replace)r   r   )r   r	   )r    r   r   r!   )r#   r$   r   r%   )
r+   r,   r-   r.   r#   r$   r/   r0   r   r   )r2   r3   r   r4   )r2   r:   r   r;   )__name__
__module____qualname____doc____annotations__r   r   r   propertyr   r   r"   r)   r1   r6   r<   __classcell__r   r   r8   r   r      s   
 



r   )
__future__r   r'   collections.abcr   r   dataclassesr   r   typingr   r   typing_extensionsr	   _run_contextr   r   abstractr   r   r   rA   r   r   r   r   r   <module>   s     