
    gF                        U d Z ddlZ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mZmZmZmZmZmZmZmZ ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ dd	lmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd
l%m&Z&m'Z'm(Z(m)Z) ddl* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl/m2Z3 ddl/m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z> da? edd      Z@eeAd<    G d d      ZB	 	 d*dee&   deCdeDdeCdeCdeEd eFd!eeF   fd"ZG G d# d$e:      ZHd% ZI G d& d'      ZJ G d( d)      ZKy)+z<
Manages calling Bedrock's `/converse` API + `/invoke` API 
    N)partial)	AnyAsyncIteratorCallableIteratorListOptionalTupleUnioncast)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#ChatCompletionToolCallFunctionChunkChatCompletionUsageBlock)ChatCompletionMessageToolCallChoices)GenericStreamingChunk)ModelResponseUsage)CustomStreamWrapper
get_secret   )
BaseAWSLLM)BedrockErrorModelResponseIteratorget_bedrock_tool_name2   iX  )max_size_in_memorydefault_ttlbedrock_tool_name_mappingsc                   (   e Zd ZU dZdZeee      ed<   dZ	ee
   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<   dZee   ed<   dZee   ed<   dZee   ed<   dZee
   ed<   dZeee      ed<   dZee
   ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddeee      dee
   dee   dee   dee   dee   d	ee   d
ee   dee   dee   dee   dee
   dee   dee
   ddfdZed        Zdee   fdZdededefdZy)AmazonCohereChatConfigzv
    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                     t               }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localsitemssetattr	__class__)rB   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   locals_keyvalues                     ]/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/invoke_handler.py__init__zAmazonCohereChatConfig.__init__V   s;    " (!--/JCf}!2U3 *    c                     | j                   j                         D ci c]O  \  }}|j                  d      s9t        |t        j
                  t        j                  t        t        f      s|||Q c}}S c c}}w )N__)	__dict__rD   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clsr8   vs      rJ   
get_configz!AmazonCohereChatConfig.get_configl   sy     **,
,1<<%&&-- 	  qD,
 	
 
s   AA6c                 
    g dS )N)r5   max_completion_tokensstreamstopr6   top_pr:   r;   r<   r]   toolstool_choice rB   s    rJ   get_supported_openai_paramsz2AmazonCohereChatConfig.get_supported_openai_params~   s    
 	
