
    b\j\                       % S SK Jr  S SKrS SKrS SKJrJr  S SKJrJ	r	J
r
JrJrJrJrJrJr  S SKJrJrJrJr  S SKJr  S SKJrJrJr  S SKrS SKrS SKrS SKJr  S	S
K J!r!  S	SK"J#r#  S	SK!J$r$  S	SK%J&r&  S	SK'J(r(J)r)J*r*  S	SK+J,r,  S	SK-J.r.  S	SK/J0r1  \Rd                  " \35      r4\	\5\\1   4   r6S\7S'    " S S\85      r9\S\64   r:\" S\:S9r;\S\\\\64   4   r<\" S\<S9r= " S S\5      r> " S S\5      r? " S S\
\,   5      r@ " S  S!\@\;   5      rA " S" S#\@\=   5      rBS0S$ jrCS0S% jrDS1S& jrE\S2S' j5       rF\SSSSSSSSSS(.	                     S3S) jj5       rF\SSSSSSSSSS(.	                   S4S* jj5       rF S5SSSSSSSSSS(.	                     S6S+ jjjrF\S7S, j5       rG\SSSSSSSSSS(.	                     S8S- jj5       rG\SSSSSSSSSS(.	                   S9S. jj5       rG S5SSSSSSSSSS(.	                     S:S/ jjjrG\	\A\   \>4   rH\	\B\   \?4   rIg);    )annotationsN)ABCabstractmethod)	AnyUnionGenericTypeVarCallableIterable	Coroutinecastoverload)isawaitableisasyncgenfunctioniscoroutinefunctionisgeneratorfunction)	Awaitable)Literal	TypeAliasoverride)	BaseModel   )_compat)is_dict)cached_property)TypeAdapter)BetaToolParamBetaToolUnionParamBetaCacheControlEphemeralParam)	CallableT)InputSchema)Contentr   BetaFunctionToolResultTypec                  <   ^  \ rS rSr% SrS\S'   SU 4S jjrSrU =r$ )	ToolError   a  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  > [        U[        5      (       a  UnOz/ nU HX  nUR                  S5      nUb  UR                  [        U5      5        M3  UR                  SUR                  SS5       S35        MZ     U(       a  SR	                  U5      OSn[
        TU ]  U5        Xl        g )Ntext[typeunknown] z
Tool error)
isinstancestrgetappendjoinsuper__init__r'   )selfr'   messagepartsblockr)   	__class__s         Y/var/www/website/venv/lib/python3.13/site-packages/anthropic/lib/tools/_beta_functions.pyr5   ToolError.__init__0   s    gs##G!E yy(#LLT+LL1UYYvy%A$B!!DE ! */chhuoLG!    )r'   )r'   r#   returnNone)	__name__
__module____qualname____firstlineno____doc____annotations__r5   __static_attributes____classcell__r:   s   @r;   r%   r%      s     (' r=   r%   .	FunctionT)boundAsyncFunctionTc                  P    \ rS rSr\SS j5       r\SS j5       r\S	S j5       rSr	g)
BetaBuiltinFunctionToolG   c                    g N r6   s    r;   to_dictBetaBuiltinFunctionTool.to_dictH       -0r=   c                    g rP   rQ   r6   inputs     r;   callBetaBuiltinFunctionTool.callK   s    ADr=   c                B    U R                  5       nSU;   a  US   $ US   $ Nmcp_server_namenamerS   r6   raws     r;   r^   BetaBuiltinFunctionTool.nameN   +    lln#())6{r=   rQ   Nr>   r   rX   objectr>   r#   r>   r0   
r@   rA   rB   rC   r   rS   rY   propertyr^   rF   rQ   r=   r;   rM   rM   G   s0    0 0D D r=   rM   c                  P    \ rS rSr\SS j5       r\SS j5       r\S	S j5       rSr	g)
BetaAsyncBuiltinFunctionToolV   c                    g rP   rQ   rR   s    r;   rS   $BetaAsyncBuiltinFunctionTool.to_dictW   rU   r=   c                   #    g 7frP   rQ   rW   s     r;   rY   !BetaAsyncBuiltinFunctionTool.callZ   s     GJs   c                B    U R                  5       nSU;   a  US   $ US   $ r\   r_   r`   s     r;   r^   !BetaAsyncBuiltinFunctionTool.name]   rc   r=   rQ   Nrd   re   rg   rh   rQ   r=   r;   rk   rk   V   s0    0 0J J r=   rk   c            
         \ rS rSr% S\S'    S\S'    S\S'   S\S'   S	rS
