
    nϞi<                    F   U 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 d dlmZ d dlmZmZmZ d dlZd dlZd dlmZ dd	lmZ dd
lmZ ddl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*  ejV                  e,      Z-ee.ee*   f   Z/de0d<    G d de1      Z2ede/f   Z3 e
de3      Z4edeeee/f   f   Z5 e
de5      Z6 G d de      Z7 G d de      Z8 G d de	e%         Z9 G d d e9e4         Z: G d! d"e9e6         Z;ed,d#       Z<edddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d-d%       Z<edddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d.d&       Z<	 d/dddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0d'Z<ed1d(       Z=edddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d2d)       Z=edddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d*       Z=	 d/dddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d4d+Z=ee:e   e7f   Z>ee;e   e8f   Z?y)5    )annotationsN)ABCabstractmethod)	AnyUnionGenericTypeVarCallableIterable	Coroutinecastoverload)iscoroutinefunction)Literal	TypeAliasoverride)	BaseModel   )_compat)is_dict)cached_property)TypeAdapter)BetaToolParamBetaToolUnionParamBetaCacheControlEphemeralParam)	CallableT)InputSchema)Contentr   BetaFunctionToolResultTypec                  0     e Zd ZU dZded<   d fdZ xZS )	ToolErrora  Error that can be raised from a tool to return structured content with ``is_error: True``.

    When the tool runner catches this error, it will use the :attr:`content`
    property as the tool result instead of ``repr(exc)``.

    Example::

        raise ToolError([
            {"type": "text", "text": "Error details here"},
            {"type": "image", "source": {"type": "base64", "data": "...", "media_type": "image/png"}},
        ])
    r   contentc                :   t        |t              r|}nqg }|D ]U  }|j                  d      }||j                  t        |             1|j                  d|j                  dd       d       W |rdj	                  |      nd}t
        |   |       || _        y )Ntext[typeunknown] z
Tool error)
isinstancestrgetappendjoinsuper__init__r"   )selfr"   messagepartsblockr$   	__class__s         e/var/www/html/jploft-chatbot/venv/lib/python3.12/site-packages/anthropic/lib/tools/_beta_functions.pyr0   zToolError.__init__+   s    gs#G!E  Fyy(#LLT+LL1UYYvy%A$B!!DEF */chhuoLG!    )r"   r   returnNone)__name__
__module____qualname____doc____annotations__r0   __classcell__r5   s   @r6   r!   r!      s     (' r7   r!   .	FunctionT)boundAsyncFunctionTc                  B    e Zd Zedd       Zedd       Zedd       Zy)BetaBuiltinFunctionToolc                     y N r1   s    r6   to_dictzBetaBuiltinFunctionTool.to_dictB       -0r7   c                     y rG   rH   r1   inputs     r6   callzBetaBuiltinFunctionTool.callE   s    ADr7   c                >    | j                         }d|v r|d   S |d   S Nmcp_server_namenamerJ   r1   raws     r6   rS   zBetaBuiltinFunctionTool.nameH   +    lln#())6{r7   Nr8   r   rN   objectr8   r   r8   r+   r:   r;   r<   r   rJ   rO   propertyrS   rH   r7   r6   rE   rE   A   s0    0 0D D r7   rE   c                  B    e Zd Zedd       Zedd       Zedd       Zy)BetaAsyncBuiltinFunctionToolc                     y rG   rH   rI   s    r6   rJ   z$BetaAsyncBuiltinFunctionTool.to_dictQ   rK   r7   c                   K   y wrG   rH   rM   s     r6   rO   z!BetaAsyncBuiltinFunctionTool.callT   s	     GJs   c                >    | j                         }d|v r|d   S |d   S rQ   rT   rU   s     r6   rS   z!BetaAsyncBuiltinFunctionTool.nameW   rW   r7   NrX   rY   r[   r\   rH   r7   r6   r_   r_   P   s0    0 0J J r7   r_   c            
          e Zd ZU ded<   	 ded<   	 ded<   ded<   dddddddddd			 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
Zedd       ZddZedd       Z	ddZ
ddZedd       Zy)BaseFunctionToolr   funcr+   rS   descriptionr   input_schemaN	rS   rf   rg   defer_loadingcache_controlallowed_callerseager_input_streaminginput_examplesstrictc       	           t         j                  rt        d      || _        t	        j
                  |      | _        |xs |j                  | _        || _	        || _
        || _        || _        |	| _        |
