Ë
    uPêj©M  ã                   óÚ  — U d dl Z d dl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mZ d dlZd dlmZ 	 d dlmZmZ d dlmZmZ d	Z	 d dlmZ dZeed<   dSd„Z G d„ de«      Z  G d„ de«      Z!e G d„ d«      «       Z"de#de$fd„Z%de$de$de&de'de$f
d„Z(de$de
fd„Z)d e$de
fd!„Z*d"Z+eed#<   d$Z,eed%<   d&Z-eed'<   d(Z.eed)<   d*Z/eed+<   d,Z0eed-<   d.Z1eed/<   d0e&de&fd1„Z2 ejf                  d2«      Z4eed3<    ejf                  d4e› d5�«      Z5eed6<   dTd0e&d7e$dz  de$fd8„Z6de&d0e&d9e&d7e$de7e&e#f   f
d:„Z8de&d0e&d9e&d7e$de7e&e#f   f
d;„Z9	 	 	 	 dUde&d0e&d9e&d7e$d<e$dz  d=e$dz  d>e:dz  d?e:dz  de7e&e#f   fd@„Z;	 dTde&d0e&d<e$dz  de&fdA„Z<dBdCdDdEdFdGdHdIœZ=ee&e$e$f      edJ<   dKe&e$e
f   de&e$e
f   fdL„Z>dMe
de
fdN„Z?dKe
de
fdO„Z@dPe$dQe&e$e
f   de$fdR„ZAy# e$ r d
ZY �ŒŒw xY w# e$ r dZY �Œ“w xY w)Vé    N)Ú	dataclass)Ú
formatdate)ÚAnyÚFinalÚProtocol)Úurlparse)ÚBaseLLMException)ÚhashesÚserialization)ÚpaddingÚrsaTF)Úversionz0.0.0Ú20231130ÚOCI_API_VERSIONÚreturnc                  ó&   — t         st        d«      ‚y )Nzicryptography package is required for OCI authentication. Please install it with: pip install cryptography)Ú_CRYPTOGRAPHY_AVAILABLEÚImportError© ó    úb/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/oci/common_utils.pyÚ_require_cryptographyr   !   s   € Ý"ÜØwó
ð 	
ð #r   c                   óJ   ‡ — e Zd Z	 ddededej                  dz  fˆ fd„Zˆ xZS )ÚOCIErrorNÚstatus_codeÚmessageÚheadersc                 ó*   •— t         ‰| �  |||¬«       y )N)r   r   r   )ÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €r   r    zOCIError.__init__)   s    ø€ ô 	‰ÑØ#ØØð 	õ 	
r   ©N)	Ú__name__Ú
__module__Ú__qualname__ÚintÚstrÚhttpxÚHeadersr    Ú__classcell__)r"   s   @r   r   r   (   s7   ø„ ð
 )-ñ	

àð

ð ð

ð —‘ Ñ%÷	

ñ 