rL   non_default_paramsoptional_paramsc                     |j                         D ]i  \  }}|dk(  s|dk(  r||d<   |dk(  r||d<   |dk(  rt        |t              r|g}||d<   |dk(  r||d<   |dk(  r||d<   |d	k(  r||d	<   |d
k(  r||d
<   	 ||d<   k |S )Nr5   r[   r\   r]   r>   r6   r^   r7   r:   r;   r<   )rD   rQ   str)rB   rd   re   paramrI   s        rJ   map_openai_paramsz(AmazonCohereChatConfig.map_openai_params   s     /446LE5$1H(H05- ,1)eS)"GE49 01%16.',$++7< 34**6; 23*/'% 7& rL   )NNNNNNNNNNNNNN) __name__
__module____qualname____doc__r2   r	   r   Document__annotations__r3   boolr4   rg   r5   intr6   floatr7   r8   r9   r:   r;   r<   r=   r>   r?   rK   rU   rY   rc   dictri   ra   rL   rJ   r1   r1   B   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=	rL   r1   clientapi_baseheadersdatamodelmessagesfake_stream	json_modec	                   K   	 | $t        t        j                  j                        } | j	                  ||||        d {   }	|	j
                  dk7  r!t        |	j
                  |	j                        |rjt        j                         j                  ||	t        j                         d|i d||t        j                  t        j                        }
t        |
|      }n-t        |	      }|j                  |	j                  d
            }|j!                  |ddd|i       |S 7 # t"        j$                  $ r<}|j&                  j
                  }t        ||j&                  j                        d }~wt"        j(                  $ r t        dd      t*        $ r}t        dt-        |            d }~ww xY ww)N)llm_provider)rv   rw   r\      status_codemessageT rx   responsemodel_responser\   logging_objre   api_keyrw   ry   print_verboseencoding)r   r{   rx      
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   )rt   ru   rv   rw   rx   ry   r   rz   r{   r   r   completion_streamdecodererr
error_codees                   rJ   	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\\--
z3<<;L;LMM!! Os4MNN <sCF;;<sG   F??D, D*C%D, )F?*D, ,F<?7E66+F<!F77F<<F?c                       e Zd ZdZd fdZdeeee   f   fdZ	dede
j                  ded	ed
edededeeef   dedeeef   fdZdedefdZ	 	 	 	 ddededee   dedededededeeee
j.                  f      dee   deeeef      deeef   fdZddi dfdededededededeeee
j.                  f      dedee   deeef   fdZddi dfdededededededeeee
j.                  f      dedee   defdZ xZS )
BedrockLLMa  
    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         |           y N)superrK   )rB   rF   s    rJ   rK   zBedrockLLM.__init__   s    rL   c                    d}d }||v r;||   }t        |d   |j                  dd      |j                  dd      |      }|d fS |dk(  s|dk(  rt        ||d	      }||fS |d
k(  rt        ||d	      }||fS |dk(  rt        ||d	      }||fS |dk(  rt        |      \  }}||fS d}|D ]+  }d|v r|d   dk(  r
||d    z  }||d    z  }#||d    z  }- ||fS )Nr   rolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   ry   	anthropicamazonbedrockrx   ry   custom_llm_providermistralmetacoherery   roleusercontent)r   getr   r   )	rB   rx   ry   providercustom_prompt_dictpromptchat_historymodel_prompt_detailsr   s	            rJ   convert_messages_to_promptz%BedrockLLM.convert_messages_to_prompt  su    '+&&#5e#< ".w7%9%=%=*B& $8#;#;<PRT#U!F 4<{"h(&:#hIF. |##) "#hIF& |##! #hIF |## !#4h#G FL |## F#W$v&0WY%7$89WY%7$89!3 45F $ |##rL   rx   r   r   r\   r   re   r   rw   ry   c           	         |j                  d      d   }|j                  |	||j                  d|i        |
d|j                          	 |j                         }d }	 |dk(  rCd	|v r|d	   }nd
|v r|d
   d   d	   }t        |d
   d   d         |j                  d   _        n|dk(  r|j                  d      ri }d}d|v r*d}|d   D ]   }|d   j                  dd       ||d   d   <   " |j                  d      d   j                  d	d       }|t        d|      rt        d|      d   }t        d|      d   j                         }d| d}t        ||j                  |d             }t        j                   dt#        j$                          d|t        j&                  |      ddgd       }||j                  d   _        ||j*                  d<   |du r)|&|du r! |