\S'    S	rS\S'    S	S	S	S	S	S	S	S	S	S.	                     SS jjr\SS j5       r	SS jr
\SS j5       rSS jrSS jr\SS j5       rSrg	)BaseFunctionToole   r    funcr0   r^   descriptionr!   input_schemaNz+Callable[[], None | Awaitable[None]] | Noneclosezobject | None_context_manager	r^   rw   rx   defer_loadingcache_controlallowed_callerseager_input_streaminginput_examplesstrictc       	           [         R                  (       a  [        S5      eXl        [        R
                  " U5      U l        U=(       d    UR                  U l        XPl	        X`l
        Xpl        Xl        Xl        Xl        U=(       d    U R                  5       U l        Ub2  [#        U[$        5      (       a  UR'                  5       U l        g X@l        g U R+                  5       U l        g )N2Tool functions are only supported with Pydantic v2)r   PYDANTIC_V1RuntimeErrorrv   pydanticvalidate_call_func_with_validater@   r^   _defer_loading_cache_control_allowed_callers_eager_input_streaming_input_examples_strict_get_description_from_docstringrw   r/   r+   model_json_schemarx   _create_schema_from_function)r6   rv   r^   rw   rx   r|   r}   r~   r   r   r   s              r;   r5   BaseFunctionTool.__init__   s    " STT	#+#9#9$#? )DMM	++ /&;#-&P$*N*N*P#,--1=1O1O1Q!$0! $ A A CDr=   c                    U R                   $ rP   rv   rR   s    r;   __call__BaseFunctionTool.__call__   s    yyr=   c                   U R                   U R                  U R                  S.nU R                  b  U R                  US'   U R                  b  U R                  US'   U R
                  b  U R
                  US'   U R                  b  U R                  US'   U R                  b  U R                  US'   U R                  b  U R                  US'   U$ )N)r^   rw   rx   r|   r}   r~   r   r   r   )	r^   rw   rx   r   r   r   r   r   r   )r6   defns     r;   rS   BaseFunctionTool.to_dict   s    II++ --

 *$($7$7D!*$($7$7D!  ,&*&;&;D"#&&2,0,G,GD()+%)%9%9D!"<<#!\\DNr=   c                h    [         R                  " U R                  R                  =(       d    S5      $ )N )docstring_parserparserv   rD   rR   s    r;   _parsed_docstring"BaseFunctionTool._parsed_docstring   s"    %%dii&7&7&=2>>r=   c                    U R                   R                  (       aO  U R                   R                  nU R                   R                  (       a  USU R                   R                   3-  nU$ g)z*Extract description from parsed docstring.z

r   )r   short_descriptionlong_description)r6   rw   s     r;   r   0BaseFunctionTool._get_description_from_docstring   sX    !!3300BBK%%66d&<&<&M&M%NOOr=   c                    SSK Jn  SSKJnJn  SSKJn   " S SU5      nU" U R                  U R                  S9nU R                  R                  US9$ )	z:Create JSON schema from function signature using pydantic.r   )
CoreSchema)JsonSchemaValueGenerateJsonSchema)ArgumentsParameterc                  \   ^  \ rS rSrSU 4S jjrSS jr\      SU 4S jj5       rSrU =r	$ )	OBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema   c               :   > [         TU ]  5         Xl        X l        g rP   )r4   r5   _funcr   )r6   rv   parsed_docstringr:   s      r;   r5   XBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.__init__   s     "!
)9&r=   c                    U $ rP   rQ   )r6   _args_kwdss      r;   r   XBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.__call__   s    r=   c                  > [         TU ]  X5      nUR                  S5      S:w  a  U$ UR                  S5      nU(       a  [        U5      (       d  U$ U R                  R
                   Ha  nUR                  UR                  5      nU(       a  [        U5      (       d  M7  UR                  (       d  MJ  SU;  d  MR  UR                  US'   Mc     U$ )Nr+   rf   
propertiesrw   )r4   kw_arguments_schemar1   r   r   paramsarg_namerw   )r6   	argumentsvar_kwargs_schemaschemar   paramprop_schemar:   s          r;   r   cBaseFunctionTool._create_schema_from_function.<locals>.CustomGenerateJsonSchema.kw_arguments_schema   s     4YR::f%1!M#ZZ5
!)<)<!M "33::E",.."@K&gk.B.B (((]+-M5:5F5FM2 ; r=   )r   r   )rv   zCallable[..., Any]r   r   r>   r?   )r   r   r   r   r>   z'CustomGenerateJsonSchema')r   z'list[ArgumentsParameter]'r   zCoreSchema | Noner>   r   )
r@   rA   rB   rC   r5   r   r   r   rF   rG   rH   s   @r;   CustomGenerateJsonSchemar      s=    :
 5 $5 !	 r=   r   )rv   r   )schema_generator)pydantic_corer   pydantic.json_schemar   r   pydantic_core.core_schemar   rv   r   _adapterjson_schema)r6   r   r   r   r   r   r   s          r;   r   -BaseFunctionTool._create_schema_from_function   sN     	-L@ 	'9  	D 4UYUkUkl}}((:J(KKr=   c                ,    [        U R                  5      $ rP   )r   r   rR   s    r;   r   BaseFunctionTool._adapter  s    43344r=   )r   r   r   r   r   r   r   rw   rv   rx   r^   )rv   r    r^   