r   r   c                   ó*   — e Zd ZdZddœdededdfd„Zy)	ÚOCISignerProtocolzÎ
    Protocol for OCI request signers (e.g., oci.signer.Signer).

    Compatible with the OCI Python SDK's Signer class.
    See: https://docs.oracle.com/en-us/iaas/tools/python/latest/api/signing.html
    F©Úenforce_content_headersÚrequestr/   r   Nc                 ó   — y r#   r   )r!   r0   r/   s      r   Údo_request_signz!OCISignerProtocol.do_request_signC   s   € Ør   )r$   r%   r&   Ú__doc__r   Úboolr2   r   r   r   r-   r-   ;   s)   „ ñð PUò  sð Èð ÐY]ô r   r-   c                   óP   — e Zd ZU dZeed<   eed<   eed<   eed<   edefd„«       Z	y)	ÚOCIRequestWrapperzà
    Wrapper for HTTP requests compatible with OCI signer interface.

    Wraps request data in the format expected by OCI SDK signers, which require
    objects with method, url, headers, body, and path_url attributes.
    ÚmethodÚurlr   Úbodyr   c                 ó„   — t        | j                  «      }|j                  |j                  rd|j                  z   z   S dz   S )z0Returns the path + query string for OCI signing.ú?Ú )r   r8   ÚpathÚquery)r!   Úparseds     r   Úpath_urlzOCIRequestWrapper.path_urlU   s8   € ô ! §¡Ó*ˆØ�{‰{°F·L²L˜c F§L¡LÑ0ÑIÐIÀbÑIÐIr   N)
r$   r%   r&   r3   r(   Ú__annotations__ÚdictÚbytesÚpropertyr@   r   r   r   r6   r6   G   s9   … ñð ƒKØ	ƒHØƒMØ
ƒKàðJ˜#ò Jó ñJr   r6   Údatac                 ó’   — t        j                  | d¬«      j                  «       }t        j                  |«      j                  «       S )NF)Úusedforsecurity)ÚhashlibÚsha256ÚdigestÚbase64Ú	b64encodeÚdecode)rE   rJ   s     r   Úsha256_base64rN   \   s7   € ô —N‘N 4¸Ô?×FÑFÓH€FÜ×Ñ˜FÓ#×*Ñ*Ó,Ð,r   r7   r=   r   Úsigned_headersc                 ó¢   — g }|D ]8  }|dk(  r| j                  «       › d|› �}n||   }|j                  |› d|› �«       Œ: dj                  |«      S )Nú(request-target)ú z: ú
)ÚlowerÚappendÚjoin)r7   r=   r   rO   ÚlinesÚheaderÚvalues          r   Úbuild_signature_stringrZ   i   sg   € Ø€EØ ò +ˆØÐ'Ò'Ø—|‘|“~Ð& a¨ vÐ.‰Eà˜F‘OˆEØ�‰˜�x˜r % Ð)Õ*ð+ð �9‰9�UÓÐr   Úkey_strc                 ó°   — t        «        t        j                  | j                  d«      d ¬«      }t	        |t
        j                  «      st        d«      ‚|S )Núutf-8)ÚpasswordzNThe provided private key is not an RSA key, which is required for OCI signing.)r   r   Úload_pem_private_keyÚencodeÚ
isinstancer   ÚRSAPrivateKeyÚ	TypeError)r[   Úkeys     r   Úload_private_key_from_strre   t   sJ   € ÜÔÜ×3Ñ3Ø�‰�wÓØô€Cô �cœ3×,Ñ,Ô-ÜÐhÓiÐiØ€Jr   Ú	file_pathc                 ó.  — 	 t        | dd¬«      5 }|j                  «       j                  «       }ddd«       st        d| › �«      ‚t        |«      S # 1 sw Y   Œ$xY w# t        $ r t        d| › �«      ‚t        $ r}t	        d| › d|› �«      |‚d}~ww xY w)	z%Loads a private key from a file path.Úrr]   )ÚencodingNzPrivate key file not found: z!Failed to read private key file 'z': zPrivate key file is empty: )ÚopenÚreadÚstripÚFileNotFoundErrorÚOSErrorÚ
ValueErrorre   )rf   Úfr[   Úes       r   Úload_private_key_from_filerr      s©   € ðTÜ�)˜S¨7Ô3ð 	.°qØŸV™V›XŸ^™^Ó-ˆG÷	.ñ ÜÐ6°y°kÐBÓCÐCä$ WÓ-Ð-÷	.ð 	.ûäò LÜÐ">¸y¸kÐ JÓKÐKÜò TÜÐ9¸)¸ÀCÈÀsÐKÓLÐRSÐSûðTús-   ‚A �A¯A ÁAÁA ÁBÁ=BÂBÚ
OCI_REGIONÚ_OCI_REGION_ENVÚOCI_USERÚ_OCI_USER_ENVÚOCI_FINGERPRINTÚ_OCI_FINGERPRINT_ENVÚOCI_TENANCYÚ_OCI_TENANCY_ENVÚOCI_KEY_FILEÚ_OCI_KEY_FILE_ENVÚOCI_KEYÚ_OCI_KEY_ENVÚOCI_COMPARTMENT_IDÚ_OCI_COMPARTMENT_ID_ENVÚoptional_paramsc           	      óö  — | j                  d«      xs' t        j                  j                  t        «      xs d| j                  d«      xs# t        j                  j                  t        «      | j                  d«      xs# t        j                  j                  t
        «      | j                  d«      xs# t        j                  j                  t        «      | j                  d«      xs# t        j                  j                  t        «      | j                  d«      xs# t        j                  j                  t        «      | j                  d«      xs# t        j                  j                  t        «      d	œS )
a  
    Merge OCI credentials from optional_params (explicit, always wins) and
    environment variables (fallback).

    Returns a dict with resolved values for:
        oci_region, oci_user, oci_fingerprint, oci_tenancy,
        oci_key, oci_key_file, oci_compartment_id
    Ú
