
    2Rj?              
         d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	 d dl
mZmZ d dlZddlmZm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mZmZmZ eg df   ZdZ  ejB                  dejD                        Z#d"dZ$d#dZ%d$dZ&d%dZ'd&dZ(d'dZ) G d d      Z* G d d      Z+e G d de             Z, ed       G d d             Z-deeddddddd		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(d Z.g d!Z/y))    )annotationsN)LiteralCallable	Awaitablecast)field	dataclass   )	NOT_GIVENNotGiven)asyncify)FinalRequestOptions)	_Provider_create_provider_ProviderRuntime)OpenAIError)BedrockAwsAuthBedrockAwsAuthConfigAwsCredentialsProviderzstr | Awaitable[str])authorizationzx-amz-content-sha256z
x-amz-datezx-amz-security-tokenz(^bedrock-mantle\.([a-z0-9-]+)\.api\.aws$c                4    | y | j                         }|xs d S N)strip)value
normalizeds     `/var/www/html/meridian/meridian-ai/venv/lib/python3.12/site-packages/openai/providers/bedrock.py_normalize_optional_stringr      s     }J    c                    t        j                  |       }|j                  j                  d      }t	        j
                  d|      }||d |j                          }|j                  |xs d      S )N/z/responses(?:/.*)?$)path)httpxURLr!   rstripresearchstart	copy_with)base_urlurlr!   responses_matchs       r   _normalize_base_urlr,   $   sd    
))H
C88??3Dii 6=O"-o++-.==dkc=**r   c                    | j                   | j                  | j                  f|j                   |j                  |j                  fk(  S r   )schemehostport)leftrights     r   _same_originr3   .   s3    KKDII.5<<UZZ2XXXr   c                j    	 | j                   S # t        j                  $ r}t        d      |d }~ww xY w)Nz}Bedrock SigV4 authentication requires a replayable request body. Buffer the body before sending or use bearer authentication.)contentr"   RequestNotReadr   )requestexcs     r   _body_for_signingr9   2   s?     K
 	s    2-2c                6    d| j                   v rt        d      y )NAuthorizationzXBedrock provider authentication cannot be combined with a custom `Authorization` header.)headersr   )r7   s    r   #_assert_provider_owns_authorizationr=   <   s    '//)tuu *r   c                B    | j                   rt        d      d| _         | S )NzBedrock SigV4 authentication does not support automatic redirects. Send a new request to the redirect target so it can be signed again.F)follow_redirectsr   )optionss    r   _without_redirectsrA   A   s-    S
 	
  %GNr   c                  <    e Zd ZddZd	dZd
dZd
dZd	dZd	dZy)_BedrockBearerAuthc                    || _         || _        y r   )_token_provider	_base_url)selftoken_providerr)   s      r   __init__z_BedrockBearerAuth.__init__L   s    -!r   c                p    t        |       t        |j                  | j                        st	        d      y )Nz`Refusing to authenticate a Bedrock request for an origin other than the configured provider URL.)r=   r3   r*   rF   r   rG   r7   s     r   _validate_requestz$_BedrockBearerAuth._validate_requestP   s1    +G4GKK8r  9r   c                d   	 t        t        | j                               }t        j                  |      r*t        |dd       }t        |      r |        t        d      t        |t              r|j                         st        d      |S # t        $ r  t        $ r}t        d      |d }~ww xY w)N2Failed to resolve a bearer credential for Bedrock.closez7An async Bedrock token provider requires `AsyncOpenAI`.FThe Bedrock bearer credential provider must return a non-empty string.)r   objectrE   r   	Exceptioninspectisawaitablegetattrcallable
isinstancestrr   )rG   tokenr8   rO   s       r   _resolve_tokenz!_BedrockBearerAuth._resolve_tokenW   s    	]!5!5!78E u%E7D1EWXX%%U[[]fgg  	 	]RSY\\	]s   B B/B**B/c                0  K   	 t        t        | j                               }t        j                  |      r
| d {   }t        |t              r|j                         st        d      |S 7 1# t
        $ r  t        $ r}t        d      |d }~ww xY ww)NrN   rP   )
