Ë
    tPêjë  ã                   óP   — d Z ddlZddlmZmZ ddlmZ dedefd„Z	 G d„ d	«      Z
y)
zK
Arize Phoenix API client for fetching prompt versions from Arize Phoenix.
é    N)ÚAnyÚFinal)ÚHTTPHandlerÚ
identifierÚreturnc                 ó²   ‡ — t        ˆ fd„dD «       «      rt        d‰ ›d�«      ‚d‰ v rt        d‰ ›d�«      ‚t        j                  j	                  ‰ d¬«      S )	z?Reject path traversal characters and URL-encode the identifier.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0Úcr   s     €út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/integrations/arize/arize_phoenix_client.pyú	<genexpr>z_sanitize_id.<locals>.<genexpr>   s   øè ø€ Ò
:˜qˆ1�
Œ?Ñ
:ùs   ƒ)ú/ú\ú#ú?zInvalid identifier z : contains disallowed charactersz..z: path traversal detectedÚ )Úsafe)ÚanyÚ
ValueErrorÚurllibÚparseÚquote)r   s   `r   Ú_sanitize_idr      s`   ø€ ä
Ó
:Ð$9Ô
:Ô:ÜÐ.¨z¨nÐ<\Ð]Ó^Ð^ØˆzÑÜÐ.¨z¨nÐ<UÐVÓWÐWÜ�<‰<×Ñ˜j¨rÐÓ2Ð2ó    c                   ó`   — e Zd ZdZddedz  dedz  fd„Zdedeeef   dz  fd„Zde	fd	„Z
d
„ Zy)ÚArizePhoenixClientzÏ
    Client for interacting with Arize Phoenix API to fetch prompt versions.

    Supports:
    - Authentication with Bearer tokens
    - Fetching prompt versions
    - Direct API base URL configuration
    NÚapi_keyÚapi_basec                 óÌ   — || _         || _        | j                   st        d«      ‚| j                  st        d«      ‚d| j                   › �ddœ| _        t	        d¬«      | _        y)	zâ
        Initialize the Arize Phoenix client.

        Args:
            api_key: Arize Phoenix API token
            api_base: Base URL for the Arize Phoenix API (e.g., 'https://app.phoenix.arize.com/s/workspace/v1')
        zapi_key is requiredzapi_base is requiredzBearer zapplication/json)ÚAuthorizationÚAcceptT)Údisable_default_headersN)r   r   r   Úheadersr   Úhttp_handler)Úselfr   r   s      r   Ú__init__zArizePhoenixClient.__init__   sc   € ð ˆŒØ ˆŒà�|Š|ÜÐ2Ó3Ð3à�}Š}ÜÐ3Ó4Ð4ð  ' t§|¡| nÐ5Ø(ñ
ˆŒô (ÀÔEˆÕr   Úprompt_version_idr   c                 ó   — t        |«      }| j                  › d|› �}	 | j                  j                  || j                  ¬«      }|j                  «        |j                  «       }|j                  d«      S # t        $ rŽ}t        |dd«      }|�it        |d«      r]|j                  dk(  rY d}~y|j                  dk(  rt        d	|› d
�«      ‚|j                  dk(  rt        d«      ‚t        d|› d|› �«      ‚t        d|› d|› �«      ‚d}~ww xY w)zî
        Fetch a prompt version from Arize Phoenix.

        Args:
            prompt_version_id: The ID of the prompt version to fetch

        Returns:
            Dictionary containing prompt version data, or None if not found
        z/v1/prompt_versions/©r$   ÚdataÚresponseNÚstatus_codei”  i“  z!Access denied to prompt version 'z('. Check your Arize Phoenix permissions.i‘  zHAuthentication failed. Check your Arize Phoenix API key and permissions.z Failed to fetch prompt version 'z': zError fetching prompt version ')r   r   r%   Úgetr$   Úraise_for_statusÚjsonÚ	ExceptionÚgetattrÚhasattrr-   )r&   r(   Úsafe_idÚurlr,   r+   Úes          r   Úget_prompt_versionz%ArizePhoenixClient.get_prompt_version8   s1  € ô &Ð&7Ó8ˆØŸ™�Ð&:¸7¸)ÐDˆð	]à×(Ñ(×,Ñ,¨S¸$¿,¹,Ð,ÓGˆHØ×%Ñ%Ô'à"Ÿ-™-›/ˆDØ—8‘8˜FÓ#Ð#øäò 	]ä˜q *¨dÓ3ˆHØÐ#¬°¸-Ô(HØ×'Ñ'¨3Ò.ÜØ×)Ñ)¨SÒ0Ü#Ø;Ð<MÐ;NÐNvÐwóð ð ×)Ñ)¨SÒ0Ü#Ð$nÓoÐoä#Ð&FÐGXÐFYÐY\Ð]^Ð\_Ð$`ÓaÐaäÐ"AÐBSÐATÐTWÐXYÐWZÐ [Ó\Ð\ûð	]ús   žAA6 Á6	DÁ?*DÂ.ADÄDc                 óÄ   — 	 | j                   › d�}| j                  j                  j                  || j                  ¬«      }|j                  «        y# t        $ r Y yw xY w)z�
        Test the connection to the Arize Phoenix API.

        Returns:
            True if connection is successful, False otherwise
        z/prompt_versionsr*   TF)r   r%   Úclientr.   r$   r/   r1   )r&   r5   r,   s      r   Útest_connectionz"ArizePhoenixClient.test_connection^   s^   € ð	à ŸM™M˜?Ð*:Ð;ˆCØ"×/Ñ/×6Ñ6×:Ñ:¸3ÈÏÉÐ:ÓUˆHØ×%Ñ%Ô'ØøÜò 	Ùð	ús   ‚AA Á	AÁAc                 óR   — t        | d«      r| j                  j                  «        yy)z)Close the HTTP handler to free resources.r%   N)r3   r%   Úclose)r&   s    r   r<   zArizePhoenixClient.closen   s#   € ä�4˜Ô(Ø×Ñ×#Ñ#Õ%ð )r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr'   Údictr   r7   Úboolr:   r<   r
   r   r   r   r      sZ   „ ññF  d¡
ð F¸SÀ4¹Zó Fð4$]°Cð $]¸DÀÀcÀ¹NÈTÑ<Qó $]ðL ó ó &r   r   )r@   Úurllib.parser   Útypingr   r   Ú&litellm.llms.custom_httpx.http_handlerr   rA   r   r   r
   r   r   ú<module>rG      s4   ðñó ß å >ð3˜Sð 3 Só 3÷]&ò ]&r   