oci_regionzus-ashburn-1Úoci_userÚoci_fingerprintÚoci_tenancyÚoci_keyÚoci_key_fileÚoci_compartment_id)rƒ   r„   r…   r†   r‡   rˆ   r‰   )
ÚgetÚosÚenvironrt   rv   rx   rz   r~   r|   r€   )r�   s    r   Úresolve_oci_credentialsr�   œ   sú   € ð &×)Ñ)¨,Ó7Òl¼2¿:¹:¿>¹>Ì/Ó;ZÒlÐ^lØ#×'Ñ'¨
Ó3ÒT´r·z±z·~±~ÄmÓ7TØ*×.Ñ.Ð/@ÓAÒiÄRÇZÁZÇ^Á^ÔThÓEiØ&×*Ñ*¨=Ó9Ò]¼R¿Z¹Z¿^¹^ÔL\Ó=]Ø"×&Ñ& yÓ1ÒQ´R·Z±Z·^±^ÄLÓ5QØ'×+Ñ+¨NÓ;Ò`¼r¿z¹z¿~¹~ÔN_Ó?`Ø-×1Ñ1Ð2FÓGÒrÌ2Ï:É:Ï>É>ÔZqÓKrñð r   z^[a-z][a-z0-9-]{0,30}[a-z0-9]$Ú_OCI_REGION_REú/z/actions/[^/?#]+/?$Ú_OCI_ACTION_PATH_REÚapi_basec                 óè   — |r%t         j                  d|«      j                  d«      S t        | «      }|d   }t	        |t
        «      rt        j                  |«      st        dd|›d�¬«      ‚d|› d	�S )
a.  Return the OCI inference base URL, respecting any explicit api_base override.

    If ``api_base`` already ends with a fully-formed OCI action path
    (``/{OCI_API_VERSION}/actions/<name>``), that suffix is stripped so callers
    can append their own action path without producing a doubled URL.
    r<   r�   rƒ   é�  zInvalid OCI region zB: must match ^[a-z][a-z0-9-]{0,30}[a-z0-9]$ (e.g. 'us-ashburn-1').©r   r   zhttps://inference.generativeai.z.oci.oraclecloud.com)	r�   ÚsubÚrstripr�   ra   r(   rŽ   Úmatchr   )r�   r‘   ÚcredsÚregions       r   Úget_oci_base_urlrš   ´   s   € ñ Ü"×&Ñ& r¨8Ó4×;Ñ;¸CÓ@Ð@Ü*¨?Ó;€EØ˜,Ñ'€FÜ�fœcÔ"¬.×*>Ñ*>¸vÔ*FÜØà% f ZÐ/sÐtô
ð 	
ð -¨V¨HÐ4HÐIÐIr   Úrequest_datac                 ó:  — |j                  d«      }t        j                  |«      j                  d«      }t	        |j                  dd«      «      j                  «       }|dvrt        d|› �«      ‚i | ¥}|j                  dd«       |j                  d	t	        t        |«      «      «       t        ||||¬
«      }|€t        d«      ‚	 |j                  |d¬«       | j                  |j                  «       | |fS # t        $ r}	t        dd|	› d�¬«      |	‚d}	~	ww xY w)zHSign a request using an OCI SDK Signer object passed in optional_params.Ú
oci_signerr]   r7   ÚPOST>   ÚGETÚPUTrž   ÚPATCHÚDELETEzUnsupported HTTP method: úcontent-typeúapplication/jsonúcontent-length)r7   r8   r   r9   Nz;oci_signer cannot be None when calling sign_with_oci_signerTr.   iô  z1Failed to sign request with provided oci_signer: zË. The signer must implement the OCI SDK Signer interface with a do_request_sign(request, enforce_content_headers=True) method. See: https://docs.oracle.com/en-us/iaas/tools/python/latest/api/signing.htmlr”   )rŠ   ÚjsonÚdumpsr`   r(   Úupperro   Ú
setdefaultÚlenr6   r2   Ú	Exceptionr   Úupdater   )
r   r�   r›   r‘   r�   r9   r7   Úprepared_headersÚrequest_wrapperrq   s
             r   Úsign_with_oci_signerr¯   Î   s2  € ð (×+Ñ+¨LÓ9€JÜ—*‘*˜\Ó*×1Ñ1°'Ó:€DÜ˜×+Ñ+¨H°fÓ=Ó>×DÑDÓF€FàÐ>Ñ>ÜÐ4°V°HÐ=Ó>Ð>à) ˜kÐØ×Ñ Ð0BÔCØ×ÑÐ 0´#´c¸$³i³.ÔAä.°fÀ(ÐTdÐkoÔp€OàÐÜÐVÓWÐWðØ×"Ñ" ?ÈDÐ"ÔQð ‡N�N�?×*Ñ*Ô+Ø�Dˆ=Ðøô ò 	ÜØàCÀAÀ3ð G_ð _ô
ð ð	ûð	ús   ÃC: Ã:	DÄDÄDc                 óÆ  — t        |«      }|d   }|d   }|d   }|d   }|d   }	|r|r|r|s3|	s1t        ddt        › dt        › dt        › dt
        › d	t        › d