str | Nonerw   r   rx   $InputSchema | type[BaseModel] | Noner|   bool | Noner}   %BetaCacheControlEphemeralParam | Noner~   olist[Literal['direct', 'code_execution_20250825', 'code_execution_20260120', 'code_execution_20260521']] | Noner   r   r   "Iterable[dict[str, object]] | Noner   r   r>   r?   )r>   r    )r>   r   )r>   zdocstring_parser.Docstringrg   )r>   r!   )r>   zTypeAdapter[Any])r@   rA   rB   rC   rE   ry   rz   r5   ri   r   rS   r   r   r   r   r   rF   rQ   r=   r;   rt   rt   e   s*   
O,
I;9=E6=$ '+m*  "&=A%)?C -1=A"&D&D 	&D
  &D ;&D #&D =&D&D  +&D ;&D &D  
!&DP  ( ? ?*LX 5 5r=   rt   c                      \ rS rSrSS jrSrg)BetaFunctionTooli	  c                Z   [        U R                  5      (       a  [        S5      e[        U5      (       d!  [	        S[        U5      R                   35      e U R                  " S0 [        [        U5      D6$ ! [        R                   a  n[        SU R                   35      UeS nAff = f)NzJCannot call a coroutine function synchronously. Use `@async_tool` instead. Input must be a dictionary, got Invalid arguments for function rQ   r   rv   r   r   	TypeErrorr+   r@   r   r   r   r   ValidationError
ValueErrorr^   r6   rX   es      r;   rY   BetaFunctionTool.call
  s    tyy))kllu~~>tE{?S?S>TUVV	S++?d3.>??'' 	S>tyykJKQRR	Ss   A8 8B*B%%B*rQ   Nre   r@   rA   rB   rC   rY   rF   rQ   r=   r;   r   r   	      
Sr=   r   c                      \ rS rSrSS jrSrg)BetaAsyncFunctionTooli  c                v  #    [        U R                  5      (       d  [        S5      e[        U5      (       d!  [	        S[        U5      R                   35      e U R                  " S0 [        [        U5      D6I S h  vN $  N! [        R                   a  n[        SU R                   35      UeS nAff = f7f)NzGCannot call a synchronous function asynchronously. Use `@tool` instead.r   r   rQ   r   r   s      r;   rY   BetaAsyncFunctionTool.call  s     "499--hiiu~~>tE{?S?S>TUVV	S11EDe4DEEEE'' 	S>tyykJKQRR	Ss<   AB9#B =B>B B9B B6B11B66B9rQ   Nre   r   rQ   r=   r;   r   r     r   r=   r   c                H    [        U SS5      nUSL=(       a    [        U5      $ )uw  True when ``fn`` is a function produced by :func:`contextlib.contextmanager`.

``contextmanager`` wraps the generator function with ``functools.wraps``, so
the original generator function is reachable as ``__wrapped__`` — the same
signal :mod:`inspect` itself uses. We never call ``fn`` to find out, so a
plain tool function is never accidentally invoked during detection.
__wrapped__N)getattrr   fnwrappeds     r;   _is_sync_cm_factoryr   %  s(     b-.G$?#6w#??r=   c                H    [        U SS5      nUSL=(       a    [        U5      $ )zRTrue when ``fn`` is a function produced by :func:`contextlib.asynccontextmanager`.r   N)r   r   r   s     r;   _is_async_cm_factoryr   1  s&    b-.G$>#5g#>>r=   c           	       #    [        U SS5      =(       d    [        U SS5      nUb"   U" 5       n[        U5      (       a
  UI Sh  vN   [        U SS5      nUb8   [        USS5      nUb  U" SSS5      I Sh  vN   gUR                  SSS5        gg NM! [         a,  n[        R	                  S[        U SS5      U5         SnAN|SnAff = f NU! [         a,  n[        R	                  S	[        U SS5      U5         SnAgSnAff = f7f)
u  Run a runnable tool's optional cleanup.

Drives the legacy ``aclose`` / ``close`` attribute (awaited if it returns an
awaitable) and, when the tool was defined as a context manager via
:func:`beta_tool` / :func:`beta_async_tool`, its ``__exit__`` /
``__aexit__``. Both run when both are present — the context-manager support
is purely additive to ``close``. Exceptions are logged, never raised, so one
tool's bad cleanup can't abort another tool's.
acloseNry   z"tool.close failed tool=%s error=%sr^   ?rz   	__aexit__z4tool context-manager cleanup failed tool=%s error=%s)r   r   	Exceptionlogwarning__exit__)toolcloserresultr   cmaexits         r;   aclose_runnable_toolr   7  s     T8T*JgdGT.JF	]XF6"" 
)4	0B	~	oBT2E D$---D$-   	]KK<gdFTW>XZ[\\	] .  	oKKNPWX\^dfiPjlmnn	os   %DB BB 	DC 7C8C <D=C DB 
C
"C DC

DC 
D"D ;D DDc                    g rP   rQ   r   s    r;   	beta_toolr   V  s    ?Br=   r{   c       	            g rP   rQ   
rv   r^   rw   rx   r|   r}   r~   r   r   r   s
             r;   r   r   Z  s      #&r=   c        	            g rP   rQ   r{   s	            r;   r   r   m  s     :=r=   c       	   
        ^^^^^^^^^	 [         R                  (       a  [        S5      eSUUUUUUUUU	4	S jjn
U b  U
" U 5      $ U
$ )a&  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: ...
r   c                |  >	 [        U 5      (       a  [        S5      e[        U 5      (       aN  [        [        U 5      " 5       nUR                  5       n [        [        [        U5      TTT
TTTTT	TS9
nXl        U$ [        U TTT
TTTTT	TS9
$ ! [         a$    UR                  " [        R                  " 5       6   e f = f)Nzi@beta_tool was applied to an @asynccontextmanager; use @beta_async_tool for an async context-manager toolr{   )r   r   r   r   r   	__enter__r   rI   BaseExceptionr   sysexc_inforz   )r   r   innerr   r~   r}   r|   rw   r   r   rx   r^   r   s       r;   _makebeta_tool.<locals>._make  s    ##I  r""
 c2BLLNE'E* +!-"/"/$3*?#1!" %'!K#%''+"7)
 	
 !  S\\^,	s    B .B;)r   rI   r>   BetaFunctionTool[FunctionT]r   r   r   rv   r^   rw   rx   r|   r}   r~   r   r   r   r  s    ````````` r;   r   r     s=    : OPP,
 ,
\ T{Lr=   c                    g rP   rQ   r   s    r;   beta_async_toolr
    s    TWr=   c       	            g rP   rQ   r   s
             r;   r
  r
    s      -0r=   c        	            g rP   rQ   r{   s	            r;   r
  r
    s	     ILr=   c       	   
        ^^^^^^^^^	 [         R                  (       a  [        S5      eSUUUUUUUUU	4	S jjn
U b  U
" U 5      $ U
$ )a5  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: ...
r   c                  >	^^^^^ [        U 5      (       a  [        S5      e[        U 5      (       a  Tc  [        S5      e[        [        U 5      " 5       mS SS.m[
        R                  " 5       m/ mSUUUU4S jjmSU4S jjnT=(       d    [        U SS5      Ul        Tb  TO[        U S	S 5      Ul	        [        [        [        U5      TTTT
T	TTTTS
9
nTR                  U5        U$ [        U TTTT
T	TTTTS
9
$ )Nza@beta_async_tool was applied to a @contextmanager; use @beta_tool for a sync context-manager toolzan @asynccontextmanager tool needs an explicit input_schema= (its parameters can't be inferred until the context manager is entered)F)	validatedenteredc                 F  >#    TS   (       dj  T IS h  vN   TS   (       d@  TR                  5       I S h  vN n [        R                  " U 5      TS'   STS'   TTS   l        S S S 5      IS h  vN   TS   $ TS   $  Nh NH N! , IS h  vN  (       d  f       TS   $ = f7f)Nr  r  Tr   )
__aenter__r   r   rz   )r  r   
enter_lockstatetool_boxs    r;   _entered0beta_async_tool.<locals>._make.<locals>._entered1  s     Y')z$Y/*,--/$9E191G1G1NE+./3E), <>HQK8  *z [))u[))  *$9  *zz [))sT   B!A=B!BA?,B#B!.B/B!?BB!B	B
BB!c                 n   >#    T" 5       I S h  vN n[        [        U" S0 U D6I S h  vN 5      $  N" N
7f)NrQ   )r   r#   )kwargsr  r  s     r;   _lazy-beta_async_tool.<locals>._make.<locals>._lazy=  s1     "**,	6i>Q&>Q8QRR -8Qs   5153
	55r@   r   rD   r{   )r>   r   )r  r   r>   r#   )r   r   r   r   r   anyioLockr   r@   rD   r   rK   r2   )r   r  r   r  r   r  r  r  r~   r}   r|   rw   r   r   rx   r^   r   s      @@@@@r;   r  beta_async_tool.<locals>._make  s   r""s   ## #^  c2B265$IEJDFH
* 
*S "DWRV%DEN+6+BKPRT]_cHdEM(^U+')++ /&;-D OOD!K$#%''+"7)
 	
r=   )r   rK   r>   %BetaAsyncFunctionTool[AsyncFunctionT]r  r  s    ````````` r;   r
  r
    s?    : OPP@
 @
D T{Lr=   )r   rf   r>   bool)r   rf   r>   r?   )rv   rI   r>   r  )rv   rI   r^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   r  )r^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   z2Callable[[FunctionT], BetaFunctionTool[FunctionT]]rP   )rv   zFunctionT | Noner^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   zPBetaFunctionTool[FunctionT] | Callable[[FunctionT], BetaFunctionTool[FunctionT]])rv   rK   r>   r  )rv   rK   r^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   r  )r^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   zACallable[[AsyncFunctionT], BetaAsyncFunctionTool[AsyncFunctionT]])rv   zAsyncFunctionT | Noner^   r   rw   r   rx   r   r|   r   r}   r   r~   r   r   r   r   r   r   r   r>   ziBetaAsyncFunctionTool[AsyncFunctionT] | Callable[[AsyncFunctionT], BetaAsyncFunctionTool[AsyncFunctionT]])J
__future__r   r  loggingabcr   r   typingr   r   r   r	   r
   r   r   r   r   inspectr   r   r   r   collections.abcr   typing_extensionsr   r   r   r  r   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@   r   r0   r#   rE   r   r%   FunctionrI   AsyncFunctionrK   rM   rk   rt   r   r   r   r   r   r   r
  BetaRunnableToolBetaAsyncRunnableToolrQ   r=   r;   <module>r4     sJ   " 
  # ^ ^ ^ ] ] % : :       & " [ [ & + M!(-c8K3H.H(I I I	 D C334Kx0	iS2L(LMMN)?c 3 a5wy) a5HS'	2 SS,^< S	@?o> 
 B 
 B 
 "9=!%;? )-9=&
& & 	&
 7& & 9&& '& 7& & !& 
&$ 
 "9=!%;? )-9==
= = 7	=
 = 9== '= 7= = 8= 
=$ "Q "9=!%;? )-9=Q
Q Q 	Q
 7Q Q 9QQ 'Q 7Q Q VQh 
 W 
 W 
 "9=!%;? )-9=0
0 0 	0
 70 0 900 '0 70 0 +0 
0$ 
 "9=!%;? )-9=L
L L 7	L
 L 9LL 'L 7L L GL 
L$ #'e "9=!%;? )-9=e
e e 	e
 7e e 9ee 'e 7e e oeP )#.0GGH 3C8:VVW r=   