d       t-        d       }t/        |j                  d   dd!      |j                  d   _        t        j0                  j3                         }|j                  d   j4                  |_        g } |
d"t7        |j                  d                  |
d#t7        |              t9        |j                  d   t        j:                        rFt/        |j                  d   j(                  d$d       	 t9        |j                  d   j(                  j<                  t>              rO|j                  d   j(                  j<                  D ])  }i |jA                         d%di}|jC                  |       + t        j0                  jE                  t/        |j                  d   j(                  dd       |j                  d   j(                  jF                  |&      }||_$        |g|_        tK        |'      } |
d(       t        jL                  ||d)|*      S t        |j                  d+d,            |j                  d   _        t        jN                  |d-   d.   |d-   d/   |d-   d.   |d-   d/   z   0      }tQ        |d-|       n|d1   }|d+   |j                  d   _        n|d2k(  r3|j                  d3      d   j                  d4      j                  d	      }n\|d5k(  r|d6   }nQ|d7k(  r)|d8   d   d	   }|d8   d   d+   |j                  d   _        n#|j                  d9      d   j                  d:      }	 |ktW        |      dkD  r]tY        |j                  d   d<      rDt/        |j                  d   j(                  d$d       	 ||j                  d   j(                  _-        nItY        |j                  d   d<      r&t/        |j                  d   j(                  d$d       	 n
t	               |r|d2k(  rt-        d       }|j                  d   j                  |j                  d   _        t        j0                  j3                         }|j                  d   j4                  |_        t        j0                  jE                  t/        |j                  d   j(                  dd       |j                  d   j(                  jF                  >      }||_$        |g|_        tK        |'      }tM        ||d)|*      S |j^                  j                  d?d       } |j^                  j                  d@d       }!ta        | xs t        jb                  |	A            }"ta        |!xs8 t        jb                  |j                  d   j(                  jZ                  dB            }#ta        te        jd                               |_3        ||_4        tO        |"|#|"|#z   0      }$tQ        |d-|$       |S # t        $ r t        |j                  d      w xY w# t        $ r5}t        d;jS                  |j                  tU        |            d      d }~ww xY w# t        $ r5}t        d=jS                  |tU        |            |j\                        d }~ww xY w)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   rx   r   r   stop_reasonr   usageinput_tokensoutput_tokensprompt_tokenscompletion_tokenstotal_tokens
completionai21completionsrw   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   rP   r   r   r   stripr   r   Messageuuiduuid4dumpsr   _hidden_paramsr#   getattrutilsStreamingChoicesr   r   rQ   r!   r   listrs   appendDeltar   deltar*   r%   r$   rE   formatrg   lenhasattrr   r   rv   rq   token_countertimecreatedrx   )%rB   rx   r   r   r\   r   re   r   rw   ry   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%                                        rJ   process_responsezBedrockLLM.process_response1  s&	    ;;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)+L(-%/1,0)$3G$<DEI *F!c,5 )j)9&)AB %= "5!8!8!CA!F!J!J6SW!XJ!-, *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& . 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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	 	sE   _ N*_7 
D_7 *B6`8 !_47	`5 0`00`58	a60a11a6model_idc                 D    t         j                  j                  |d      S )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)rB   r  s     rJ   encode_model_idzBedrockLLM.encode_model_id1  s     ||!!(!44rL   ru   r   r   acompletiontimeoutextra_headersrt   c                 v   	 ddl m} ddlm} ddlm} |	j                  dd       }|	j                  dd       }|| j                  |      }n|}|j                  d	      d   }|	j                  d
d       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|Dt        dd       } | t        | t              r| }t        dd       }!|!t        |!t              r|!}|d}| j                  |||||||||	      }"| j                  |||      \  }#}$||du r|dk7  r|# d| d}#|$ d| d}$n|# d| d}#|$ d| d}$ ||"d|      }%| j                  ||||      \  }&}'t!        j"                  |	      }(i })|dk(  r|j%                  d       rht'        j(                         j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    d!|&i|(}-|'|'|-d"<   t/        j0                  |-      }.nt&        j2                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    |du rd|(d<   t/        j0                  d#|&i|(      }.nz|d$k(  r|j%                  d%      rXg }/g }0t5        |      D ]3  \  }1}2|2d&   d'k(  s|0j7                  |2d(          |/j7                  |1       5 t9        |/      dkD  r6d)j;                  |0      |(d'<   t5        |      D 34cg c]  \  }3}4|3|/vs|4 }}3}4t=        ||d*+      }t&        j>                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    d,|(v rbd}5|(d,   D ]   }6|6d-   jA                  d.d       |)|6d-   d/   <   " tC        |(d,   0      }7|(jA                  d'd)      |7z   |(d'<   |(j                  d,       t/        j0                  d1|i|(      }.n
t&        jD                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    t/        j0                  d#|&i|(      }.n|dk(  r[t&        jF                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    t/        j0                  d#|&i|(      }.nO|d2k(  rZt&        jH                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    t/        j0                  d#|&i|(      }.n|d3k(  rYt&        jJ                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    t/        j0                  |&|(d4      }.n|d5k(  rZt&        jL                  j+                         }*|*j-                         D ]  \  }+},|+|(vs|,|(|+<    t/        j0                  d#|&i|(      }.n3|jO                  |d6d7|(i8       tQ        d9d:jS                  ||      ;      d<d=i}8|d<d=i|}8 |d>|#|.|8?      }9|%jU                  |9       |d@|v r|d@   |9jV                  d@<   |9jY                         }:|jO                  |d6|.|$|:jV                  dA8       |
rot        |tZ              rd }|du r/|dk7  r*| j]                  |||.|$|||||	d|||:jV                  ||B      S | j_                  |||.|$|||||	||||:jV                  ||B      S |t        |t`              rOi };|:t        |tb              st        |td              rtg        jh                  |      }||;dC<   tk        |;      | _6        n|| _6        ||du r|dk7  r| jl                  jo                  |$|:jV                  |.|D      }<|<jp                  dEk7  r%tQ        |<jp                  |<js                         ;      tu        |F      }=|=jw                  |<jw                  dGH            }>ty        |>|d|I      }?|j{                  |d6|?d7|.iJ       |?S 	 | jl                  jo                  |$|:jV                  |.K      }<|<j}                          | j                  ||<||||	d6|.|||N      S # t        $ r t        d      w xY wc c}4}3w # tf        j~                  $ r<}@@j                  jp                  }AtQ        |A|@j                  j                  ;      d }@~@wtf        j                  $ r tQ        dLdM;      w xY w)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%  r'  r(  r&  r*  r+  )ru   r)  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_   ry   r   r   )	inputTexttextGenerationConfigr   r   r   )r   r   r   i  zqBedrock Invoke HTTPX: Unknown provider={}, model={}. Try calling via converse route - `bedrock/converse/<model>`.r   zContent-Typezapplication/jsonPOST)methodurlrw   rv   Authorization)r   ru   rv   )rx   ry   rw   ru   r   r   r   r   re   r\   litellm_params	logger_fnrv   r  rt   r  )r5  rv   rw   r\   r~   r   r   r   r   r   )r5  rv   rw   r   r   r   )Dbotocore.authr  botocore.awsrequestr   botocore.credentialsr!  ImportErrorpopr  r   r&   rQ   rg   get_credentialsget_runtime_endpointr   copydeepcopyrP   r   r1   rY   rD   r   r   AmazonCohereConfig	enumerater   r   joinr   AmazonAnthropicClaude3Configr   r   AmazonAnthropicConfigAmazonAI21ConfigAmazonMistralConfigAmazonTitanConfigAmazonLlamaConfigpre_callr)   r   add_authrv   preparer   async_streamingasync_completionr   rr   rq   r   Timeoutr   rt   r   r   readr   
iter_bytesr%   r   raise_for_statusr   r   r   r   r  )BrB   rx   ry   ru   r   r   r   r   r   re   r  r  r7  r8  r  rt   r  r   r!  r\   modelIdr   r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  litellm_aws_region_namestandard_aws_region_namecredentialsendpoint_urlproxy_endpoint_urlsigv4r   r   inference_paramsr  configr8   rX   _datarw   system_prompt_idxsystem_messagesidxr   jir  r  tool_calling_system_promptrv   requestprepped_paramsr   r   r   streaming_responser   r   sB                                                                     rJ   r   z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 #:'1,'E$'3
(#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#>>8X'9 
  ==9x 2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/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   )+;! !   L  S  Se  "#56$%'9K]KG|$
 	w%/]*J/<_/MGOOO,//# 	'+."?? 	 	
 &+.~(f"4++%/#1"/% +$3#1'#OO#! ,  $ ((!+-+!' /-# )  $ >Z0@AG"gu-GS1I#mmG4G%,	"+G4DK DK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/   b, !c.c8c
 ,c
d87d$d8c                 v  K   |di }|:t        |t              st        |t              rt        j                  |      }||d<   t        |t        j                  j                        }n|}	 |j                  |||       d {   }|j                          | j#                  |||t        |
t$              r|
nd|	d|||||	      S 7 B# t        j                  $ r<}|j                  j                  }t        ||j                  j                        d }~wt        j                   $ r t        dd      w xY ww)
Nr  )paramsr}   )rv   rw   r   r   r   Fr   )rx   r   r   r\   r   r   rw   ry   r   re   r   )rQ   rr   rq   r   rP  r   r   r   r   r   rS  r   r   r   r)   r   r   r  rp   )rB   rx   ry   ru   r   r   rw   r  r   r   r\   re   r7  r8  rv   rt   rf  r   r   r   s                       rJ   rO  zBedrockLLM.async_completion  s/    $ >G"gu-GS1I#mmG4G%,	"+7I]I]IeIefFF	S#[[7[NNH%%' $$)'565#'+ % 
 	
 O$$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss<   A)D9,C CC .D9C D67D$D66D9c                 f   K   t        d t        t        |||||||	d|v rdnd	      |d|	      }|S w)Nr   TF)rt   ru   rv   rw   rx   ry   r   rz   r   )r   r   rx   r   r   )r%   r   r   )rB   rx   ry   ru   r   r   rw   r  r   r   r\   re   r7  r8  rv   rt   rg  s                    rJ   rN  zBedrockLLM.async_streaming  sU     ( 1"!!'$*h$6DE
  )#
" "!s   /1)r@   N)NNNN)rj   rk   rl   rm   rK   r
   rg   r	   r   r   r   Responser#   rp   r   rs   r   r   r%   r  r  r   rr   rP  r   r   r   rO  rN  __classcell__)rF   s   @rJ   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%" %"  )*!%"" 
#%"rL   r   c                      t         >ddlm}  ddlm}  |        }|j                  dd      } ||      }|j                  d      a t         S )Nr   )Loader)ServiceModelzbedrock-runtimez	service-2ResponseStream)_response_stream_shape_cachebotocore.loadersrn  botocore.modelro  load_service_model	shape_for)rn  ro  loaderbedrock_service_dictbedrock_service_models        rJ   get_response_stream_shapery  	  sM    #++/%889JKX ,-A B'<'F'FGW'X$''rL   c                       e Zd ZdeddfdZdefdZdedefdZ	dedefdZ
d	ee   dee   fd
Zd	ee   dee   fdZdee   fdZy)r   rx   r@   Nc                 D    ddl m} || _         |       | _        g | _        y )Nr   )EventStreamJSONParser)botocore.parsersr|  rx   parsercontent_blocks)rB   rx   r|  s      rJ   rK   zAWSEventStreamDecoder.__init__  s    :
+-<>rL   c                     d}t        | j                        dk(  ryd| j                  d   v ry| j                  D ]  }d|v s||d   d   z  } t        |      dk(  ryy)zN
        Check if the tool call block so far has been an empty string
        r   r   Fr   toolUser   T)r   r  )rB   argsblocks      rJ   check_empty_tool_call_argsz0AWSEventStreamDecoder.check_empty_tool_call_args   st     t""#q(T((++((EE!i(11 ) t9>rL   
chunk_datac                    	 t        j                  dj                  |             d}d }d}d}d }t        |j	                  dd            }d|v rFt        di |d   }g | _        |d|v r|d   |d   d   }	t        |		      }
|d   d
   d|
dd|d}nd|v rHt        di |d   }| j                  j                  |       d|v r|d   }nd|v rd dd |d   d   d|d}nd|v r | j                         }|rrd dd dd|d   d}ndd|v rt        |j	                  dd            }d}nBd|v r>t        |j	                  dd      |j	                  dd      |j	                  dd            }t        ||||||      }d|v r|j	                  d      }d|i|d<   |S # t        $ r(}t        dj                  t        |                  d }~ww xY w)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 - {}ra   )r   debugr   rq   r   ContentBlockStartEventr  r+   ContentBlockDeltaEventr   r  r   r   GChunkr   rg   )rB   r  r   r  r  r   r   r   	start_obj_response_tool_namer  r  is_emptyr   r  r   s                   rJ   converse_chunk_parserz+AWSEventStreamDecoder.converse_chunk_parser4  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	!#GG	c                 &   d}d}d}d|v r|d   }nd| j                   v r7|j                  d      d   j                  d      j                  d      }d	}d
}nd|v sd|v sd|v sd|v r| j                  |      S d|v rMt        |d         dk(  r#|d   d   j                  dd       |d   d   d   }|j                  dd       }|>d	}|}n9d|v r|d   }n/d|v r|d   }n%d|v r|d   }d	}n|j                  dd       rd	}|d   }t	        |||d dd       S )Nr   Fr   r   r   r   rw   r   Tr]   r  r  metricsr  r  r      r   r   r   completionReason)r   r  r   r   r   r  )rx   r   r  r   r  )rB   r  r   r  r   r   s         rJ   _chunk_parserz#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K&'9:M#'
 	
rL   iteratorc              #      K   ddl m}  |       }|D ]W  }|j                  |       |D ]?  }| j                  |      }|st	        j
                  |      }| j                  |       A Y yw)zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr  Nbotocore.eventstreamr  add_data_parse_message_from_eventr   loadsr  rB   r  r  event_stream_bufferchunkeventr   r]  s           rJ   rR  z AWSEventStreamDecoder.iter_bytes  si     :/1E((/,88? JJw/E,,,>> - s
   <A-.A-c                   K   ddl m}  |       }|2 3 d{   }|j                  |       |D ]@  }| j                  |      }|st	        j
                  |      }| j                  |       B `7 [6 yw)zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   r  Nr  r  r  s           rJ   r   z!AWSEventStreamDecoder.aiter_bytes  ss      	;/1# 	?%((/,88? JJw/E,,,>>	 -	?8s+   A6A4A2A4*A6-A62A44A6c                 L   |j                         }| j                  j                  |t                     }|d   dk7  rt	        d|       d|v r3|j                  d      }|sy |j                  d      j                         S |j                  d      }|sy |j                         S )Nr   r~   z!Bad response code, expected 200: r  bytesbody)to_response_dictr~  r  ry  
ValueErrorr   decode)rB   r  response_dictparsed_responser  s        rJ   r  z/AWSEventStreamDecoder._parse_message_from_event  s    ..0++++M;T;VW'3.@PQQo%#''0E99W%,,..!%%f-E<<>!rL   )rj   rk   rl   rg   rK   rp   r  rs   r  r  r  r   r  rR  r   r   r	   r  ra   rL   rJ   r   r     s    ?c ?d ?D (UL UL ULn3
 3
 3