�¬«      ‚t        |j                  dd«      «      j                  «       }
t        j                  |«      j                  d«      }t        |«      }|j                  xs d}|j                  }t!        d¬«      }| j                  dd«      }t        t#        |«      «      }t%        |«      }|||||dœ}g d¢}t'        |
|||«      }t)        «        d}|rUt+        |t        «      s#t        ddt-        |«      j.                  › �¬«      ‚|j1                  dd«      j1                  dd«      }|rt3        |«      n|	rt5        |	«      nd}|€t        dd¬«      ‚|j7                  |j                  d«      t9        j:                  «       t=        j>                  «       «      }tA        jB                  |«      jE                  «       }|› d|› d|› �}d|› ddjG                  |«      › d |› d!�}| jI                  ||||||d"œ«       | |fS )#zVSign a request using manually provided OCI credentials (user/fingerprint/tenancy/key).r„   r…   r†   r‡   rˆ   i‘  z­Missing required OCI credentials: oci_user, oci_fingerprint, oci_tenancy, and at least one of oci_key or oci_key_file. These can also be supplied via environment variables: ú, z (or z@). Alternatively, provide an oci_signer object from the OCI SDK.r”   r7   rž   r]   r�   T)Úusegmtr£   r¤   )ÚdateÚhostr£   r¥   úx-content-sha256)r³   rQ   r´   r¥   r£   rµ   Nr“   zKoci_key must be a string containing the PEM private key content. Got type: z\nrS   z
zWPrivate key is required for OCI authentication. Provide either oci_key or oci_key_file.zSignature version="1",keyId="z"",algorithm="rsa-sha256",headers="rR   z",signature="ú")Úauthorizationr³   r´   r£   r¥   rµ   )%r�   r   rv   rx   rz   r~   r|   r(   rŠ   r¨   r¦   r§   r`   r   r=   Únetlocr   rª   rN   rZ   r   ra   Útyper$   Úreplacere   rr   Úsignr   ÚPKCS1v15r
   ÚSHA256rK   rL   rM   rV   r¬   )r   r�   r›   r‘   r˜   r„   r…   r†   r‡   rˆ   r7   r9   r?   r=   r´   r³   Úcontent_typeÚcontent_lengthÚx_content_sha256Úheaders_to_signÚsigned_header_namesÚsigning_stringÚoci_key_contentÚprivate_keyÚ	signatureÚsignature_b64Úkey_idr·   s                               r   Úsign_with_manual_credentialsrÉ   ö   sÊ  € ô +¨?Ó;€EØ˜JÑ'€HØ"Ð#4Ñ5€OØ˜}Ñ-€KØ˜9Ñ%€GØ Ñ/€Lá™?±+ÁgÑQ]ÜØðIô !�/ Ô$8Ð#9¸Ô<LÐ;MÈRÔP\È~Ð]bÔctÐbuð vPðPô	