| _        |xs | j                         | _        |.t#        |t$              r|j'                         | _        y || _        y | j+                         | _        y )N2Tool functions are only supported with Pydantic v2)r   PYDANTIC_V1RuntimeErrorre   pydanticvalidate_call_func_with_validater:   rS   _defer_loading_cache_control_allowed_callers_eager_input_streaming_input_examples_strict_get_description_from_docstringrf   r*   r&   model_json_schemarg   _create_schema_from_function)r1   re   rS   rf   rg   ri   rj   rk   rl   rm   rn   s              r6   r0   zBaseFunctionTool.__init__j   s     STT	#+#9#9$#? )DMM	++ /&;#-&P$*N*N*P#,-1=1O1O1Q!$0! $ A A CDr7   c                    | j                   S rG   re   rI   s    r6   __call__zBaseFunctionTool.__call__   s    yyr7   c                   | j                   | j                  | j                  d}| j                  | j                  |d<   | j                  | j                  |d<   | j
                  | j
                  |d<   | j                  | j                  |d<   | j                  | j                  |d<   | j                  | j                  |d<   |S )N)rS   rf   rg   ri   rj   rk   rl   rm   rn   )	rS   rf   rg   rv   rw   rx   ry   rz   r{   )r1   defns     r6   rJ   zBaseFunctionTool.to_dict   s    II++ --

 *$($7$7D!*$($7$7D!  ,&*&;&;D"#&&2,0,G,GD()+%)%9%9D!"<<#!\\DNr7   c                \    t        j                  | j                  j                  xs d      S )N )docstring_parserparsere   r=   rI   s    r6   _parsed_docstringz"BaseFunctionTool._parsed_docstring   s"    %%dii&7&7&=2>>r7   c                    | j                   j                  rJ| j                   j                  }| j                   j                  r|d| j                   j                   z  }|S y)z*Extract description from parsed docstring.z

r   )r   short_descriptionlong_description)r1   rf   s     r6   r|   z0BaseFunctionTool._get_description_from_docstring   sX    !!3300BBK%%66d&<&<&M&M%NOOr7   c                    ddl m} ddlm}m} ddlm}  G d d|      } || j                  | j                        }| j                  j                  |      S )	z:Create JSON schema from function signature using pydantic.r   )
CoreSchema)JsonSchemaValueGenerateJsonSchema)ArgumentsParameterc                  J     e Zd Zd fdZddZe	 	 	 	 	 	 d fd       Z xZS )OBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchemac               >    t         |           || _        || _        y rG   )r/   r0   _funcr   )r1   re   parsed_docstringr5   s      r6   r0   zXBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.__init__   s     "!
)9&r7   c                    | S rG   rH   )r1   _args_kwdss      r6   r   zXBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.__call__   s    r7   c                ^   t         |   ||      }|j                  d      dk7  r|S |j                  d      }|rt        |      s|S | j                  j
                  D ]L  }|j                  |j                        }|rt        |      s,|j                  s9d|vs>|j                  |d<   N |S )Nr&   rZ   