j?8E? ?x7G ??%e,?	v	?"(3- "rL   r   c            	       x    e Zd Zddee   fdZd Zdedeee	      de
eee	   f   fdZdedefd	Zd
 Zd Zd Zy)r   r{   c                 .    || _         || _        d| _        y )NF)r   r{   is_done)rB   r   r{   s      rJ   rK   zMockResponseIterator.__init__  s    ,"rL   c                     | S r   ra   rb   s    rJ   __iter__zMockResponseIterator.__iter__      rL   r   r   r@   c                     d}| j                   du r>|<t        j                         j                  |      }||j                  xs d}d}||fS |t        |      dkD  r|d   }||fS )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   )rB   r   r   r  r   s        rJ   _handle_json_mode_chunkz,MockResponseIterator._handle_json_mode_chunk  s    $ ;?>>T!j&<--/QQ% R G "," X~ #J!(;!!}HX~rL   r  c                 J   	 t        |d      }|j                  d   j                  j                  xs d}d }t	        t
        t        t              t	        t        |j                  d         j                  j                        }| j                  du r8| j                  ||j                  d   j                  j                        \  }}nW|Ut        |d   j                  dt        |d   j                  j                   |d   j                  j"                        d      }t%        ||dt'        |j                  d   j(                  xs d	      t+        |j,                  |j.                  |j0                  
      d      }|S # t2        $ r}t5        d| d|       d }~ww xY w)Nr   r   r   T)r   r   r   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   r  r   r   r   r   r   r   r   r  )rB   r  chunk_usager   r  _model_response_tool_callprocessed_chunkr   s           rJ   r  z"MockResponseIterator._chunk_parser  s   '	R!(W!=K%%a(0088>BDH(,;<=Wj0034<<GG)% ~~%!%!=!=)11!4<<GG "> "h +660366#@6q9BBGG";A">"G"G"Q"Q  %! /","4"4Q"7"E"E"K /"-";";&1&C&C!,!9!9
 O #" 	R7