ð 		
ô ˜×+Ñ+¨H°fÓ=Ó>×DÑDÓF€FÜ—*‘*˜\Ó*×1Ñ1°'Ó:€DÜ˜XÓ&€FØ—+‘+Ò$ €DØ—-‘-€Dä DÔ)€DØ!Ÿ+™+ nÐ6HÓI€LÜ¤ D£	›N€NÜ+¨DÓ1Ðð ØØ$Ø(Ø,ñ.€Oò"Ðô 3°6¸4ÀÐReÓf€NäÔð #'€OÙÜ˜'¤3Ô'ÜØð!Ü!% g£×!7Ñ!7Ð 8ð:ôð ð "Ÿ/™/¨%°Ó6×>Ñ>¸vÀtÓLˆñ ô 	" /Ô2ñ ô (¨Ô5àð ð ÐÜØØmô
ð 	
ð
 #×'Ñ'Ø×Ñ˜gÓ&Ü×ÑÓÜ�‰‹ó€Iô
 "×+Ñ+¨IÓ6×=Ñ=Ó?€Mà"�m 1 X J¨a°Ð/@ÐA€Fð	Ø�ð à—H‘HÐ0Ó1Ð2ð 3Ø#�_ Að		'ð ð ‡N�Nà*ØØØ(Ø,Ø 0ñ	
ô	ð �Dˆ=Ðr   Úapi_keyÚmodelÚstreamÚfake_streamc                 ó\   — |j                  d«      �t        | |||«      S t        | |||«      S )at  
    Route to the appropriate OCI signing method based on what credentials are present.

    If ``oci_signer`` is in optional_params, use the OCI SDK signer object.
    Otherwise use manual RSA-SHA256 signing with explicit credentials (which can
    also be supplied via OCI_* environment variables).

    Returns:
        Tuple of (signed_headers, signed_body_bytes)
    r�   )rŠ   r¯   rÉ   )r   r�   r›   r‘   rÊ   rË   rÌ   rÍ   s           r   Úsign_oci_requestrÏ   g  s8   € ð( ×Ñ˜<Ó(Ð4Ü# G¨_¸lÈHÓUÐUÜ'¨°À,ÐPXÓYÐYr   c                 ó\   — | j                  dd«       | j                  ddt        › �«       | S )a   
    Populate common OCI request headers (content-type, user-agent).

    Full credential validation is deferred to signing time so that credentials
    supplied via environment variables are resolved at call time rather than
    at construction time.
    r£   r¤   z
user-agentzlitellm/)r©   Ú_litellm_version)r   r�   rÊ   s      r   Úvalidate_oci_environmentrÒ   €  s3   € ð ×Ñ�~Ð'9Ô:Ø×Ñ�| xÔ0@Ð/AÐ%BÔCØ€Nr   r(   Úfloatr4   r'   ÚListÚDictÚany)ÚstringÚnumberÚbooleanÚintegerÚarrayÚobjectrÖ   ÚOCI_JSON_TO_PYTHON_TYPESÚschemac                 óÀ   ‡‡‡— | j                  di «      Št        «       Šdt        dt        fˆˆˆfd„Š ‰| «      }t        |t        «      r|j                  dd«       |S )uW   Inline all ``$ref``/``$defs`` references â€” OCI does not support JSON Schema ``$ref``.z$defsÚobjr   c                 óð  •— t        | t        «      r�d| v ro| d   }|j                  d«      rW|j                  d«      d   }|‰v rddiS ‰j	                  |«       	  ‰‰j                  || «      «      ‰j                  |«       S | S | j                  «       D ��ci c]  \  }}| ‰|«      “Œ c}}S t        | t        «      r| D �cg c]
  } ‰|«      ‘Œ c}S | S # ‰j                  |«       w xY wc c}}w c c}w )Nz$refz#/$defs/r�   éÿÿÿÿr¹   rÜ   )	ra   rB   Ú