propertiesrf   )r/   kw_arguments_schemar,   r   r   paramsarg_namerf   )r1   	argumentsvar_kwargs_schemaschemar   paramprop_schemar5   s          r6   r   zcBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.kw_arguments_schema   s     4Y@QR::f%1!M#ZZ5
!)<!M "33:: GE",.."@K&gk.B ((]+-M5:5F5FM2G r7   )re   zCallable[..., Any]r   r   r8   r9   )r   r   r   r   r8   z'CustomGenerateJsonSchema')r   z'list[ArgumentsParameter]'r   zCoreSchema | Noner8   r   )r:   r;   r<   r0   r   r   r   r?   r@   s   @r6   CustomGenerateJsonSchemar      s=    :
 5 $5 !	 r7   r   )re   r   )schema_generator)pydantic_corer   pydantic.json_schemar   r   pydantic_core.core_schemar   re   r   _adapterjson_schema)r1   r   r   r   r   r   r   s          r6   r~   z-BaseFunctionTool._create_schema_from_function   sN     	-L@ 	'9  	D 4UYUkUkl}}((:J(KKr7   c                ,    t        | j                        S rG   )r   ru   rI   s    r6   r   zBaseFunctionTool._adapter   s    43344r7   )re   r   rS   
str | Nonerf   r   rg   $InputSchema | type[BaseModel] | Noneri   bool | Nonerj   %BetaCacheControlEphemeralParam | Nonerk   Tlist[Literal['direct', 'code_execution_20250825', 'code_execution_20260120']] | Nonerl   r   rm   "Iterable[dict[str, object]] | Nonern   r   r8   r9   )r8   r   )r8   r   )r8   zdocstring_parser.Docstringr[   )r8   r   )r8   zTypeAdapter[Any])r:   r;   r<   r>   r0   r]   r   rJ   r   r   r|   r~   r   rH   r7   r6   rd   rd   _   s   
O,
I;  "&=A%)?Cpt-1=A"#D#D 	#D
  #D ;#D ##D =#D n#D  +#D ;#D #D 
#DJ  ( ? ?*LX 5 5r7   rd   c                      e Zd ZddZy)BetaFunctionToolc                D   t        | j                        rt        d      t        |      s!t	        dt        |      j                         	  | j                  di t        t        |      S # t        j                  $ r}t        d| j                         |d }~ww xY w)NzJCannot call a coroutine function synchronously. Use `@async_tool` instead. Input must be a dictionary, got Invalid arguments for function rH   r   re   rr   r   	TypeErrorr&   r:   ru   r   r   rs   ValidationError
ValueErrorrS   r1   rN   es      r6   rO   zBetaFunctionTool.call   s    tyy)kllu~>tE{?S?S>TUVV	S+4++?d3.>??'' 	S>tyykJKQRR	Ss   A. .BBBNrY   r:   r;   r<   rO   rH   r7   r6   r   r          
Sr7   r   c                      e Zd ZddZy)BetaAsyncFunctionToolc                `  K   t        | j                        st        d      t        |      s!t	        dt        |      j                         	  | j                  di t        t        |       d {   S 7 # t        j                  $ r}t        d| j                         |d }~ww xY ww)NzGCannot call a synchronous function asynchronously. Use `@tool` instead.r   r   rH   r   r   s      r6   rO   zBetaAsyncFunctionTool.call   s     "499-hiiu~>tE{?S?S>TUVV	S111EDe4DEEEE'' 	S>tyykJKQRR	Ss<   AB.#A: 3A84A: 7B.8A: :B+B&&B++B.NrY   r   rH   r7   r6   r   r      r   r7   r   c                     y rG   rH   r   s    r6   	beta_toolr     s    ?Br7   rh   c       	             y rG   rH   
re   rS   rf   rg   ri   rj   rk   rl   rm   rn   s
             r6   r   r     s     #&r7   c        	             y rG   rH   rh   s	            r6   r   r     s     :=r7   c       	   
     ~   	 t         j                  rt        d      d	f	d}
|  |
|       S |
S )aF  Create a FunctionTool from a function with automatic schema inference.

    Can be used as a decorator with or without parentheses:

    @function_tool
    def my_func(x: int) -> str: ...

    @function_tool()
    def my_func(x: int) -> str: ...

    @function_tool(name="custom_name")
    def my_func(x: int) -> str: ...
    rp   c                .   	 t        | 	
      S Nrh   )r   
fnrk   rj   ri   rf   rl   rm   rg   rS   rn   s
    r6   _makezbeta_tool.<locals>._makeA  s.    #%''+"7)
 	
r7   )r   rA   r8   BetaFunctionTool[FunctionT]r   rq   rr   re   rS   rf   rg   ri   rj   rk   rl   rm   rn   r   s    ````````` r6   r   r   $  <    4 OPP
 
 T{Lr7   c                     y rG   rH   r   s    r6   beta_async_toolr   U  s    TWr7   c       	             y rG   rH   r   s
             r6   r   r   Y  s     -0r7   c        	             y rG   rH   rh   s	            r6   r   r   i  s	     ILr7   c       	   
     ~   	 t         j                  rt        d      d	f	d}
