
    ^h                        % S r SSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
JrJrJrJrJrJrJrJr  SSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJrJrJ r J!r!J"r"J#r#  SS
K$J%r%J&r&J'r'J(r(  SSK)7  SSK*J+r+J,r,  SSK-J.r/  SSK-J0r0J1r1  SSK2J3r3J4r4  SSK5J6r6  SSK7J8r8J9r9J:r:  Sq;\" SSS9r<\\=S'    " S S5      r>  S)S\\%   S\?S\@S\?S\?S\AS\BS \\B   4S! jjrC " S" S#\65      rDS$ rE " S% S&5      rF " S' S(5      rGg)*z<
Manages calling Bedrock's `/converse` API + `/invoke` API 
    N)partial)AnyAsyncIteratorCallableIteratorListOptionalTupleUnion)verbose_logger)InMemoryCache)map_finish_reason)Logging)cohere_message_pt construct_tool_use_system_promptcontains_tagcustom_promptextract_between_tagsparse_xml_paramsprompt_factory)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)*)ChatCompletionToolCallChunkChatCompletionUsageBlock)GenericStreamingChunk)ModelResponseUsage)CustomStreamWrapper
get_secret   )
BaseAWSLLM)BedrockErrorModelResponseIteratorget_bedrock_tool_name2   iX  )max_size_in_memorydefault_ttlbedrock_tool_name_mappingsc                   8   \ rS rSr% SrSr\\\      \	S'   Sr
\\   \	S'   Sr\\   \	S'   Sr\\   \	S'   Sr\\   \	S'   Sr\\   \	S	'   Sr\\   \	S
'   Sr\\   \	S'   Sr\\   \	S'   Sr\\   \	S'   Sr\\   \	S'   Sr\\   \	S'   Sr\\\      \	S'   Sr\\   \	S'                 SS\\\      S\\   S\\   S\\   S\\   S	\\   S
\\   S\\   S\\   S\\   S\\   S\\   S\\   S\\   SS4S jjr\S 5       rS\\   4S jrS\S\S\4S jr Sr!g)AmazonCohereChatConfig6   zn
Reference - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-command-r-plus.html
N	documentssearch_queries_onlypreamble
max_tokenstemperaturepkprompt_truncationfrequency_penaltypresence_penaltyseedreturn_promptstop_sequencesraw_promptingreturnc                     [        5       nUR                  5        H*  u  nnUS:w  d  M  Uc  M  [        U R                  UU5        M,     g )Nself)localsitemssetattr	__class__)r?   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   locals_keyvalues                     b/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/bedrock/chat/invoke_handler.py__init__AmazonCohereChatConfig.__init__J   s;    " (!--/JCf}!2U3 *    c                    U R                   R                  5        VVs0 s H_  u  pUR                  S5      (       a  M  [        U[        R
                  [        R                  [        [        45      (       a  MX  Uc  M]  X_Ma     snn$ s  snnf )N__)	__dict__rA   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clsr5   vs      rG   
get_config!AmazonCohereChatConfig.get_config`   s     **,
,<<%  &&-- 	   AD,
 	
 
s   B7B9B>Bc                 
    / SQ$ )N)r2   max_completion_tokensstreamstopr3   top_pr7   r8   r9   r\   toolstool_choice r?   s    rG   get_supported_openai_params2AmazonCohereChatConfig.get_supported_openai_paramsr   s    
 	
rJ   non_default_paramsoptional_paramsc                 
   UR                  5        Hn  u  p4US:X  d  US:X  a  XBS'   US:X  a  XBS'   US:X  a  [        U[        5      (       a  U/nXBS'   US:X  a  XBS'   US:X  a  XBS'   US	:X  a  XBS	'   US
:X  a  XBS
'    XBS'   Mp     U$ )Nr2   rZ   r[   r\   r;   r3   r]   r4   r7   r8   r9   )rA   rO   str)r?   rd   re   paramrF   s        rG   map_openai_params(AmazonCohereChatConfig.map_openai_params   s     /446LE$1H(H05- ,1)eS))"GE49 01%16.',$++7< 34**6; 23*/'% 7& rJ   r`   )NNNNNNNNNNNNNN)"__name__
__module____qualname____firstlineno____doc__r/   r	   r   Document__annotations__r0   boolr1   rg   r2   intr3   floatr4   r5   r6   r7   r8   r9   r:   r;   r<   rH   rS   rW   rb   dictri   __static_attributes__r`   rJ   rG   r-   r-   6   s    +/IxX'.*.$."Hhsm" $J$#'K%'AxAx'+x}+)-x-(,huo,D(3-$(M8D>(*.NHT#Y'.$(M8D>( /3.2"&$('+!!+/-1,0"(,(,(,4DN+4 &d^4 3-	4
 SM4 e_4 E?4 E?4 $C=4 $E?4 #5/4 sm4  ~4 !4  ~4  
!4, 
 
"
T#Y 
 "&9=	rJ   r-   clientapi_baseheadersdatamodelmessagesfake_stream	json_modec	                 \  #     U c!  [        [        R                  R                  S9n U R	                  UUUU(       + S9I S h  vN n	U	R
                  S:w  a  [        U	R
                  U	R                  S9eU(       ae  [        R                  " 5       R                  UU	[        R                  " 5       SU0 SUU[        R                  [        R                  S9n
[        XS9nO'[        US	9nUR                  U	R                  S
S95      nUR!                  USSSU0S9  U$  N! ["        R$                   a8  nUR&                  R
                  n[        XR&                  R                  S9eS nAf["        R(                   a    [        SSS9e[*         a  n[        S[-        U5      S9eS nAff = f7f)N)llm_provider)ry   rz   r[      status_codemessageT r{   responsemodel_responser[   logging_objre   api_keyrz   r|   print_verboseencoding)r   r~   r{      
chunk_sizezfirst stream response receivedcomplete_input_dictinputr   original_responseadditional_args  Timeout error occurred.i  )r   litellmLlmProvidersBEDROCKpostr   r%   textAmazonConverseConfig_transform_responser   r   r   MockResponseIteratorAWSEventStreamDecoderaiter_bytes	post_callhttpxHTTPStatusErrorr   TimeoutException	Exceptionrg   )rw   rx   ry   rz   r{   r|   r   r}   r~   r   r   completion_streamdecodererr
error_codees                   rG   	make_callr      s    8<>+$1199F  "?	 % 
 
 3&8+?+?WW ,,.BB!&446' "!%33 )) C   &:-& ,%8G ' 3 3$$$5!
 	>2D9	 	 	
 ! W
X    N\\--
z<<;L;LMM!! Os4MNN <sCF;;<sG   F,>D  DCD  F,D   F)43E''*F)F$$F))F,c                   $  ^  \ rS rSrSrSU 4S jjrS\\\\	   4   4S jr
S\S\R                  S	\S
\S\S\S\S\\\4   S\S\\\4   4S jrS\S\4S jr    SS\S\	S\\   S\S	\S\S\S\S\\\\R0                  4      S\\   S\\\\4      S\\\4   4S jjrSS0 S4S\S\	S\S	\S\S\S\\\\R0                  4      S\S\\   S\\\4   4S jjrSS0 S4S\S\	S\S	\S\S\S\\\\R0                  4      S\S\\   S\4S jjrSrU =r$ ) 
BedrockLLM   a  
Example call

```
curl --location --request POST 'https://bedrock-runtime.{aws_region_name}.amazonaws.com/model/{bedrock_model_name}/invoke'         --header 'Content-Type: application/json'         --header 'Accept: application/json'         --user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY"         --aws-sigv4 "aws:amz:us-east-1:bedrock"         --data-raw '{
    "prompt": "Hi",
    "temperature": 0,
    "p": 0.9,
    "max_tokens": 4096
    }'