startswithÚsplitÚaddrŠ   ÚdiscardÚitemsÚlist)	rà   Úrefrd   ÚkÚvÚitemÚ_resolveÚdefsÚresolving_stacks	         €€€r   rí   z)resolve_oci_schema_refs.<locals>._resolve­  så   ø€ Ü�cœ4Ô Ø˜‰}Ø  ™[�Ø—>‘> *Ô-Ø!$§¡¨3£°Ñ!3�CØ˜oÑ-Ø &¨Ð1Ð1Ø#×'Ñ'¨Ô,ð5Ù'¨¯©°°cÓ(:Ó;à'×/Ñ/°Õ4Ø�
Ø/2¯y©y«{×;¡t q¨!�A‘x “{‘NÓ;Ð;Ü�cœ4Ô Ø/2Ö3 t‘H˜T•NÒ3Ð3Øˆ
øð (×/Ñ/°Õ4üã;ùâ3s   ÁC ÂC-ÃC3ÃC*N)rŠ   Úsetr   ra   rB   Úpop)rÞ   Úresolvedrí   rî   rï   s     @@@r   Úresolve_oci_schema_refsró   ¨  sV   ú€ à—*‘*˜W bÓ)€DÜ"%£%€Oð”cð œc÷ ñ& ˜vÓ&€HÜ�(œDÔ!Ø�‰�W˜dÔ#Ø€Or   rà   c                 óÀ  — t        | t        «      r”d| v rcd| vr_| d   D �cg c])  }t        |t        «      r|j                  d«      dk(  rŒ(|‘Œ+ }}|r&i | ¥|d   ¥}|j                  dd«       t	        |«      S | j                  «       D ��ci c]  \  }}|t	        |«      “Œ c}}S t        | t        «      r| D �cg c]  }t	        |«      ‘Œ c}S | S c c}w c c}}w c c}w )u  Resolve Pydantic v2 ``Optional[T]`` â†’ ``anyOf`` patterns.

    Pydantic v2 emits ``{"anyOf": [{"type": "T"}, {"type": "null"}]}`` for
    ``Optional[T]``.  OCI models don't understand ``anyOf``, so we pick the
    first non-null branch and merge top-level metadata into it.
    ÚanyOfr¹   Únullr   N)ra   rB   rŠ   rñ   Úresolve_oci_schema_anyofrç   rè   )rà   ÚtÚnon_nullrò   rê   rë   rì   s          r   r÷   r÷   Æ  sÛ   € ô �#”tÔØ�c‰>˜f¨CÑ/Ø*-¨g©,Öp Q¼zÈ!ÌTÔ?RÐWX×W\ÑW\Ð]cÓWdÐhnÓWnšqÐpˆHÐpÙØ"8 SÐ"8¨H°Q©KÐ"8�Ø—‘˜W dÔ+Ü/°Ó9Ð9Ø;>¿9¹9»;×G±4°1°a�Ô+¨AÓ.Ñ.ÓGÐGÜ�#”tÔØ;>Ö?°4Ô(¨Õ.Ò?Ð?Ø€Jùò qùó
 Hùâ?s    )CÁ
