
    4Rj                        d Z ddlmZ ddlmZmZ ddlmZ g dZdZ		 dZ
	 dZ	 d	Zed
   Z	 ddZdZddZddZ	 	 d	 	 	 	 	 ddZ	 	 d	 	 	 	 	 ddZddZy)ac  Tracking for SDK helper usage via the x-stainless-helper header.

This module is the single source of truth for the helper-telemetry header
keys and the closed tag vocabulary. The append-don't-clobber merge for the
header itself lives in :func:`anthropic._base_client.merge_headers`; here
we only carry the constants and the per-object tagging machinery.
    )annotations)Anycast)Literal)STAINLESS_HELPER_HEADERSTAINLESS_HELPER_METHOD_HEADERSTAINLESS_STREAM_HELPER_HEADERHELPER_METHOD_STREAMStainlessHelperHeaderValuehelper_header
tag_helperget_helper_tagcollect_helpersstainless_helper_header!stainless_helper_header_from_filezx-stainless-helperzx-stainless-helper-methodzx-stainless-stream-helperstream)zbeta.messages.parseBetaToolRunner
compactionzenvironments-work-pollerzenvironments-workerzfallback-refusal-middlewaremcp_contentmcp_messagemcp_resource_to_contentmcp_resource_to_filemcp_toolzmessages.parsezsession-tool-runnerc                    t         | iS )zThe ``x-stainless-helper: <value>`` header dict, for passing into a
    ``merge_headers`` call or as ``extra_headers``/``default_headers``.

    Typing keeps the value drawn from the closed vocabulary above.
    )r   )values    h/var/www/html/meridian/meridian-ai/venv/lib/python3.12/site-packages/anthropic/lib/_stainless_helpers.pyr   r   H   s     $U++    _stainless_helperc                f    	 t         j                  | t        |       y# t        t        f$ r Y yw xY w)z0Mark an object as created by a named SDK helper.N)object__setattr___HELPER_ATTRAttributeError	TypeError)objnames     r   r   r   T   s0    3d3I& s    00c                $    t        | t        d      S )z+Get the helper name from an object, if any.N)getattrr"   )r%   s    r   r   r   \   s    3d++r   Nc                   g dfd}| r| D ]  } |t        |              |r|D ]  } |t        |             t        |t              r-t        t        t        t
        f   |      j                  d      }nt        |dd      }t        |t              sot        t        t           |      D ]  } |t        |               S )z:Collect deduplicated helper names from tools and messages.c                8    | | vrj                  |        y y y )N)append)taghelperss    r   _addzcollect_helpers.<locals>._addh   s"    ?s'1NN3  2?r   contentN)r,   
str | NonereturnNone)
r   
isinstancedictr   strr   getr(   listr    )toolsmessagesr.   toolmessageblocksblockr-   s          @r   r   r   a   s    
 G   	'D%&	'  
	0G() '4("4S>7;??	J )T:&$'!$v,7 0E./0
	0 Nr   c                P    t        | |      }|si S t        dj                  |      iS )zvBuild x-stainless-helper header dict from tools and messages.

    Returns an empty dict if no helpers are found.
    z, )r   r   join)r8   r9   r-   s      r   r   r      s,     eX.G	#TYYw%788r   c                0    t        |       }|i S t        |iS )z8Build x-stainless-helper header dict from a file object.)r   r   )filer,   s     r   r   r      s!    

C
{	#S))r   )r   r   r1   dict[str, str])r%   r   r&   r   r1   r2   )r%   r    r1   r0   )NN)r8   r   r9   r   r1   z	list[str])r8   r   r9   r   r1   rB   )rA   r    r1   rB   )__doc__
__future__r   typingr   r   typing_extensionsr   __all__r   r   r	   r
   r   r   r"   r   r   r   r   r    r   r   <module>rI      s    #  % /  "=  F!<  M  % , #,  @ 999 9*r   