
    c
i                    \   U d Z ddlmZ ddlZddlZddlZddl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 erddlmZ d	Z ed e                      Zefd/dZd0dZd1dZ ej        d          Zd2dZd3dZd4d!Zd5d%Zg Z d&e!d'<   d6d*Z" ej#        d+,          d7d.            Z$dS )8z4Shared utility functions for async and sync clients.    )annotationsN)Mapping)tzinfo)TYPE_CHECKINGAnycast)RunCreateMetadata)ZoneInfo)	x-api-keyapi_key
str | Nonereturnc                    t          | t                    r| S | t          u rZdD ]W}t          j        | d          x}r<|                                                    d                              d          c S XdS )a  Get the API key from the environment.
    Precedence:
        1. explicit string argument
        2. LANGGRAPH_API_KEY (if api_key not provided)
        3. LANGSMITH_API_KEY (if api_key not provided)
        4. LANGCHAIN_API_KEY (if api_key not provided)

    Args:
        api_key: The API key to use. Can be:
            - A string: use this exact API key
            - None: explicitly skip loading from environment
            - NOT_PROVIDED (default): auto-load from environment variables
    )	LANGGRAPH	LANGSMITH	LANGCHAIN_API_KEY"'N)
isinstancestrNOT_PROVIDEDosgetenvstrip)r   prefixenvs      C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph_sdk/_shared/utilities.py_get_api_keyr      s     '3 ,= 	9 	9Fi6 3 3 3444s 9yy{{((--33C888889 4    custom_headersMapping[str, str] | Nonedict[str, str]c                    |pi }t           D ]}||v rt          d| d          ddt          j         i|}t	          |           }|r||d<   |S )z1Combine api_key and custom user-provided headers.zCannot set reserved header 'r   z
User-Agentzlanggraph-sdk-py/r   )RESERVED_HEADERS
ValueErrorlanggraph_sdk__version__r   )r   r!   headerheadersresolved_api_keys        r   _get_headersr,   2   s    
 $)rN" G G^##EFEEEFFF $ 	E-*CEE
G $G,, 0/Nr    objr   c                   t          | t                    }t          | d          r?t          | j                  r+|rt          d| d|           |                                 S t          | d          r?t          | j                  r+|rt          d| d|           |                                 S t          | t          t          f          rt          |           S t          dt          |            d          )N
model_dumpz#Cannot JSON-serialize type object: zI. Did you mean to pass an instance of the object instead?
Received type: dictzObject of type z is not JSON serializable)
r   typehasattrcallabler/   	TypeErrorr0   set	frozensetlist)r-   is_classs     r   _orjson_defaultr9   G   s1   #t$$HsL!! Phs~&>&> P 	,c , ,$', ,   ~~	f		 
P(38"4"4 
P 	,c , ,$', ,   xxzz	C#y)	*	* PCyyN$s))NNNOOOr    z5(\/threads\/(?P<thread_id>.+))?\/runs\/(?P<run_id>.+)responsehttpx.ResponseRunCreateMetadata | Nonec                    | j                             d          x}rUt                              |          x}r9t	          |                    d          |                    d          pd          S dS )z/Extract run metadata from the response headers.zContent-Locationrun_id	thread_idN)r>   r?   )r*   get_RUN_METADATA_PATTERNsearchr	   group)r:   content_locationmatchs      r   _get_run_metadata_from_responserF   c   s     %,001CDDD 
&--.>???
 !;;x((kk+..6$
 
 
 	

 4r    eventr   datadict[str, Any] | Nonec                   | dk    rdS |                      d          }|d         }t          |          dk    r
|dd         ng }|||d}|dk    r/t          |t                    r|                    dg           |d	<   ng |d	<   |S )
z}Convert an SSE event+data pair into a v2 stream part dict.

    Returns None for ``end`` events (signals end of stream).
    endN|r      )r1   nsrH   values__interrupt__
interrupts)splitlenr   r0   pop)rG   rH   parts
event_typerN   results         r   _sse_to_v2_dictrX   r   s    
 ~~tKKEqJ%jj1nnqrr"B&0DIIFX*T4"8"8#xx<<|!|Mr    tzstr | tzinfo | ZoneInfo | Nonec                ,   | t          | t                    r| S t          | t                    rCt          | d          r| j        S |                     d          }||S t          d| d          t          dt          |           j	                   )a  Convert a timezone argument to an IANA timezone string.

    Accepts:
        - A string (returned as-is, assumed to be an IANA timezone name)
        - A ``datetime.tzinfo`` instance (e.g. ``zoneinfo.ZoneInfo("America/New_York")``,
          ``datetime.timezone.utc``). The ``key`` attribute is used if available,
          otherwise ``tzname(None)`` is used.
        - ``None`` (returned as ``None``)
    Nkeyz$Cannot determine timezone name from zL. Use a zoneinfo.ZoneInfo instance or pass a string like 'America/New_York'.z9Expected str, datetime.tzinfo, or None for timezone, got )
r   r   r   r2   r\   tznamer&   r4   r1   __name__)rY   names     r   _resolve_timezoner`      s     
zZC((z	"f 
2u 	6MyyKY2 Y Y Y
 
 	
 WDHHDUWW  r    dMapping[str, Any]dict[str, Any]c                >    d |                                  D             S )Nc                    i | ]
\  }}|||S N ).0kvs      r   
<dictcomp>z"_provided_vals.<locals>.<dictcomp>   s    888TQ!-Aq---r    )items)ra   s    r   _provided_valsrm      s    88QWWYY8888r    zlist[httpx.ASGITransport]_registered_transportsappNonec                (    t           D ]	}| |_        
d S rf   )rn   ro   )ro   	transports     r   configure_loopback_transportsrs      s$    +  		 r    rM   )maxsizetype[httpx.ASGITransport]c                 V    	 ddl m}  | j        S # t          $ r t          j        cY S w xY w)Nr   asgi_transport)langgraph_apirx   ASGITransportImportErrorhttpxrw   s    r   get_asgi_transportr}      sL    #000000++ # # #""""#s    (()r   r   r   r   )r   r   r!   r"   r   r#   )r-   r   r   r   )r:   r;   r   r<   )rG   r   rH   r   r   rI   )rY   rZ   r   r   )ra   rb   r   rc   )ro   r   r   rp   )r   ru   )%__doc__
__future__r   	functoolsr   recollections.abcr   datetimer   typingr   r   r   r|   r'   langgraph_sdk.schemar	   zoneinfor
   r%   objectr   r   r,   r9   compilerA   rF   rX   r`   rm   rn   __annotations__rs   	lru_cacher}   rg   r    r   <module>r      s   : : : " " " " " "     				 				 # # # # # #       + + + + + + + + + +      2 2 2 2 2 2 "!!!!!!! tD&&((## (4     2   *P P P P. #
<  
      $   :9 9 9 9 57  6 6 6 6   
 Q# # #  # # #r    