CÂCÂ9Cc                 óÔ  — t        | t        «      r| D �cg c]  }t        |«      ‘Œ c}S t        | t        «      s| S i }| j	                  «       D ]c  \  }}|dk(  rŒ|dk(  r|€Œ|dk(  r=|dk(  rd||<   Œ$t        |t        «      r"|D �cg c]
  }|dk7  sŒ	|‘Œ }}|r|d   nd||<   ŒVt        |«      ||<   Œe |j                  d«      d	k(  rd
|vrddi|d
<   |j                  d«      }|j                  d«      }d|v r`t        |t        «      r;t        |t        «      r+|D �	cg c]  }	t        |	t        «      sŒ|	|v sŒ|	‘Œ c}	|d<   |S t        |t        «      sg |d<   |S c c}w c c}w c c}	w )zóRecursively remove OCI-incompatible fields from a JSON schema.

    Strips ``title`` keys, removes ``None``-valued ``default`` entries,
    normalises ``type: [T, "null"]`` list types, and ensures arrays carry an
    ``items`` definition.
    ÚtitleÚdefaultr¹   rÖ   rÜ   rö   r   r×   rÛ   rç   ÚrequiredÚ
properties)ra   rè   Úsanitize_oci_schemarB   rç   rŠ   r(   )
rÞ   rì   Ú	sanitizedrd   rY   rø   rù   rý   rþ   rp   s
             r   rÿ   rÿ   Ú  s…  € ô �&œ$ÔØ6<Ö=¨dÔ# DÕ)Ò=Ð=Ü�fœdÔ#Øˆà')€IØ—l‘l“nò 4‰
ˆˆUØ�'Š>ØØ�)Ò  ØØ�&Š=Ø˜Š~Ø!)�	˜#‘ØÜ˜%¤Ô&Ø',Ö< !°°V³šAÐ<�Ð<Ù08 ¨!¢¸h�	˜#‘ØÜ,¨UÓ3ˆ	�#Šð4ð ‡}�}�VÓ Ò'¨G¸9Ñ,DØ$ hÐ/ˆ	�'Ñà—m‘m JÓ/€HØ!Ÿ™ lÓ3€JØ�YÑÜ�h¤Ô%¬*°ZÄÔ*FØ08Ö$c¨1¼JÀqÌ#Õ<NÐSTÐXbÒSb¢QÒ$cˆI�jÑ!ð Ðô ˜H¤dÔ+Ø$&ˆI�jÑ!àÐùò? >ùò =ùò %ds#   •EÂ
E ÂE ÄE%Ä3E%Ä8E%ÚdescriptionÚparam_schemac                 ó¢  — | r| gng }d|v r|j                  d|d   › �«       d|v r|j                  d|d   › �«       d|v sd|v r[g }d|v r|j                  d|d   › �«       d|v r|j                  d|d   › �«       |j                  d	d
j                  |«      › �«       d|v r|j                  d|d   › �«       |rdj                  |«      S dS )aM  Embed schema constraints into a Cohere parameter description.

    ``CohereParameterDefinition`` only has ``type``, ``description``, and
    ``isRequired``.  Rich constraints (``enum``, ``format``, ``minimum``,
    ``maximum``, ``pattern``) are appended to the description string so the
    model can still see and respect them.
    ÚenumzAllowed values: ÚformatzFormat: ÚminimumÚmaximumzmin=zmax=zRange: r±   Úpatternz	Pattern: z. r<   )rU   rV   )r  r  ÚpartsÚrange_partss       r   Úenrich_cohere_param_descriptionr    s   € ñ %0�K‘=°R€EØ�ÑØ�‰Ð'¨°VÑ(<Ð'=Ð>Ô?Ø�<ÑØ�‰�x ¨XÑ 6Ð7Ð8Ô9Ø�LÑ  I°Ñ$=ØˆØ˜Ñ$Ø×Ñ  l°9Ñ&=Ð%>Ð?Ô@Ø˜Ñ$Ø×Ñ  l°9Ñ&=Ð%>Ð?Ô@Ø�‰�w˜tŸy™y¨Ó5Ð6Ð7Ô8Ø�LÑ Ø�‰�y ¨iÑ!8Ð 9Ð:Ô;Ù$ˆ4�9‰9�UÓÐ,¨"Ð,r   )r   Nr#   )NNNN)BrK   rH   r¦   r‹   ÚreÚdataclassesr   Úemail.utilsr   Útypingr   r   r   Úurllib.parser   r)   Ú)litellm.llms.base_llm.chat.transformationr	   Úcryptography.hazmat.primitivesr
   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   r   r   Úlitellm._versionr   rÑ   r   rA   r   r   r-   r6   rC   r(   rN   rB   rè   rZ   re   rr   rt   rv   rx   rz   r|   r~   r€   r�   ÚcompilerŽ   r�   rš   Útupler¯   rÉ   r4   rÏ   rÒ   rÝ   ró   r÷   rÿ   r  r   r   r   ú<module>r     s±  ðÜ Û Û Û 	Û 	Ý !Ý "ß 'Ñ 'Ý !ã å Fð$ßDßFà"ÐðÝ<ð $€�Ó #ó
ô
Ðô 
ô&	˜ô 	ð ÷Jð Jó ðJð(
-˜ð 
- #ó 
-ð 3ð ¨cð ¸Dð ÐRVð Ð[^ó ð sð ¨só ð.¨#ð .°#ó .ð( &€�Ó %Ø!€ˆuÓ !Ø/Ð �eÓ /Ø'Ð �%Ó 'Ø)Ð �5Ó )Ø€ˆeÓ Ø!5Ð ˜Ó 5ð¨Tð °dó ð( #˜Ÿ
™
Ð#DÓE€�Ó EØ'˜RŸZ™Z¨1¨_Ð,=Ð=PÐ(QÓRÐ �UÓ RñJ dð J°c¸D±jð JÈCó Jð4%Øð%àð%ð ð%ð ð	%ð
 ˆ4�ˆ;Ñó%ðPnØðnàðnð ðnð ð	nð
 ˆ4�ˆ;Ñónðl ØØØ#ñZØðZàðZð ðZð ð	Zð
 �4‰ZðZð �‰:ðZð �4‰KðZð ˜‘ðZð ˆ4�ˆ;ÑóZð8 ñØðàðð �4‰Zðð 
ó	ð< ØØØØØØñ3Ð ˜%  S¨# X¡Ñ/ó ð D¨¨c¨¡Nð °t¸CÀ¸H±~ó ð< #ð ¨#ó ð(' ð '¨ó 'ðT-°ð -ÀDÈÈcÈÁNð -ÐWZô -øða ò $Ø#Óð$ûð
 ò ØÓðús#   ½G ÁG ÇGÇGÇG*Ç)G*