|9QCPQQ	Rs   F F 	F"FF"c                 j    | j                   rt        d| _         | j                  | j                        S NT)r  StopIterationr  r   rb   s    rJ   __next__zMockResponseIterator.__next__B  s-    <<!!$"5"566rL   c                     | S r   ra   rb   s    rJ   	__aiter__zMockResponseIterator.__aiter__I  r  rL   c                 r   K   | j                   rt        d| _         | j                  | j                        S wr  )r  StopAsyncIterationr  r   rb   s    rJ   	__anext__zMockResponseIterator.__anext__L  s1     <<$$!!$"5"566s   57N)F)rj   rk   rl   r	   rp   rK   r  rg   r   r   r
   r  r#   r  r  r  r  r  ra   rL   rJ   r   r     su    (4. %-d3N.O%P	sH899	:<(R (R& (RT77rL   r   )FF)Lrm   r@  r   r   rR   urllib.parser  r   	functoolsr   typingr   r   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   r   litellm.types.utilsr    r!   r"   r  r#   r$   litellm.utilsr%   r&   base_aws_llmr(   common_utilsr)   r*   r+   rq  r/   ro   r1   rg   rs   r   rp   r   r   ry  r   r   ra   rL   rJ   <module>r     sH         
 
 
   " 1 E >    ) 
 G ? 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`7 `7rL   