r   rQ   rE   rS   rT   r   rR   rW   rX   r   )rG   rY   r8   s      r   _resolve_token_asyncz'_BedrockBearerAuth._resolve_token_asynch   s     	]!5!5!78E""5)# %%U[[]fgg $ 	 	]RSY\\	]s8   B8A0 A.A0 -B.A0 0BBBBc                f    | j                  |       d| j                          |j                  d<   y NzBearer r;   )rL   rZ   r<   rK   s     r   prepare_requestz"_BedrockBearerAuth.prepare_requestv   s/    w'-4T5H5H5J4K+L(r   c                   K   | j                  |       d| j                          d {    |j                  d<   y 7 wr^   )rL   r\   r<   rK   s     r   prepare_async_requestz(_BedrockBearerAuth.prepare_async_requestz   s9     w'-44;T;T;V5V4W+X(5Vs   &?=?N)rH   BedrockTokenProviderr)   	httpx.URLreturnNoner7   httpx.Requestrd   re   rd   rX   )	__name__
__module____qualname__rI   rL   rZ   r\   r_   ra    r   r   rC   rC   K   s"    ""MYr   rC   c                  H    e Zd Zdd	 	 	 	 	 	 	 ddZd	dZd
dZddZddZy)_BedrockSigV4AuthN)authc               .    || _         || _        || _        y r   )_configrF   _auth)rG   configr)   ro   s       r   rI   z_BedrockSigV4Auth.__init__   s     !
r   c                   t        |       t        |j                  | j                        st	        d      t
        j                  |j                  j                        }|]|j                  d      | j                  j                  k7  r5t	        d|j                  d       d| j                  j                   d      t        |      S )NzXRefusing to sign a Bedrock request for an origin other than the configured provider URL.   zThe Bedrock endpoint region `z#` does not match the SigV4 region `z`.)r=   r3   r*   rF   r   _CANONICAL_BEDROCK_HOST	fullmatchr/   grouprq   regionr9   )rG   r7   endpoint_region_matchs      r   rL   z#_BedrockSigV4Auth._validate_request   s    +G4GKK8j  !8 A A'++BRBR S ,1F1L1LQ1OSWS_S_SfSf1f/0E0K0KA0N/O P!!%!4!4 5R9 
 !))r   c               F   t         D ]  }|j                  j                  |d          |j                  |j                  t        |j                        t        |j                        |      }|j                  j                          |j                  j                  |       y N)methodr*   r<   body)
_AWS_SIGNING_HEADERSr<   popsignr}   rX   r*   dictclearupdate)rG   r7   ro   r~   headersigned_headerss         r   _signz_BedrockSigV4Auth._sign   s    * 	.FOO-	. >>GKK )	 # 
 	~.r   c                    | j                  |      }| j                  t        | j                        | _        | j	                  || j                  |       y )N)ro   r~   )rL   rr   r   rq   r   )rG   r7   r~   s      r   r_   z!_BedrockSigV4Auth.prepare_request   sB    %%g.::'5DJ

7$
7r   c           
     >  K   | j                  |      }| j                  , t        t              | j                         d {   | _         t        | j                  j
                        |j                  t        |j                        |j                  j                         D ci c]  \  }}|j                         t        vs||! c}}|       d {   }|j                  j                          |j                  j                  |       y 7 c c}}w 7 Bwr|   )rL   rr   r   r   rq   r   r}   rX   r*   r<   itemslowerr   r   r   )rG   r7   r~   namer   r   s         r   ra   z'_BedrockSigV4Auth.prepare_async_request   s     %%g.::7x7EEDJ8x

8>>GKK /6/D/D/F +e$**,^rJre  
 
 	~. F

s7   A DDA$D'DDDD;DD)rs   r   r)   rc   ro   zBedrockAwsAuth | Nonerd   re   r7   rg   rd   bytes)r7   rg   ro   r   r~   r   rd   re   rf   )ri   rj   rk   rI   rL   r   r_   ra   rl   r   r   rn   rn      sH     '+	 %	 		
 $	 
	* /8/r   rn   c                      e Zd ZU dZded<   y)_BedrockProviderRuntimeN
