o
    i	                     @  sr   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 G dd deZdZdddZG dd deZdS )    )annotations)AnyProtocol)JsonSchemaValue)FunctionToolset)Toolc                   @  sJ   e Zd ZedddZdddZedd	d
ZedddZdddZdS )LangChainToolreturndict[str, JsonSchemaValue]c                 C     d S N selfr   r   _/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/ext/langchain.pyargs      zLangChainTool.argsr   c                 C  r   r   r   r   r   r   r   get_input_jsonschema       z"LangChainTool.get_input_jsonschemastrc                 C  r   r   r   r   r   r   r   name   r   zLangChainTool.namec                 C  r   r   r   r   r   r   r   description   r   zLangChainTool.descriptionr   r   kwargsc                 O  r   r   r   )r   r   r   r   r   r   run   r   zLangChainTool.runN)r	   r
   )r	   r   )r	   r   r   r   r   r   r	   r   )	__name__
__module____qualname__propertyr   r   r   r   r   r   r   r   r   r      s    
r   )tool_from_langchainLangChainToolsetlangchain_toolr	   r   c                   s   j }j}j }tdd | D } }d|vr"d|d< |r(||d< dd | D  d fdd}tj||||dS )zCreates a Pydantic AI tool proxy from a LangChain tool.

    Args:
        langchain_tool: The LangChain tool to wrap.

    Returns:
        A Pydantic AI tool that corresponds to the LangChain tool.
    c                 S  s   h | ]
\}}d |vr|qS defaultr   .0r   detailr   r   r   	<setcomp>,   s    z&tool_from_langchain.<locals>.<setcomp>additionalPropertiesFrequiredc                 S  s"   i | ]\}}d |v r||d  qS r"   r   r$   r   r   r   
<dictcomp>3   s   " z'tool_from_langchain.<locals>.<dictcomp>r   r   r   r	   r   c                    s   | rJ d |B } |S )Nz(This should always be called with kwargs)r   )r   r   defaultsr!   r   r   proxy6   s   
z"tool_from_langchain.<locals>.proxy)functionr   r   json_schemaNr   )	r   r   r   copysorteditemsr   r   from_schema)r!   function_namefunction_descriptioninputsr)   schemar-   r   r+   r   r       s"   	
r   c                      s(   e Zd ZdZddd
 fdd	Z  ZS )r    z%A toolset that wraps LangChain tools.Nidtoolslist[LangChainTool]r9   
str | Nonec                  s   t  jdd |D |d d S )Nc                 S  s   g | ]}t |qS r   )r   )r%   toolr   r   r   
<listcomp>G   s    z-LangChainToolset.__init__.<locals>.<listcomp>r8   )super__init__)r   r:   r9   	__class__r   r   r@   F   s   zLangChainToolset.__init__)r:   r;   r9   r<   )r   r   r   __doc__r@   __classcell__r   r   rA   r   r    C   s    r    N)r!   r   r	   r   )
__future__r   typingr   r   pydantic.json_schemar   pydantic_air   pydantic_ai.toolsr   r   __all__r   r    r   r   r   r   <module>   s    
#