```
r=   Nc                 "   > [         TU ]  5         g N)superrH   )r?   rC   s    rG   rH   BedrockLLM.__init__   s    rJ   c                    SnS nX;   a7  XA   n[        US   UR                  SS5      UR                  SS5      US9nUS 4$ US:X  d  US:X  a  [        XSS	9nXV4$ US
:X  a  [        XSS	9nXV4$ US:X  a  [        XSS	9nXV4$ US:X  a  [        US9u  pVXV4$ SnU H.  nSU;   a  US   S:X  a
  XXS    -  nM  XXS    -  nM&  XXS    -  nM0     XV4$ )Nr   rolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   r|   	anthropicamazonbedrockr{   r|   custom_llm_providermistralmetacoherer|   roleusercontent)r   getr   r   )	r?   r{   r|   providercustom_prompt_dictpromptchat_historymodel_prompt_detailsr   s	            rG   convert_messages_to_prompt%BedrockLLM.convert_messages_to_prompt   sX    '+&#5#< ".w7%9%=%=*B& $8#;#;<PRT#U!F 4<{"h(&:#IF. ##) "#IF& ##! #IF ## !#4h#G F ## F#W$v&0Y%7$89Y%7$89!3 45F $ ##rJ   r{   r   r   r[   r   re   r   rz   r|   c           	          UR                  S5      S   nUR                  U	UUR                  SU0S9  U
" SUR                   35         UR                  5       nS n US:X  aF  S	U;   a  US	   nGOS
U;   a1  US
   S   S	   n[        US
   S   S   5      UR                  S   l        GOUS:X  Ga  UR                  S5      (       Ga  0 nSnSU;   a,  SnUS    H!  nUS   R                  SS 5      UUS   S   '   M#     UR                  S5      S   R                  S	S 5      nUb  [        SU5      (       a  [        SU5      S   n[        SU5      S   R                  5       nSU S3n[        UUR                  US 5      S9n[        R                   " S["        R$                  " 5        3SU[        R&                  " U5      S.S./S S9nUUR                  S   l        UUR*                  S'   USL Ga-  UGb)  USL Ga#  U
" S5        [-        SS 9n[/        UR                  S   SS!5      UR                  S   l        [        R0                  R3                  5       nUR                  S   R4                  Ul        / nU
" S"[7        UR                  S   5       35        U
" S#[7        U5       35        [9        UR                  S   [        R:                  5      (       GaF  [/        UR                  S   R(                  S$S 5       b  [9        UR                  S   R(                  R<                  [>        5      (       aQ  UR                  S   R(                  R<                   H*  n0 URA                  5       ES%S0EnURC                  U5        M,     [        R0                  RE                  [/        UR                  S   R(                  SS 5      UR                  S   R(                  RF                  US&9nUUl$        U/Ul        [K        US'9nU
" S(5        [        RL                  " UUS)US*9$ [        UR                  S+S,5      5      UR                  S   l        [        RN                  " US-   S.   US-   S/   US-   S.   US-   S/   -   S09n[Q        US-U5        OUS1   nUS+   UR                  S   l        OUS2:X  a3  UR                  S35      S   R                  S45      R                  S	5      nO_US5:X  a  US6   nOSUS7:X  a)  US8   S   S	   nUS8   S   S+   UR                  S   l        O$UR                  S95      S   R                  S:5      n  Ubq  [W        U5      S:  ab  [Y        UR                  S   S<5      (       aD  [/        UR                  S   R(                  S$S 5       c  XR                  S   R(                  l-        OO[Y        UR                  S   S<5      (       a'  [/        UR                  S   R(                  S$S 5       b  O
[	        5       eU(       a  US2:X  a  [-        SS 9nUR                  S   R                  UR                  S   l        [        R0                  R3                  5       nUR                  S   R4                  Ul        [        R0                  RE                  [/        UR                  S   R(                  SS 5      UR                  S   R(                  RF                  S>9nUUl$        U/Ul        [K        US'9n[M        UUS)US*9$ UR^                  R                  S?S 5      n UR^                  R                  S@S 5      n![a        U =(       d    [        Rb                  " U	SA95      n"[a        U!=(       d6    [        Rb                  " UR                  S   R(                  RZ                  SSB95      n#[a        [d        Rd                  " 5       5      Ul3        Xl4        [O        U"U#U"U#-   S09n$[Q        US-U$5        U$ ! [         a    [        UR                  SS9ef = f! [         a2  n[        S;RS                  UR                  [U        U5      5      SS9eS nAff = f! [         a2  n[        S=RS                  U[U        U5      5      UR\                  S9eS nAff = f)CN.r   r   r   zraw model_response: i  )r   r   r   r   generationsfinish_reasonr   anthropic.claude-3Fr^   Tfunction
parametersnamer   invoke	tool_namez<invoke>z	</invoke>)json_schemacall_r   	arguments)idtyper   )
tool_callsr   r   z5INSIDE BEDROCK STREAMING TOOL CALLING CONDITION BLOCK)r[   r\   z#type of model_response.choices[0]: ztype of streaming_choice: r   index)r   r   r   )r   zMReturns anthropic CustomStreamWrapper with 'cached_response' streaming objectcached_responser   r{   r   r   stop_reasonr   usageinput_tokensoutput_tokensprompt_tokenscompletion_tokenstotal_tokens
completionai21completionsrz   r   
generationr   outputsresults
outputTextz&Error processing={}, Received error={}r   z(Error parsing received text={}.
Error-{})r   r   z x-amzn-bedrock-input-token-countz!x-amzn-bedrock-output-token-countr   )r   count_response_tokens)5splitr   r   jsonr   r%   r   choicesr   rN   r   r   r   stripr   r   Messageuuiduuid4dumpsr   _hidden_paramsr   getattrutilsStreamingChoicesr   r   rO   Choicesr   listru   appendDeltar   deltar&   r!   r    rB   formatrg   lenhasattrr   r   ry   rs   token_countertimecreatedr{   )%r?   r{   r   r   r[   r   re   r   rz   r|   r   r   r   completion_responser   json_schemas_is_function_calltoolfunction_namefunction_arguments_strfunction_arguments_messagestreaming_model_responsestreaming_choice_tool_calls	tool_call
_tool_call	delta_objr   _usager   mribedrock_input_tokensbedrock_output_tokensr   r   r   s%                                        rG   process_responseBedrockLLM.process_response%  s9	    ;;s#A&&mm2D9	 	 	
 	,X]]O<=	G"*--/ %)
Q	8#00!4V!<J"&99!4]!CA!Fv!NJ>O+M:1=oN?N**1-; [(##$899)+L(-%/1,0)$3G$<DEI *F!c,5 )j)9&)AB %= "5!8!8!CA!F!J!J6SW!XJ!-, *3 3 )=[*(UVW(X1E$j22"UW / ''=&>iH / .>2(4(8(8 -t).* $+?? -2$**,*@,60=59ZZ@R5S1&!"	( %)$ =E..q19& '556IJ *T1"."dN%S 4A3M0LS*2215M088;I ,3==+I+I+K(1?1G1G1J1P1P(.&(%A$~G]G]^_G`BaAbc &8>N9O8PQ &n&<&<Q&?QQ& . 6 6q 9 A A<QU %) *.8 . 6 6q 9 A A L Ld/ / 2@1G1G$%2"")'**25I 2RINN4D1Qgq1QJ$/$6$6z$B	25
 )0(;(;(/$2$:$:1$=$E$EyRV)" &4%;%;A%>%F%F%K%K+6 )< )I 6?,2@P?Q4<0E/G1- * o $+#>#>2C&+4E,7	$  ?P+//rB?N**1-; %]]&9'&B>&R*=g*F*W%8%A.%Q-g6G&HF NGV<!4\!BJ>Q%?N**1-; V#'++M:1=AA&IMMfU  V#0>
Y&0;A>vF
:M;;";$&&q)7 144Y?BFF|T
	&
Oa'N2215yAAN2215==|TR =G&&q)119..q19==N2215==|TR k! h&('4D'A$@N@V@VAm %,,Q/=  '}}==?%3%;%;A%>%D%D"++ 6 6q 9 A A9dS#++A.66;; , I &/"0@/A$,'7OPC&"%$5'	   (//33. 
 !) 0 0 4 4/!
  LG$9$98$L
  ! $$#++A.66>>&*
 "%TYY[!1$'/&)::

 	/G  	Gx}}#FF	G^  	@GGMM3q6  	 	2  	CJJA %00	 	s|   	_0 ` /7` (M4` A+` 	` &8` ` +.` #` ?A3a 3Aa 8