str | Nonery   )ri   rj   rk   ry   __annotations__rl   r   r   r   r      s    FJr   r   T)frozenc                  6   e Zd ZU ded<   ded<   ded<    edd	      Zded
<    eddd      Zded<   dZded<   dZded<    edd	      Z	ded<    edd	      Z
ded<    edd	      Zded<    eddd      Zded<    edd      Zded<   ddZddZddZy) _BedrockProviderDefinitionr   configured_regionz)Literal['explicit', 'environment'] | Noneregion_sourcezhttpx.URL | Noneconfigured_base_urlNF)defaultreprapi_key)r   r   compareBedrockTokenProvider | NonerH   booluse_environment_bearerprofileaccess_key_idsecret_access_keysession_tokenAwsCredentialsProvider | Nonecredential_providerbedrock)r   initrX   r   c                R    | j                   y| j                  y| j                  yy)Nstaticr   providerr   )r   r   r   rG   s    r   _aws_sourcez&_BedrockProviderDefinition._aws_source   s0    )<<###/r   c           
        | j                   mt        | j                   | j                         | j                  xs d| j                  | j
                  | j                  | j                  | j                        d fS t        j                  d | j                  | j
                  | j                  | j                  | j                        }|j                  |fS )Nexplicit)ry   sourcer   r   r   r   r   credentials_provider)ry   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   resolvers   )rG   ro   s     r   _resolve_aws_authz,_BedrockProviderDefinition._resolve_aws_auth   s    !!-$11++-"&"4"4"B
 LL"&"4"4&*&<&<"&"4"4)-)A)A	   %%LL,,"44,,!%!9!9
 {{D  r   c                    d
d}d }d } j                    fd} j                  }n j                   j                  } j                  }ne j                  r|} j                  }nJ j	                         \  }}|j
                  } j                  xs t        d| d      }t        |||      } j                   j                  }n|t        d| d      }nt        d      |t        ||      }|J t        |t              r3t         j                  ||t        |j                  |j                         S t         j                  |||j                  |j                   	      S )Nc                 ^    t         j                  j                  d      } | st        d      | S )NAWS_BEARER_TOKEN_BEDROCKzCould not find credentials for Bedrock. Pass a bearer credential or AWS credentials to `bedrock(...)`, set `AWS_BEARER_TOKEN_BEDROCK`, or configure the default AWS credential chain.)osenvirongetr   )rY   s    r   environment_tokenz?_BedrockProviderDefinition.configure.<locals>.environment_token   s2    JJNN#=>E!u  Lr   c                 $     j                   xs dS )N )r   r   s   r   <lambda>z6_BedrockProviderDefinition.configure.<locals>.<lambda>  s    dll&8b r   zhttps://bedrock-mantle.z.api.aws/openai/v1)rs   r)   ro   zmBedrock requires an AWS region. Pass `region` to `bedrock(...)`, or set `AWS_REGION` or `AWS_DEFAULT_REGION`.)r)   )r   r)   ry   transform_requestr_   ra   )r   r)   ry   r_   ra   rh   )r   r   rH   r   r   ry   r   r,   rn   r   rC   rW   r   r   rA   r_   ra   )rG   r   ro   bearer_providerry   
aws_configaws_authr)   s   `       r   	configurez$_BedrockProviderDefinition.configure   s   	 ?C7;<<#8O++F  ,"11O++F((/O++F#'#9#9#; J&&F// 3F)&1CD4H %JPXYD##///H*-DVHL^+_`H( 
 &%oIDd-.*YY!"4 $ 4 4&*&@&@  ' 00"&"<"<
 	
r   )rd   z3Literal['static', 'profile', 'provider', 'default'])rd   z2tuple[BedrockAwsAuthConfig, BedrockAwsAuth | None])rd   r   )ri   rj   rk   r   r   r   rH   r   r   r   r   r   r   r   r   r   r   rl   r   r   r   r      s    !!<<))59GZ9275Z_2`N/`#(D(GZ %d ?M:?$)$U$CzC %d ?M:?9>tRWaf9g6gie4D#4!4;
r   r   )	ry   r)   r   rH   r   r   r   r   r   c        	        
   t        |       }	| |	t        d      d}