|  |
|       S |
S )aU  Create an AsyncFunctionTool from a function with automatic schema inference.

    Can be used as a decorator with or without parentheses:

    @async_tool
    async def my_func(x: int) -> str: ...

    @async_tool()
    async def my_func(x: int) -> str: ...

    @async_tool(name="custom_name")
    async def my_func(x: int) -> str: ...
    rp   c                .   	 t        | 	
      S r   )r   r   s
    r6   r   zbeta_async_tool.<locals>._make  s.    $#%''+"7)
 	
r7   )r   rC   r8   %BetaAsyncFunctionTool[AsyncFunctionT]r   r   s    ````````` r6   r   r   x  r   r7   )re   rA   r8   r   )re   rA   rS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   r   )rS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   z2Callable[[FunctionT], BetaFunctionTool[FunctionT]]rG   )re   zFunctionT | NonerS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   zPBetaFunctionTool[FunctionT] | Callable[[FunctionT], BetaFunctionTool[FunctionT]])re   rC   r8   r   )re   rC   rS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   r   )rS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   zACallable[[AsyncFunctionT], BetaAsyncFunctionTool[AsyncFunctionT]])re   zAsyncFunctionT | NonerS   r   rf   r   rg   r   ri   r   rj   r   rk   r   rl   r   rm   r   rn   r   r8   ziBetaAsyncFunctionTool[AsyncFunctionT] | Callable[[AsyncFunctionT], BetaAsyncFunctionTool[AsyncFunctionT]])@
__future__r   loggingabcr   r   typingr   r   r   r	   r
   r   r   r   r   inspectr   typing_extensionsr   r   r   rs   r   r   r   r   _utilsr   r   _modelsr   
types.betar   r   r   _utils._utilsr   types.tool_paramr   'types.beta.beta_tool_result_block_paramr   BetaContent	getLoggerr:   logr+   r   r>   	Exceptionr!   FunctionrA   AsyncFunctionrC   rE   r_   rd   r   r   r   r   BetaRunnableToolBetaAsyncRunnableToolrH   r7   r6   <module>r      s   "  # ^ ^ ^ ' : :      & " [ [ & + Mg!(-c8K3H.H(I I I	 > C334Kx0	iS2L(LMMN)?c 3 C5wy) C5LS'	2 SS,^< S 
 B 
 B 
 "9=!%;?lp)-9=&
& & 	&
 7& & 9& j& '& 7& & !& 
& 
 "9=!%;?lp)-9==
= = 7	=
 = 9= j= '= 7= = 8= 
= ". "9=!%;?lp)-9=.
. . 	.
 7. . 9. j. '. 7. . V.b 
 W 
 W 
 "9=!%;?lp)-9=0
0 0 	0
 70 0 90 j0 '0 70 0 +0 
0 
 "9=!%;?lp)-9=L
L L 7	L
 L 9L jL 'L 7L L GL 
L #'. "9=!%;?lp)-9=.
. . 	.
 7. . 9. j. '. 7. . o.b )#.0GGH 3C8:VVW r7   