a 0`
a-a		a
b-bbmodel_idc                 >    [         R                  R                  USS9$ )z
Double encode the model ID to ensure it matches the expected double-encoded format.
Args:
    model_id (str): The model ID to encode.
Returns:
    str: The double-encoded model ID.
r   )safe)urllibparsequote)r?   r  s     rG   encode_model_idBedrockLLM.encode_model_id%  s     ||!!(!44rJ   rx   r   r   acompletiontimeoutextra_headersrw   c                     SSK Jn  SSKJn  SSKJn  U	R                  SS 5      nU	R                  SS 5      nUb  U R                  US9nOUnUR                  S	5      S   nU	R                  S
S 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nU	R                  SS 5      nUcQ  [        SS 5      n U b  [        U [        5      (       a  U n[        SS 5      n!U!b  [        U![        5      (       a  U!nUc  SnU R                  UUUUUUUUUS9	n"U R                  UUUS9u  n#n$Ub  USL a  US:w  a  U# SU S3n#U$ SU S3n$OU# SU S3n#U$ SU S3n$U" U"SU5      n%U R                  XUU5      u  n&n'[         R"                  " U	5      n(0 n)US:X  a  UR%                  S 5      (       ap  [&        R(                  " 5       R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     S!U&0U(En-U'b  U'U-S"'   [.        R0                  " U-5      n.GO[&        R2                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     USL a  SU(S'   [.        R0                  " S#U&0U(E5      n.GOUS$:X  Ga  UR%                  S%5      (       Gaf  / n// n0[5        U5       H6  u  n1n2U2S&   S':X  d  M  U0R7                  U2S(   5        U/R7                  U15        M8     [9        U/5      S:  a<  S)R;                  U05      U(S''   [5        U5       V3V4s/ s H  u  n3n4U3U/;  d  M  U4PM     nn3n4[=        XS*S+9n[&        R>                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     S,U(;   aa  Sn5U(S,    H!  n6U6S-   RA                  S.S 5      U)U6S-   S/   '   M#     [C        U(S,   S09n7U(RA                  S'S)5      U7-   U(S''   U(R                  S,5        [.        R0                  " S1U0U(E5      n.GO&[&        RD                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     [.        R0                  " S#U&0U(E5      n.GOUS:X  aa  [&        RF                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     [.        R0                  " S#U&0U(E5      n.GO^US2:X  a`  [&        RH                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     [.        R0                  " S#U&0U(E5      n.OUS3:X  a_  [&        RJ                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     [.        R0                  " U&U(S4.5      n.OUS5:X  a`  [&        RL                  R+                  5       n*U*R-                  5        H  u  n+n,U+U(;  d  M  U,U(U+'   M     [.        R0                  " S#U&0U(E5      n.O-URO                  US6S7U(0S89  [Q        S9S:RS                  UU5      S;9eS<S=0n8Ub  S<S=0UEn8U" S>U#U.U8S?9n9U%RU                  U95        Ub  S@U;   a  US@   U9RV                  S@'   U9RY                  5       n:URO                  US6U.U$U:RV                  SA.S89  U
(       ap  [        U[Z        5      (       a  S nUSL a-  US:w  a'  U R]                  UUU.U$UUUUU	SUUU:RV                  UUSB9$ U R_                  UUU.U$UUUUU	UUUU:RV                  UUSB9$ Ub  [        U[`        5      (       a[  0 n;UbE  [        U[b        5      (       d  [        U[d        5      (       a  [f        Rh                  " U5      nUU;SC'   [k        U;5      U l6        OXl6        Ub  USL a  US:w  a  U Rl                  Ro                  U$U:RV                  U.USD9n<U<Rp                  SE:w  a"  [Q        U<Rp                  U<Rs                  5       S;9e[u        USF9n=U=Rw                  U<Rw                  SGSH95      n>[y        U>USUSI9n?UR{                  US6U?S7U.0SJ9  U?$  U Rl                  Ro                  U$U:RV                  U.SK9n<U<R}                  5         U R                  UU<UUUU	S6U.UUUSN9$ ! [         a    [        S5      ef = fs  sn4n3f ! [f        R~                   a9  n@U@R                  Rp                  nA[Q        UAU@R                  R                  S;9eS n@A@f[f        R                   a    [Q        SLSMS;9ef = f)ONr   )	SigV4Auth)
AWSRequest)Credentialsz7Missing boto3 to call bedrock. Run 'pip install boto3'.r[   r  )r  r   aws_secret_access_keyaws_access_key_idaws_session_tokenaws_region_nameaws_role_nameaws_session_nameaws_profile_nameaws_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointAWS_REGION_NAME
AWS_REGIONz	us-west-2)	r,  r+  r-  r.  r0  r1  r/  r3  r4  )rx   r2  r.  Tr   z/model/z/invoke-with-response-streamz/invoker   r   zcohere.command-rr   r   r   r   r   r   systemr   
anthropic_xmlr   r^   r   r   r   )r^   r|   r   r   )	inputTexttextGenerationConfigr   r   r   )r   r   r   i  z,Bedrock HTTPX: Unknown provider={}, model={}r   zContent-Typezapplication/jsonPOST)methodurlrz   ry   Authorization)r   rx   ry   )r{   r|   rz   rx   r   r   r   r   re   r[   litellm_params	logger_fnry   r%  rw   r%  )r>  ry   rz   r[   r   r   r   r   r   r   )r>  ry   rz   r   r   r   )Dbotocore.authr(  botocore.awsrequestr)  botocore.credentialsr*  ImportErrorpopr"  r   r"   rO   rg   get_credentialsget_runtime_endpointr   copydeepcopyrN   r   r-   rW   rA   r   r   AmazonCohereConfig	enumerater   r  joinr   AmazonAnthropicClaude3Configr   r   AmazonAnthropicConfigAmazonAI21ConfigAmazonMistralConfigAmazonTitanConfigAmazonLlamaConfigpre_callr%   r  add_authry   preparer   async_streamingasync_completionr   rt   rs   r   Timeoutr   rw   r   r   readr   
iter_bytesr!   r   raise_for_statusr   r   r   r   r  )Br?   r{   r|   rx   r   r   r   r   r   re   r$  r%  r@  rA  r&  rw   r(  r)  r*  r[   modelIdr   r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  litellm_aws_region_namestandard_aws_region_namecredentialsendpoint_urlproxy_endpoint_urlsigv4r   r   inference_paramsr	  configr5   rV   _datarz   system_prompt_idxsystem_messagesidxr   jir
  r  tool_calling_system_promptry   requestprepped_paramsr   r   r   streaming_responser   r   sB                                                                     rG   r   BedrockLLM.completion/  s
   $	Y/68
 !$$Xt4!%%j$7**G*<GG;;s#A& !0 3 34KT R+//0CTJ+//0CTJ)--.?F'++OTB*../A4H*../A4H'6':':*D(
$ "1!4!45Mt!T*../A4H "&01BD&I#&2z'8 8 #:'1,'E$'3
(#9 9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 ,0+D+D)E+ ,E ,
(( 6T>x67I*^77);WXL%&ggY6RS  +^77)7CL$6#7wwiw!O+y/B#>>X'9 
  ==9x 233 779DDF"LLNDAq!11./(+	 +
 #F?.>?+,8E.)zz%( !33>>@"LLNDAq!11./(+	 +
 T> %X. zz8V"H7G"HI$ 455/1!-/$-h$7LCv(2'..wy/AB)005 %8 ()A-15?1K$X.&/&9 &9daQFW=W&9    * !==HHJ"LLNDAq!11./(+	 + ..(,% 0 9AEjAQAUAU($BT*%5f%=> !: 2R.w72. ),,Xt<45 %X. %((1zz:x"L;K"LM !66AAC"LLNDAq!11./(+	 +
 zz8V"H7G"HI--88:F1--*+$Q'	 ' ::xD3CDED"00;;=F1--*+$Q'	 ' ::xD3CDED!..99;F1--*+$Q'	 ' ::!',<D ..99;F1--*+$Q'	 '
 ::xD3CDED   )+;! !  FMMe  "#56$%'9K]KG|$
 	w%/]*J/<_/MGOOO,//# 	'+."?? 	 	
 &+..~(f"4++%/#1"/% +$3#1'#OO#! ,  $ ((!+-+!' /-# )  $ >Z0@AAG"gu--GS1I1I#mmG4G%,	"+G4DK K6T>x67I{{''&	 ( H ##s*" ( 4 4hmmo  ,%8G ' 2 283F3FRV3F3W X!4"3$-'	" !!"4!6 =	 "  &%	S{{'',>^b'cH%%' $$)#+' % 
 	
_
  	YWXX	Yn d $$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss/   c; 
dd-5d ;df.4e"""fc                 ~  #    Ucm  0 nUbE  [        U[        5      (       d  [        U[        5      (       a  [        R                  " U5      nUUS'   [        U[        R                  R                  S9nOUn UR                  X>US9I S h  vN nUR                  5         U R#                  UUU[        U
[$        5      (       a  U
OSU	SUUUUUS	9$  ND! [        R                   a9  nUR                  R                  n[        UUR                  R                  S9eS nAf[        R                    a    [        SSS9ef = f7f)
Nr%  )paramsr   )ry   rz   r   r   r   Fr   )r{   r   r   r[   r   r   rz   r|   r   re   r   )rO   rt   rs   r   rY  r   r   r   r   r   r\  r   r   r   r%   r   r   r  rr   )r?   r{   r|   rx   r   r   rz   r%  r   r   r[   re   r@  rA  ry   rw   ro  r   r   r   s                       rG   rX  BedrockLLM.async_completion  s5    $ >G"gu--GS1I1I#mmG4G%,	"+7I]I]IeIefFF	S#[[[NNH%%' $$)'5565#'+ % 
 	
 O$$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss<   A3D=6C 	C
C 0D=C D:$4D"D::D=c                 ^   #    [        S [        [        UUUUUUU	SU;   a  SOSS9	USU	S9nU$ 7f)Nr   TF)rw   rx   ry   rz   r{   r|   r   r}   r   )r   r   r{   r   r   )r!   r   r   )r?   r{   r|   rx   r   r   rz   r%  r   r   r[   re   r@  rA  ry   rw   rp  s                    rG   rW  BedrockLLM.async_streaming  sT     ( 1"!!'$*h$6DE
  )#
" "!s   +-)rw   )r=   N)NNNN) rk   rl   rm   rn   ro   rH   r
   rg   r	   r   r   r   Responser   rr   r   ru   r   r   r!   r  r"  r   rt   rY  r   r   r   rX  rW  rv   __classcell__)rC   s   @rG   r   r      s   $,$	sHTN"	#,$\~~ ..~ &	~
 ~ ~ ~ ~ D#I~ ~ 
}11	2~@5 5 5. (,AE!q
q
 q
 3-	q

 !q
 &q
  q
 q
 q
 %u}} 456q
  ~q
  /<=>!q
" 
}11	2#q
@ -1!1
1
 1
 	1

 &1
  1
 1
 %u}} 4561
 1
  )*!1
" 
}11	2#1
@ -1!%"%" %" 	%"
 &%"  %" %" %u}} 456%" %"  )*!%"" 
#%" %"rJ   r   c                      [         c>  SSKJn   SSKJn  U " 5       nUR                  SS5      nU" U5      nUR                  S5      q [         $ )Nr   )Loader)ServiceModelzbedrock-runtimez	service-2ResponseStream)_response_stream_shape_cachebotocore.loadersrz  botocore.modelr{  load_service_model	shape_for)rz  r{  loaderbedrock_service_dictbedrock_service_models        rG   get_response_stream_shaper    sM    #++/%889JKX ,-A B'<'F'FGW'X$''rJ   c                       \ rS rSrS\SS4S jrS\4S jrS\S\	4S jr
S\S\	4S	 jrS
\\   S\\	   4S jrS
\\   S\\	   4S jrS\\   4S jrSrg)r   i  r{   r=   Nc                 B    SSK Jn  Xl        U" 5       U l        / U l        g )Nr   )EventStreamJSONParser)botocore.parsersr  r{   parsercontent_blocks)r?   r{   r  s      rG   rH   AWSEventStreamDecoder.__init__  s    :
+-<>rJ   c                     Sn[        U R                  5      S:X  a  gSU R                  S   ;   a  gU R                   H  nSU;   d  M  XS   S   -  nM     [        U5      S:X  a  gg)z>
Check if the tool call block so far has been an empty string
r   r   Fr   toolUser   T)r  r  )r?   argsblocks      rG   check_empty_tool_call_args0AWSEventStreamDecoder.check_empty_tool_call_args  sr     t""#q(T((++((EE!i(11 ) t9>rJ   
chunk_datac           	          [         R                  " SR                  U5      5        SnS nSnSnS n[        UR	                  SS5      5      nSU;   aF  [        S0 US   D6n/ U l        Ub-  SU;   a'  US   b!  US   S   n	[        U	S	9n
US   S
   SU
SS.US.nOSU;   aL  [        S0 US   D6nU R                  R                  U5        SU;   a  US   nOSU;   a  S SS US   S   S.US.nOSU;   a%  U R                  5       nU(       a  S SS SS.US   S.nOeSU;   a  [        UR	                  SS5      5      nSnOASU;   a;  [        UR	                  SS5      UR	                  SS5      UR	                  SS5      S9n[        UUUUUUS9nSU;   a  UR	                  S5      nSU0US'   U$ ! [         a(  n[        SR                  [        U5      5      5      eS nAff = f)Nz

Raw Chunk: {}

r   FcontentBlockIndexr   startr  r   )response_tool_name	toolUseIdr   r   )r   r   r   r   r  r   r   z{}
stopReasonr\   Tr   inputTokensoutputTokenstotalTokensr   r   tool_useis_finishedr   r   r   traceprovider_specific_fieldszReceived streaming error - {}r`   )r   debugr  rs   r   ContentBlockStartEventr  r'   ContentBlockDeltaEventr   r  r   r   GChunkr   rg   )r?   r  r   r  r  r   r   r   	start_obj_response_tool_namer  r  is_emptyr   r  r   s                   rG   converse_chunk_parser+AWSEventStreamDecoder.converse_chunk_parser(  s`   T	L  !8!?!?
!KLD>BHKM8<E
':A>?E*$2IZ5HI	&(#)!Y.!),8 +4I*>v*F')>+>*& (	2;? *$6)+% "' H J&2IZ5HI	##**95Y&$V,D)+" *$()29)=g)F% "' H $z1::<" *$()-% ",,?!@ H + 1*..v2V W"J&0",.."B&0nn^Q&G!+q!A !'+H *$"w/8?7G34O 	L;BB3q6JKK	Ls   F%F( (
G2#GGc           	      T   SnSnSnSU;   a  US   nGOSU R                   ;   a7  UR                  S5      S   R                  S5      R                  S5      nS	nS
nOSU;   d  SU;   d  SU;   d  SU;   a  U R                  US9$ SU;   aP  [        US   5      S:X  a$  US   S   R                  SS 5      b  US   S   S   nUR                  SS 5      nUb  S	nUnODSU;   a  US   nO8SU;   a  US   nO,SU;   a  US   nS	nOUR                  SS 5      (       a  S	nUS   n[	        UUUS SS S9$ )Nr   Fr   r   r   r   rz   r   Tr\   r  r  metricsr  r  r      r   r   r   completionReason)r   r  r   r   r   r  )r{   r   r  r  r  )r?   r  r   r  r   r   s         rG   _chunk_parser#AWSEventStreamDecoder._chunk_parser  s   :%l+Dtzz!>>-0377?CCFKDK"M  :-z)J&*$---DD*$Jy)*a/y)!,00>J!),Q/7$..=K&" + Z'l+Dz!f%D
*&7MK^^.55K&'9:M#'
 	
rJ   iteratorc              #      #    SSK Jn  U" 5       nU H^  nUR                  U5        U HD  nU R                  U5      nU(       d  M  [        R
                  " U5      nU R                  US9v   MF     M`     g7f)zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr  Nbotocore.eventstreamr  add_data_parse_message_from_eventr   loadsr  r?   r  r  event_stream_bufferchunkeventr   rf  s           rG   r[   AWSEventStreamDecoder.iter_bytes  sj     :/1E((/,88?7 JJw/E,,,>> - s   ?A50A5c                   #    SSK Jn  U" 5       nU  Sh  vN nUR                  U5        U HE  nU R                  U5      nU(       d  M  [        R
                  " U5      nU R                  US97v   MG     Mg   Nb
 g7f)zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   r  Nr  r  r  s           rG   r   !AWSEventStreamDecoder.aiter_bytes  ss      	;/1# 	?%((/,88?7 JJw/E,,,>>	 -	?8s+   A=A;A9A;-A=.A=9A;;A=c                 f   UR                  5       nU R                  R                  U[        5       5      nUS   S:w  a  [	        SU 35      eSU;   a8  UR                  S5      nU(       d  g UR                  S5      R                  5       $ UR                  S5      nU(       d  g UR                  5       $ )Nr   r   z!Bad response code, expected 200: r  bytesbody)to_response_dictr  r   r  
ValueErrorr   decode)r?   r  response_dictparsed_responser  s        rG   r  /AWSEventStreamDecoder._parse_message_from_event  s    ..0++++M;T;VW'3.@PQQo%#''0E99W%,,..!%%f-E<<>!rJ   )r  r{   r  )rk   rl   rm   rn   rg   rH   rr   r  ru   r  r  r  r   r  r[  r   r   r	   r  rv   r`   rJ   rG   r   r     s    ?c ?d ?D (UL UL ULn3
 3
 3
j?8E? ?x7G ??%e,?	v	?"(3- "rJ   r   c            	           \ rS rSrSS\\   4S jjrS rS\S\\	\
      S\\\\
   4   4S jrS	\S\4S
 jrS rS rS rSrg)r   i  r~   c                 *    Xl         X l        SU l        g )NF)r   r~   is_done)r?   r   r~   s      rG   rH   MockResponseIterator.__init__  s    ,"rJ   c                     U $ r   r`   ra   s    rG   __iter__MockResponseIterator.__iter__      rJ   r   r   r=   c                     SnU R                   SL aB  Ub?  [        R                  " 5       R                  US9nUb  UR                  =(       d    SnSnX4$ Ub  [        U5      S:  a  US   nX4$ )a  
If JSON mode is enabled, convert the tool call to a message.

Bedrock returns the JSON schema as part of the tool call
OpenAI returns the JSON schema as part of the content, this handles placing it in the content

Args:
    text: str
    tool_use: Optional[ChatCompletionToolCallChunk]
Returns:
    Tuple[str, Optional[ChatCompletionToolCallChunk]]

    text: The text to use in the content
    tool_use: The ChatCompletionToolCallChunk to use in the chunk response
NT)r   r   r   )r~   r   AnthropicConfig!_convert_tool_response_to_messager   r  )r?   r   r   r  r   s        rG   _handle_json_mode_chunk,MockResponseIterator._handle_json_mode_chunk  s    $ ;?>>T!j&<--/QQ% R G "," ~ #J!(;!!}H~rJ   r  c                     [        US5      nUR                  S   R                  R                  =(       d    SnS nU R                  SL a3  U R                  UUR                  S   R                  R                  S9u  p4[        UUS[        UR                  S   R                  =(       d    SS9[        UR                  UR                  UR                  S9SS9nU$ ! [         a  n[        S	U S
U 35      eS nAff = f)Nr   r   r   T)r   r   )r   r   r  zFailed to decode chunk: z	. Error: )r   r   r   r   r~   r  r   r  r   r   r   r   r   r   r   r  )r?   r  chunk_usager   r  processed_chunkr   s          rG   r  "MockResponseIterator._chunk_parser  s   	R!(W!=K%%a(0088>BDH~~%!%!=!=)11!4<<GG "> " %! /","4"4Q"7"E"E"K /"-";";&1&C&C!,!9!9
 O #" 	R7
|9QCPQQ	Rs   CC 
C<&C77C<c                 t    U R                   (       a  [        eSU l         U R                  U R                  5      $ NT)r  StopIterationr  r   ra   s    rG   __next__MockResponseIterator.__next__(  s-    <<!!$"5"566rJ   c                     U $ r   r`   ra   s    rG   	__aiter__MockResponseIterator.__aiter__/  r  rJ   c                 |   #    U R                   (       a  [        eSU l         U R                  U R                  5      $ 7fr  )r  StopAsyncIterationr  r   ra   s    rG   	__anext__MockResponseIterator.__anext__2  s0     <<$$!!$"5"566s   :<)r  r~   r   N)F)rk   rl   rm   rn   r	   rr   rH   r  rg   r   r   r
   r  r   r  r  r  r  r  rv   r`   rJ   rG   r   r     st    (4. %-d3N.O%P	sH899	:<R R& R877rJ   r   )FF)Hro   rI  r   r  rP   urllib.parser  r   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   r   litellm.caching.cachingr   'litellm.litellm_core_utils.core_helpersr   *litellm.litellm_core_utils.litellm_loggingr   3litellm.litellm_core_utils.prompt_templates.factoryr   r   r   r   r   r   r   &litellm.llms.custom_httpx.http_handlerr   r   r   r   litellm.types.llms.bedrocklitellm.types.llms.openair   r   litellm.types.utilsr   r  r   r    litellm.utilsr!   r"   base_aws_llmr$   common_utilsr%   r&   r'   r}  r+   rq   r-   rg   ru   r   rr   r   r   r  r   r   r`   rJ   rG   <module>r     s8          W W W   " 1 E >    ) @ 4 9 % U U# ,9s- M 
b bZ  %C<%&C<C< C< 	C<
 C< C< C< ~C<LY" Y"x(U" U"pR7 R7rJ   