
    ^hi[                         S r SSKrSSKrSSKrSSK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Jr  SSK7  SSKJrJrJrJrJrJrJrJrJr  SS	KJ r J!r!  SS
K"J#r#J$r$J%r%  SSK&J'r'J(r(   " S S5      r)g)zX
Translating between OpenAI's `/chat/completion` format and Amazon's `/converse` format
    N)ListLiteralOptionalTupleUnionoverload)map_finish_reason)Logging)_bedrock_converse_messages_pt_bedrock_tools_pt)*)	AllMessageValuesChatCompletionResponseMessageChatCompletionSystemMessageChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkChatCompletionToolParam$ChatCompletionToolParamFunctionChunkChatCompletionUserMessageOpenAIMessageContentListBlock)ModelResponseUsage)CustomStreamWrapperadd_dummy_toolhas_tool_call_blocks   )BedrockErrorget_bedrock_tool_namec                   (   \ rS rSr% Sr\\   \S'   \\\	      \S'   \\   \S'   \\   \S'   \\   \S'        S1S\\   S\\\	      S\\   S\\   S\\   S	S4S
 jjr
\S 5       rS\	S	\\	   4S jrS\	S\\	\4   S\S	\\   4S jrS	\\	   4S jrS	\\	   4S jr  S2S\\   S\	S	\4S jjr S3S\	S\S\S\S\\\      S	\4S jjr\S\\\\4   S\S   S	\\   4S j5       r\S\\\\4   S\S   S	\\    4S j5       rS\\\\4   S\S    S	\\\\ 4      4S! jrS\\   S	\!\\   \\   4   4S" jr"S#\S	\#4S$ jr$S\	S\\   S\S%\S	\%4
S& jr&S\	S'\'RP                  S(\)S)\S*\\*   S\S+\	S,\\\	4   S\S	\\)\+4   4S- jr,S	\\	   4S. jr-S\	S	\	4S/ jr.S0r/g)4AmazonConverseConfig%   z
Reference - https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
#2 - https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html#conversation-inference-supported-models-features
	maxTokensstopSequencestemperaturetopPtopKNreturnc                     [        5       nUR                  5        H(  u  pxUS:w  d  M  Uc  M  [        U R                  Xx5        M*     g )Nself)localsitemssetattr	__class__)	r)   r"   r#   r$   r%   r&   locals_keyvalues	            k/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/bedrock/chat/converse_transformation.py__init__AmazonConverseConfig.__init__1   s7     (!--/JCf}!2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__r+   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clskvs      r1   
