Ë
    uPêjZ  ã                   ó¶   — U d dl mZ d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ  eh d£«      Zee   ed	<   d
Zee   ed<    G d„ d«      Z G d„ d«      Zy)é    )ÚMapping)ÚFinal)Úparse_qsN)Úverbose_logger)ÚPASS_THROUGH_HEADER_PREFIX)Úcontains_aws_arn>   úapi-keyú	x-api-keyúx-goog-api-keyÚhostÚauthorizationúcontent-lengthúaccept-encodingÚ_PASS_THROUGH_PROTECTED_HEADERS)zx-amz-Ú'_PASS_THROUGH_PROTECTED_HEADER_PREFIXESc                   óª   — e Zd Ze	 ddej
                  deeeez  f   de	eeez  f   dz  de	eeee   z  f   fd„«       Z
e	 dde	de	d	edz  fd
„«       Zy)ÚBasePassthroughUtilsNÚexisting_urlÚrequest_query_paramsÚdefault_query_paramsÚreturnc                 ó8  — | j                   j                  d«      }t        |«      }|j                  «       D ��ci c]  \  }}|t	        |«      dk(  r|d   n|“Œ }}}i }|r|j                  |«       |j                  |«       |j                  |«       |S c c}}w )Nzutf-8é   r   )ÚqueryÚdecoder   ÚitemsÚlenÚupdate)	r   r   r   Úexisting_query_stringÚexisting_query_paramsÚkÚvÚupdated_existing_query_paramsÚmerged_paramss	            ú^/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/passthrough/utils.pyÚget_merged_query_parametersz0BasePassthroughUtils.get_merged_query_parameters   s«   € ð (4×'9Ñ'9×'@Ñ'@ÀÓ'IÐÜ'/Ð0EÓ'FÐð [p×ZuÑZuÓZw×/xÑRVÐRSÐUV°¼3¸q»6ÀQº;°1°Q²4ÈAÑ0MÐ/xÐ%Ñ/xð  "ˆÙØ× Ñ Ð!5Ô6ð 	×ÑÐ:Ô;ð 	×ÑÐ1Ô2àÐùó 0ys   º BÚrequest_headersÚheadersÚforward_headersc                 ó‚  ‡— |du rœ| j                  dd«       | j                  dd«       | j                  dd«       |D �ch c]  }|j                  «       ’Œ }}t        | j                  «       «      D ]'  }|j                  «       |v sŒ| j                  |d«       Œ) i | ¥|¥}| j	                  «       D ]…  \  }}|j                  «       j                  t        «      sŒ*|t        t        «      d j                  «       Š‰t        v st        ˆfd„t        D «       «      rt        j                  d|«       Œ�||‰<   Œ‡ |S c c}w )a$  
        Helper to forward headers from original request.

        Also handles 'x-pass-' prefixed headers which are always forwarded
        with the prefix stripped, regardless of forward_headers setting.
        e.g., 'x-pass-anthropic-beta: value' becomes 'anthropic-beta: value'
        Tr   Nr   r   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w©N)Ú
startswith)Ú.0ÚpÚactual_header_names     €r%   ú	<genexpr>zDBasePassthroughUtils.forward_headers_from_request.<locals>.<genexpr>\   s$   øè ø€ ò PØ9:Ð&×1Ñ1°!×4ñPùs   ƒz;x-pass- header %s maps to a protected header name; skipping)ÚpopÚlowerÚlistÚkeysr   r-   r   r   r   Úanyr   r   Údebug)r'   r(   r)   Úheader_nameÚcustom_header_namesÚheader_valuer0   s         @r%   Úforward_headers_from_requestz1BasePassthroughUtils.forward_headers_from_request9   sU  ø€ ð ˜dÑ"à×ÑÐ 0°$Ô7Ø×Ñ ¨Ô-ð ×ÑÐ 1°4Ô8àQXÖ)YÀ+¨+×*;Ñ*;Õ*=Ð)YÐÐ)YÜ# O×$8Ñ$8Ó$:Ó;ò ;�Ø×$Ñ$Ó&Ð*=Ò=Ø#×'Ñ'¨°TÕ:ð;ð
 5˜Ð4¨GÐ4ˆGð *9×)>Ñ)>Ó)@ò 	;Ñ%ˆK˜Ø× Ñ Ó"×-Ñ-Ô.HÕIà%0´Ô5OÓ1PÐ1RÐ%S×%YÑ%YÓ%[Ð"Ø%Ô)HÑHÌCó PÜ>eôPô Mô #×(Ñ(ØUØ#ôð Ø.:�Ð*Ò+ð	;ð ˆùò1 *Zs   Á D<r,   )F)Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodÚhttpxÚURLr   Ústrr4   Údictr&   Úboolr;   © ó    r%   r   r      sª   „ Øð >BñØ—i‘iðà% c¨3°©: oÑ6ðð # 3¨¨d©
 ?Ñ3°dÑ:ðð 