|	d}
nMt        t        j                  j	                  d      xs t        j                  j	                  d            }	|	d}
t        |t              r8t        t        j                  j	                  d            }|rt        |      nd}n;|d}n6t        |t              r|j                         st        d      t        |      }t        |      }||t        d	      |du |du k7  s||t        d
      |9|j                         rt        t        |      j                         st        d      ||j                         st        d      t        |t               xr |du}|r+t        |t              r|j                         st        d      |r|t        d      |xs |du}t        |du|du|duf      }|dkD  rt        d      |r|rt        d      t        |t               xr |du }| xr2 | xr- | xr( t        t        j                  j	                  d            }t        t        |	|
||rt        d|      nd|||||||            S )z?Configure the standard OpenAI client for Amazon Bedrock Mantle.Nz+The Bedrock AWS `region` must not be empty.r   
AWS_REGIONAWS_DEFAULT_REGIONenvironmentAWS_BEDROCK_BASE_URLz)The Bedrock `base_url` must not be empty.z,The Bedrock AWS `profile` must not be empty.zzStatic AWS credentials require both `access_key_id` and `secret_access_key`. A `session_token` may only be used with both.zXStatic AWS credentials require non-empty `access_key_id` and `secret_access_key` values.z=A static AWS `session_token` must not be empty when provided.z0The Bedrock bearer credential must not be empty.zVThe `api_key` and `token_provider` options are mutually exclusive. Configure only one.ru   zBedrock authentication is ambiguous. Configure exactly one explicit AWS mode: static credentials, profile, or credential provider.zBedrock authentication is ambiguous. Configure exactly one explicit mode: bearer credential, static AWS credentials, profile, or credential provider.r   r   )r   r   r   r   rH   r   r   r   r   r   r   )r   r   r   r   r   rW   r   r,   rX   r   r   sumr   r   r   )ry   r)   r   rH   r   r   r   r   r   normalized_regionr   environment_base_urlr   normalized_profileexplicit_api_keyexplicit_bearer	aws_modesskip_environment_bearerr   s                      r   r   r   4  s    36:/7GHH?CM$"6JJNN<(PBJJNN;O,P
 ()M (H%9"**..I_:`aK_12FGei		"h$X^^-=IJJ1(;3G<19HII#4#<=-B[`m`u<
 	
  -*=*=*?tCQbGcGiGiGktuu )<)<)>YZZ%gx88PWD=PGS!9LMMN6rss&D.*DO%d*t+	
I 1}/
 	
 9G
 	

 #-Wh"??SGtO 	=M	=''	=  :;<	  "/' 33CDw/)#9&'/' 3	
 r   )r   rb   r   )r   r   rd   r   )r)   zstr | httpx.URLrd   rc   )r1   rc   r2   rc   rd   r   r   rf   )r@   r   rd   r   )ry   r   r)   z!str | httpx.URL | None | NotGivenr   zstr | None | NotGivenrH   r   r   r   r   r   r   r   r   r   r   r   rd   r   )0
__future__r   r   r%   rS   typingr   r   r   r   dataclassesr   r	   r"   _typesr   r   _utilsr   _modelsr   	_providerr   r   r   _exceptionsr   lib._bedrock_authr   r   r   rb   r   compile
IGNORECASErv   r   r,   r3   r9   r=   rA   rC   rn   r   r   r   __all__rl   r   r   <module>r      s{   " 	 	  5 5 (  (  ) E E %   $: :; f $"**%PRTR_R_` +Yv
1Y 1Yh=/ =/@ .   $l
 l
 l
b 2;%.26 $$( $9=dd 0d #	d
 0d d "d d d 7d dN Hr   