get_configAmazonConverseConfig.get_config>   s     **,
,<<%  &&-- 	   AD,
 	
 
s   B7B9B>Bmodelc                    / SQnU R                  U5      nUR                  S5      (       dn  UR                  S5      (       dX  UR                  S5      (       dB  UR                  S5      (       d,  UR                  S5      (       d  UR                  S5      (       a  UR                  S5        UR                  S5      (       d  UR                  S5      (       a  UR                  S	5        U$ )
N)	
max_tokensmax_completion_tokensstreamstream_optionsstopr$   top_pextra_headersresponse_format	anthropicmistralcoherezmeta.llama3-1zmeta.llama3-2zamazon.novatoolstool_choice)_get_base_modelr8   append)r)   rD   supported_params
base_models       r1   get_supported_openai_params0AmazonConverseConfig.get_supported_openai_paramsP   s    

 ))%0
 !!+..$$Y//$$X..$$_55$$_55$$]33##G,  --1F1Fy1Q1Q##M2r4   rR   drop_paramsc                    US:X  aF  [         R                  SL d  USL a  g [         R                  R                  SR	                  U5      SS9eUS:X  a	  [        0 S9$ US:X  a	  [        0 S	9$ [        U[        5      (       a2  [        UR                  S
0 5      R                  SS5      S9n[        US9$ [         R                  R                  SR	                  U5      SS9e)NnoneTzbBedrock doesn't support tool_choice={}. To drop it from the call, set `litellm.drop_params = True.i  messagestatus_coderequired)anyauto)ra   functionname rc   toolzBedrock doesn't support tool_choice={}. Supported tool_choice values=['auto', 'required', json object]. To drop it from the call, set `litellm.drop_params = True.)
litellmrY   utilsUnsupportedParamsErrorformatToolChoiceValuesBlockr9   dictSpecificToolChoiceBlockget)r)   rD   rR   rY   specific_tools        r1   map_tool_choice_values+AmazonConverseConfig.map_tool_choice_valuesp   s    & ""d*kT.Amm:: A  H  H# !$	 ;   J&(R00F"(b11T**3 __Z488DM )m<<--66 }  D  D  	 7  r4   c                 
    / SQ$ )N)pngjpeggifwebp r)   s    r1   get_supported_image_types.AmazonConverseConfig.get_supported_image_types   s    --r4   c                 
    / SQ$ )N)	pdfcsvdocdocxxlsxlsxhtmltxtmdrx   ry   s    r1   get_supported_document_types1AmazonConverseConfig.get_supported_document_types   s    PPr4   json_schemaschema_namec                 @    Uc  SS0 S.nOUn[        S[        X#S9S9nU$ )a  
Handles creating a tool call for getting responses in JSON format.

Args:
    json_schema (Optional[dict]): The JSON schema the response should be in

Returns:
    AnthropicMessagesTool: The tool call to send to Anthropic API to get responses in JSON format
objectT)typeadditionalProperties
propertiesrb   )rc   
parameters)r   rb   )r   r   )r)   r   r   _input_schema_tools        r1   *_create_json_tool_call_for_response_format?AmazonConverseConfig._create_json_tool_call_for_response_format   sB      !(, M (M'9 
 r4   non_default_paramsoptional_paramsmessagesc                    UR                  5        GH   u  pgUS:X  a  S nSn	SU;   a  US   nSn	OSU;   a  US   S   nUS   S   n	 U	SS	.n
U R                  UU	S:w  a  U	OSS
9nU/US'   [        [        U	S:w  a  U	OSS9S9US'   SUS'   UR	                  SS5      SL a  SUS'   US:X  d  US:X  a  XsS'   US:X  a  XsS'   US:X  a-  [        U[        5      (       a  [        U5      S:X  a  M  U/nXsS'   US:X  a  XsS'   US:X  a  XsS'   US:X  a  XsS'   US:X  d  GM  U R                  XUS9nUc  GM  XS'   GM#      SU;  aL  UbI  [        U5      (       a9  [        R                  (       a  [        SS9US'   U$ [        R                  " S SS!S"9eU$ )#NrM   rd   response_schemajson_tool_callr   schemarc   rg   )rc   r   )r   r   rQ   re   rf   rR   T	json_moderH   Ffake_streamrF   rG   r"   rJ   r   r#   r$   rK   r%   )rD   rR   rY   bedrock_converse)custom_llm_providerzBedrock doesn't support tool calling without `tools=` param specified. Pass `tools=` param OR set `litellm.modify_params = True` // `litellm_settings::modify_params: True` to add dummy tool to the request.bedrock)r]   rD   llm_provider)r+   r   rl   rn   ro   r9   strlenrq   r   rh   modify_paramsr   rj   )r)   rD   r   r   rY   r   paramr0   r   r   _tool_choicer   _tool_choice_values                r1   map_openai_params&AmazonConverseConfig.map_openai_params   s*    /446LE)).2#%$-"'(9":K"2K"e+"'"6x"@K"'"6v">K )4VDGG +/:b/@FV H  -27(1F0,72,=[CS2.
 04,%))(E:dB59OM2$1H(H/4, ,1)eS))5zQ "GE380%16.*/'+0(%%)%@%@ &A &" &15GM2k 7p	 --$$X..$$+9(:,(  44 l!* 
 r4   message_block
block_typesystemc                     g Nrx   r)   r   r   s      r1   _get_cache_point_block+AmazonConverseConfig._get_cache_point_block       	r4   content_blockc                     g r   rx   r   s      r1   r   r     r   r4   )r   r   c                 v    UR                  SS 5      c  g US:X  a  [        [        SS9S9$ [        [        SS9S9$ )Ncache_controlr   default)r   )
cachePoint)ro   SystemContentBlockCachePointBlockContentBlockr   s      r1   r   r   #  sB     _d3;!%i1PQQ?	+JKKr4   c                    / n/ n[        U5       GH  u  pEUS   S:X  d  M  S nS n[        US   [        5      (       a/  [        US   5      S:  a  [	        US   S9nU R                  USS9nOl[        US   [        5      (       aT  US    HK  nUR                  SS5      S	:X  d  M  [        US	   5      S:  d  M/  [	        US	   S9nU R                  USS9nMM     Ub  UR                  U5        Ub  UR                  U5        UR                  U5        GM     [        U5      S:  a#  [        U5       H  nUR                  U5        M     X4$ )
Nroler   contentr   )text)r   r   rd   r   )	enumerater9   r   r   r   r   listro   rT   reversedpop)	r)   r   system_prompt_indicessystem_content_blocksidxr]   _system_content_block_cache_point_blockms	            r1   _transform_system_message.AmazonConverseConfig._transform_system_message3  sh    !#:<%h/LCv(*FJ%CG"gi0#663wy?Q;RUV;V,>GIDV,W))-)D)DH *E *&  	 2D99$Y/55,63qy>A;M4FAfI4V1151L1L !h 2M 2. 0 )4)001FG%1)001CD%,,S1) 0* $%) 56S! 7..r4   inference_paramsc                 L    SU;   a  UR                  S5      US'   [        S0 UD6$ )Ntop_kr&   rx   )r   InferenceConfig)r)   r   s     r1   _transform_inference_params0AmazonConverseConfig._transform_inference_paramsR  s0    &&'7';';G'DV$2!122r4   litellm_paramsc           	      r   U R                  U5      u  p%[        R                  " U5      n/ n0 n[        [        R
                  R                  5       5      S/-   n	SS/n
S/nUR                  SS 5        [        UUSUR                  SS 5      S9nUR                  5        H/  u  pX;  d  M  X;  d  M  X;  d  M  XU'   UR                  U5        M1     U H  nUR                  US 5        M     S	U;   a  S	UR                  S	5      0US
'   OSU;   a  S	UR                  S5      0US
'   [        UR                  S/ 5      5      nS n[        U5      S:  a#  UR                  SS 5      n[        US9nUb  UUS'   UUUU R                  US9S.nS nUR                  SS 5      nUb  [        S0 UD6nUUS'   Ub  UUS'   U$ )Nr   rQ   rR   guardrailConfigr   r   user_continue_message)r   rD   r   r   r&   inferenceConfigr   )rQ   
toolChoice)r   )r   additionalModelRequestFieldsr   r   
toolConfigrx   )r   copydeepcopyr   r    __annotations__keysr   r   r+   rT   r   r   ToolConfigBlockr   GuardrailConfigBlock)r)   rD   r   r   r   r   r   additional_request_keysadditional_request_paramssupported_converse_paramssupported_tool_call_paramssupported_guardrail_paramsbedrock_messagesr@   rA   r/   bedrock_toolsbedrock_tool_configtool_choice_values_dataguardrail_configrequest_guardrails_configs                         r1   _transform_request'AmazonConverseConfig._transform_requestW  s=    +/*H*H*R'==9"$$&!$( 00557%
I%! '.}%="&7%8"[$/ 0M+"0"4"45Ld"S	0
 %**,DA277/0!,'..q1 - +C  d+ + %%(,,V4<%&78 (((,,W5<%&78 *;  "-*
 :>}!8H8L8Lt9 #2## "-4F#L1 ),E+#??!1  @  	 
 <@$4$8$89JD$Q!$03P6OP'7E#$ *"5E,r4   responsemodel_responserH   logging_objapi_keydatac           	      T   Ub  UR                  U	UUR                  SU0S9  U
" SUR                   35        UR                  SS 5      n [        S$0 UR	                  5       D6n US   S	   nS
S0nSn/ nUb  [        US   5       Ht  u  nn SU;   a  UUS   -  nSU;   d  M  US   S   n[        US9n[        U[        R                  US   S   5      S9n[        US   S   SUUS9nUR                  U5        Mv     UUS'   USL a2  Ub/  [        U5      S:X  a   US   S   R!                  S5      nUb  UUS'   OUUS'   US   S   nUS   S   nUS   S   n["        R$                  " ['        US    5      S["        R(                  " S$0 UD6S!9/Ul        [-        [.        R.                  " 5       5      Ul        Xl        [5        UUUS"9n[7        USU5        S#U;   a  [7        US#US#   5        U$ ! [
         a2  n[        SR                  UR                  [        U5      5      SS9eS nAff = f)%Ncomplete_input_dict)inputr   original_responseadditional_argszraw model_response: r   zReceived={}, Error converting to valid response block={}. File an issue if litellm error - https://github.com/BerriAI/litellm/issuesi  r\   outputr]   r   	assistantrd   r   r   toolUserc   )response_tool_namer   )rc   	arguments	toolUseIdrb   )idr   rb   indexT   r   r   
tool_callsusageinputTokensoutputTokenstotalTokens
stopReason)finish_reasonr   r]   )prompt_tokenscompletion_tokenstotal_tokenstracerx   )	post_callr   r   ConverseResponseBlockjson	Exceptionr   rk   r   r   r   r   dumpsr   rT   r   ro   rh   Choicesr	   MessagechoicesinttimecreatedrD   r   r,   )r)   rD   r   r   rH   r   r   r   r   r   print_verboseencodingr   completion_responseer]   chat_completion_messagecontent_strrQ   r   r   _response_tool_namer   _function_chunk_tool_response_chunkjson_mode_content_strinput_tokensoutput_tokensr	  r  s                                 r1   _transform_response(AmazonConverseConfig._transform_response  s    "!!"*--!6 =	 "  	,X]]O<=$3$7$7T$J		"7"J(--/"J"	F +>h*G	*RBH+AV35 )')*< =W W$76?2K' +2)*<V*D')>+>*& 'J/"&**WY-?-H"I'O
 ,G"9-k:'!0!	,( LL!561 !>2 .9	*!2s5zQ388J3G3K3KK3X!$05J'	249#L1 +73MB+G4^D*73MB OO/0CL0QRB*AB"
 "%TYY[!1$&+%

 	/ ))NG-@-IJY  	 _  f  fMM3q6  	 	s   
G+ +
H'5-H""H'c                 
    / SQ$ )zJ
Abbreviations of regions AWS Bedrock supports for cross region inference
)useuapacrx   ry   s    r1   (_supported_cross_region_inference_region=AmazonConverseConfig._supported_cross_region_inference_region3  s
     $#r4   c                 (   UR                  S5      (       a  UR                  S5      S   nUR                  S5      (       a  UR                  S5      S   nUR                  SS5      S   nX R                  5       ;   a  UR                  SS5      S   $ U$ )z
Get the base model from the given model name.

Handle model names like - "us.meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
AND "meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
zbedrock//r   z	converse/.r   )r8   splitr(  )r)   rD   potential_regions      r1   rS   $AmazonConverseConfig._get_base_model9  s     J''KK$Q'EK((KK$Q'E ;;sA.q1LLNN;;sA&q))r4   rx   )NNNNN)Nr   r   )0__name__
__module____qualname____firstlineno____doc__r   r  r   r   r   r2   r=   rB   rW   r   rm   boolrl   rq   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   RequestObjectr   httpxResponser   r
   r   r"  r(  rS   __static_attributes__rx   r4   r1   r    r    %   s   
 }DI&&#
3-
3- $(-1%)""4C=4  S	*4 c]	4
 sm4 sm4 
4 
 
"   c  @',S$Y'7FJ	'	(>.49 .Qd3i Q
 '++ d^    
!	 P 6:RR !R 	R
 R 4 012R 
Rh 	)%')
	 H%	 
$	%	 	 	)%')
	 O,	 
,		 	L)%')
L 56L 
%*L89	:L /-./	t$%t,>'??	@/>3D 3_ 3
QQ '(Q 	Q
 Q 
QfGG ..G &	G
 G g&G G G D#IG G 
}11	2GR$$s) $S S r4   r    )*r4  r   r  r:   typingr   r   r   r   r   r   r7  rh   'litellm.litellm_core_utils.core_helpersr	   *litellm.litellm_core_utils.litellm_loggingr
   3litellm.litellm_core_utils.prompt_templates.factoryr   r   litellm.types.llms.bedrocklitellm.types.llms.openair   r   r   r   r   r   r   r   r   litellm.types.utilsr   r   litellm.utilsr   r   r   common_utilsr   r   r    rx   r4   r1   <module>rC     sZ       B B   E > )
 
 
 5 S S >d dr4   