ˆc�3˜˜c™‘?Ð"Ñ	#ò	ó ðð2 ð (-ñ,Øð,àð,ð  ™ò,ó ñ,rF   r   c                   ó&   — e Zd Zededefd„«       Zy)ÚCommonUtilsÚendpointr   c                 ó”   — ddl }t        | «      s| S g d¢}|D ]-  \  }}|j                  || «      sŒ|j                  ||| «      }  | S  | S )aV  
        Encodes any "/" found in the modelId of an AWS Bedrock Runtime Endpoint when arns are passed in.
        - modelID value can be an ARN which contains slashes that SHOULD NOT be treated as path separators.
        e.g endpoint: /model/<modelId>/invoke
        <modelId> containing arns with slashes need to be encoded from
            arn:aws:bedrock:ap-southeast-1:123456789012:application-inference-profile/abdefg12334 =>
            arn:aws:bedrock:ap-southeast-1:123456789012:application-inference-profile%2Fabdefg12334
        so that it is treated as one part of the path.
        Otherwise, the encoded endpoint will return 500 error when passed to Bedrock endpoint.

        See the apis in https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Operations_Amazon_Bedrock_Runtime.html
        for more details on the regex patterns of modelId which we use in the regex logic below.

        Args:
            endpoint (str): The original endpoint string which may contain ARNs that contain slashes.

        Returns:
            str: The endpoint with properly encoded ARN slashes
        r   N)
)z((custom-model)/([a-z0-9.-]+)/([a-z0-9]+)z\1%2F\2%2F\3)z!(:application-inference-profile)/ú\1%2F)z(:inference-profile)/rK   )z(:foundation-model)/rK   )z(:imported-model)/rK   )z(:provisioned-model)/rK   )z
(:prompt)/rK   )z(:endpoint)/rK   )z(:prompt-router)/rK   )z(:default-prompt-router)/rK   )Úrer   ÚsearchÚsub)rI   rL   ÚpatternsÚpatternÚreplacements        r%   Ú"encode_bedrock_runtime_modelid_arnz.CommonUtils.encode_bedrock_runtime_modelid_arnj   sb   € ó* 	ô   Ô)ØˆOò
ˆð %-ò 	Ñ ˆG�[à�y‰y˜ (Õ+ØŸ6™6 '¨;¸ÓA�Øàˆð	ð ˆrF   N)r<   r=   r>   r?   rB   rR   rE   rF   r%   rH   rH   i   s"   „ Øð0°Sð 0¸Sò 0ó ñ0rF   rH   )Úcollections.abcr   Útypingr   Úurllib.parser   r@   Úlitellm._loggingr   Úlitellm.constantsr   Ú(litellm.litellm_core_utils.aws_partitionr   Ú	frozensetr   Ú__annotations__r   Útupler   rH   rE   rF   r%   ú<module>r\      sa   ðÞ #Ý Ý !ã å +Ý 8Ý Eñ
 5>òó
5Ð   yÑ!1ó 
ð 9DÐ '¨¨u©Ó C÷Hñ H÷V2ò 2rF   