
    h                     H   d Z ddlZddlZddlZddl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mZmZ ddlmZ dd	lmZmZ dd
l ddlmZm Z m!Z!m"Z"m#Z#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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9  G d de      Z:y)zX
Translating between OpenAI's `/chat/completion` format and Amazon's `/converse` format
    N)ListLiteralOptionalTupleUnioncastoverload)map_finish_reason)Logging)_parse_content_for_reasoning) BedrockConverseMessagesProcessor_bedrock_converse_messages_pt_bedrock_tools_pt)AnthropicConfig)
BaseConfigBaseLLMException)*)AllMessageValues#ChatCompletionRedactedThinkingBlockChatCompletionResponseMessageChatCompletionSystemMessageChatCompletionThinkingBlockChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkChatCompletionToolParam$ChatCompletionToolParamFunctionChunkChatCompletionUserMessageOpenAIChatCompletionToolParamOpenAIMessageContentListBlock)ChatCompletionMessageToolCallFunctionMessageModelResponsePromptTokensDetailsWrapperUsage)add_dummy_toolhas_tool_call_blockssupports_reasoning   )BedrockErrorBedrockModelInfoget_bedrock_tool_namec                      e Zd ZU dZee   ed<   eee      ed<   ee   ed<   ee   ed<   ee   ed<   	 	 	 	 	 dQdee   deee      dee   dee   dee   ddfd	Z	e
dee   fd
       Zedefd       Zed        Zdedee   fdZdedeeef   dedee   fdZdee   fdZdee   fdZdee   fdZdee   fdZ	 	 	 dRdee   dedee   defdZdee   dededefdZdededededef
dZdedefdZed ee e!e"f   d!e#d"   dee$   fd#       Z%ed ee e!e"f   d!e#d$   dee&   fd%       Z%d ee e!e"f   d!e#d&   deee$e&f      fd'Z%d(ee'   de(ee'   ee$   f   fd)Z)d*ede*fd+Z+ded*edefd,Z,	 dSded-ee$   ded(eee'      de-f
d.Z.ded(ee'   ded/ede/f
d0Z0ded(ee'   ded/ed1edefd2Z1ded(ee'   ded/ede/f
d3Z2	 	 dTded4e3jh                  d5e5d6e6d7ed(ee'   ded/ed8e7d9ee   d:ee   de5fd;Z8d<ee9   defd=Z:d>ee9   deee;e<f      fd?Z=d@e>de?fdAZ@	 dSdeeeeA   ee   f      dee   fdBZB	 	 dTdCeCdeeeA      dDee   de(eCee   f   fdEZDdFee&   de(eeeE   eee9      f   fdGZFdedHe3jh                  d5e5dIed6ee6   ded9ee   dJeeef   d(ede5fdKZGdLedMed1eee3j                  f   deIfdNZJ	 	 dTd1eded(ee'   ded/ed9ee   dOee   defdPZKy)UAmazonConverseConfigz
    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                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)	r6   r/   r0   r1   r2   r3   locals_keyvalues	            m/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/bedrock/chat/converse_transformation.py__init__zAmazonConverseConfig.__init__A   sA     (--/!--/JCf}!2U3 *    c                      y)Nbedrock_converse r6   s    r?   custom_llm_providerz(AmazonConverseConfig.custom_llm_providerN   s    !rA   c                     t         t        dS )N)guardrailConfigperformanceConfig)GuardrailConfigBlockPerformanceConfigBlock)clss    r?   get_config_blocksz&AmazonConverseConfig.get_config_blocksR   s      4!7
 	
rA   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__r9   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)rL   kvs      r?   
get_configzAmazonConverseConfig.get_configY   st     **,
1<<%&&-- 	  qD
 	
 
s   AA6modelc                    ddl m} g d}d|v rF|j                  d       |j                  d       |j                  d       |j                  d       |S t        j                  |      }|j                  d	      s|j                  d
      sz|j                  d      si|j                  d      sX|j                  d      sG|j                  d      s6|j                  d      s%|j                  d      s ||| j                        r|j                  d       t        j                  j                  || j                        s+t        j                  j                  || j                        r|j                  d       d|v s:d|v s6d|v s2d|v s.t        || j                        st        || j                        r"|j                  d       |j                  d       |S )Nr   )supports_function_calling)	
max_tokensmax_completion_tokensstreamstream_optionsstopr1   top_pextra_headersresponse_formatarntoolstool_choicethinkingreasoning_effort	anthropicmistralcoherezmeta.llama3-1zmeta.llama3-2zmeta.llama3-3zmeta.llama4amazon.novar[   rF   z
claude-3-7zclaude-sonnet-4zclaude-opus-4zdeepseek.r1)litellm.utilsr]   appendr+   get_base_modelrQ   rF   litellmutilssupports_tool_choicer(   )r6   r[   r]   supported_params
base_models        r?   get_supported_openai_paramsz0AmazonConverseConfig.get_supported_openai_paramsk   s   ;

 UN##G,##M2##J/##$67## &44U;
 !!+.$$Y/$$X.$$_5$$_5$$_5$$]3$$]3(1I1I ##G,==--T-E-E . 
]]//$2J2J 0 
 ##M2 E! E)%'%!$($<$< " d6N6N ##J/##$67rA   rh   drop_paramsc                    |dk(  rGt         j                  du s|du ry t         j                  j                  dj	                  |      d      |dk(  rt        i       S |dk(  rt        i 	      S t        |t              r8t        |j                  d
i       j                  dd            }t        |      S t         j                  j                  dj	                  |      d      )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)r   functionname r   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.)
rs   ry   rt   UnsupportedParamsErrorformatToolChoiceValuesBlockrR   dictSpecificToolChoiceBlockget)r6   r[   rh   ry   specific_tools        r?   map_tool_choice_valuesz+AmazonConverseConfig.map_tool_choice_values   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  rA   c                 
    g dS )N)pngjpeggifwebprD   rE   s    r?   get_supported_image_typesz.AmazonConverseConfig.get_supported_image_types   s    --rA   c                 
    g dS )N)	pdfcsvdocdocxxlsxlsxhtmltxtmdrD   rE   s    r?   get_supported_document_typesz1AmazonConverseConfig.get_supported_document_types       PPrA   c                 
    g dS )N)	mp4movmkvwebmflvmpegmpgwmv3gprD   rE   s    r?   get_supported_video_typesz.AmazonConverseConfig.get_supported_video_types   r   rA   c                 f    | j                         | j                         z   | j                         z   S N)r   r   r   rE   s    r?   get_all_supported_content_typesz4AmazonConverseConfig.get_all_supported_content_types   s5    **,//12,,./	
rA   json_schemaschema_namedescriptionc                 ^    |ddi d}n|}t        ||      }|r||d<   t        d|      }|S )a3  
        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
properties)r   
parametersr   r   )r   r   )r   r   )r6   r   r   r   _input_schematool_param_function_chunk_tools          r?   *_create_json_tool_call_for_response_formatz?AmazonConverseConfig._create_json_tool_call_for_response_format   sZ       !(, M (M$H%
! 7B%m4'.
 rA   rg   non_default_paramsoptional_paramsc                 h    | j                  ||      }d|v r|j                  dd      du rd|d<   y y y )Nr   rg   zmeta.llama3-3-70b-instruct-v1:0r`   FTfake_stream)_add_tools_to_optional_paramsr   )r6   rg   r[   r   r   s        r?   _apply_tool_call_transformationz4AmazonConverseConfig._apply_tool_call_transformation  sR     <<+5 = 

 .6"&&x74?-1OM* @ 7rA   c                 r   | j                  |      }|j                         D ]  \  }}|dk(  rt        |t              rdg}|d   |v r'd }	d}
d }d|v r|d   }	d}
n(d|v r$|d   d   }	|d   d	   }
|d   j	                  d
      }d|v r	|d   dk(  rn	 | j                  |	|
dk7  r|
nd|      }| j                  ||g      }t        j                  j                  || j                        r"|s t        t        |
dk7  r|
nd            |d<   d|d<   |j	                  dd      du rd|d<   |dk(  s|dk(  r||d<   |dk(  r||d<   |dk(  r(t        |t              rt        |      dk(  rG|g}||d<   |dk(  r||d<   |dk(  r||d<   |dk(  r:t        |t              r*| j!                  t#        t$        t&           |      |||        |dk(  r| j)                  |||!      }|||d<   |d"k(  r||d"<   |d#k(  st        |t              st+        j,                  |      |d"<    | j/                  ||$       |S )%Nre   textr   r   response_schemajson_tool_callr   schemar   r   )r   r   r   r   ro   r   r   rh   T	json_moder`   Fr   r^   r_   r/   rb   r   r0   r1   rc   r2   rg   )rg   r[   r   r   )r[   rh   ry   ri   rj   )r   r   )is_thinking_enabledr9   rR   r   r   r   r   rs   rt   ru   rF   r   r   strlenlistr   r   r   r   r   r   _map_reasoning_effort+update_optional_params_with_thinking_tokens)r6   r   r   r[   ry   r   paramr>   ignore_response_format_typesr   r   r   r   _tool_choice_values                 r?   map_openai_paramsz&AmazonConverseConfig.map_openai_params  s    #667IJ.446LE5))j.E06x,=$@@.2#%-1$-"'(9":K"2K"e+"'"6x"@K"'"6v">K"'"6":":="IKU?uV}'> GG +/:b/@FV + H 
 #'"D"D$3E7 #E #
 MM66#9Q9Q 7  0 6K40;r0AGW6OM2
 04,%))(E:dB59OM2$1H(H/4, ,1)eS)5zQ "GE380%16.*/'Jud$;44t$ABEJ'9$3	 5  %%)%@%@U &A &" &15GOM2
".3
+,,E31G.=.S.S/
+e 7l 	881? 	9 	
 rA   c                     ddl m} | j                  |      }| j                  |      }|r2|s/t	        t
        |d         j                  dd      }|	||z   |d<   yyyy)a  
        Handles scenario where max tokens is not specified. For anthropic models (anthropic api/bedrock/vertex ai), this requires having the max tokens being set and being greater than the thinking token budget.

        Checks 'non_default_params' for 'thinking' and 'max_tokens'

        if 'thinking' is enabled and 'max_tokens' is not specified, set 'max_tokens' to the thinking token budget + DEFAULT_MAX_TOKENS
        r   )DEFAULT_MAX_TOKENSri   budget_tokensNr/   )litellm.constantsr   r   is_max_tokens_in_requestr   r   r   )r6   r   r   r   r   r   thinking_token_budgets          r?   r   z@AmazonConverseConfig.update_optional_params_with_thinking_tokensz  s{     	9"66G#'#@#@AS#T '?$(z/J$K$O$O%! %0),>>  , 1	 (@rA   message_block
block_typesystemc                      y r   rD   r6   r   r   s      r?   _get_cache_point_blockz+AmazonConverseConfig._get_cache_point_block       	rA   content_blockc                      y r   rD   r   s      r?   r   z+AmazonConverseConfig._get_cache_point_block  r   rA   )r   r   c                     |j                  dd       y |dk(  rt        t        d            S t        t        d            S )Ncache_controlr   defaultr   )
cachePoint)r   SystemContentBlockCachePointBlockContentBlockr   s      r?   r   z+AmazonConverseConfig._get_cache_point_block  sB     _d3;!%i1PQQ?	+JKKrA   messagesc                    g }g }t        |      D ]  \  }}|d   dk(  s|j                  |       t        |d   t              rK|d   rF|j                  t	        |d                | j                  |d      }|sm|j                  |       t        |d   t              s|d   D ]n  }|j                  d      dk(  s|j                  d      s*|j                  t	        |d                | j                  |d      }|s^|j                  |       p  t        |      dkD  r!t        |      D ]  }|j                  |        ||fS )	Nroler   contentr   )r   r   r   r   )	enumeraterq   rR   r   r   r   r   r   r   reversedpop)r6   r   system_prompt_indicessystem_content_blocksidxr}   cache_blockms           r?   _transform_system_messagez.AmazonConverseConfig._transform_system_message  sW    !#:<%h/LCv(*%,,S1gi0#679;M)00*	0BC #'"="=H #> #K #-44[A	 2D9$Y/55=F2quuV}188 2&	 B +/*E*E !h +F +K  + 5 < <[ I 0 0. $%) 56S! 7...rA   inference_paramsc                 H    d|v r|j                  d      |d<   t        di |S )Ntop_kr3   rD   )r   InferenceConfig)r6   r   s     r?   _transform_inference_paramsz0AmazonConverseConfig._transform_inference_params  s0    &&'7';';G'DV$2!122rA   c                     t        j                  |      }d }d|v r|j                  d      }nd|v r|j                  d      }|r,|j                  d      rd|iS |j                  d      rdd|iiS i S )Nr3   r   rk   rn   inferenceConfig)r+   rr   r   rQ   )r6   r[   r   rw   	val_top_ks        r?   _handle_top_k_valuez(AmazonConverseConfig._handle_top_k_value  s    %44U;
	%%(,,V4I(((,,W5I$$[1++$$]3)FI+>??	rA   r   c                    d|vrE|Ct        |      r8t        j                  rt        d      |d<   nt        j                  ddd      t        j                  |      }t        t        j                  j                               d	gz   }dd
g}t        | j                         j                               }||z   |z   }	|j                  dd       |j                         D 
ci c]  \  }
}|
|	vs|
| }}
}|j                         D 
ci c]  \  }
}|
|	v s|
| }}
}|j                  | j                  ||             t!        |j                  dg             }d}t#        |      dkD  r%|j                  d
d      }t%        |      }|||d<   ||| j'                  |      d}| j                         j                         D ]%  \  }}|j                  |d      }| |di |||<   ' |||d<   |S c c}}
w c c}}
w )zX
        Bedrock doesn't support tool calling without `tools=` param specified.
        rg   NrC   )rF   zBedrock 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.r   bedrock)r}   r[   llm_providerr   rh   r   r   )rg   
toolChoice)r   )additionalModelRequestFieldsr   r   
toolConfigrD   )r'   rs   modify_paramsr&   r   r8   deepcopyr   r.   __annotations__keysrM   r   r9   updater  r   r   ToolConfigBlockr   )r6   r[   r   r   r   r   supported_converse_paramssupported_tool_call_paramssupported_config_paramstotal_supported_paramsrX   rY   additional_request_paramsbedrock_toolsbedrock_tool_configtool_choice_valuesdataconfig_nameconfig_classconfig_values                       r?   _transform_request_helperz.AmazonConverseConfig._transform_request_helper  sp    ?*$$X.$$+9(:,( 44 l!*   ==9$( 00557%
I%! '.}%=""&t'='='?'D'D'F"G%()%& 	
 	[$/ .335%
QBX9XAqD%
! %
 .335
Q>T9TAqD
 

 	"(($$U,<=	
 *;  "-*
 :>}!8H8L8Lt9 #2## "-4F#L1 -F+#??!1  @  %
 *.)?)?)A)G)G)I%K+//TBL'$0$@<$@[! *J *!4DY%

s   "G5/G5
G;G;litellm_paramsc           	         K   | j                  |      \  }}| j                  ||||      }t        j                  ||d|j	                  dd              d {   }d|i|}|S 7 wN)r[   r   r   r   rC   user_continue_message)r   r[   r  r  r   )r   r  r   #_bedrock_converse_messages_pt_asyncr   	r6   r[   r   r   r  r   _databedrock_messagesr  s	            r?   _async_transform_requestz-AmazonConverseConfig._async_transform_requestG  s      +/*H*H*R'' &*%C%C"7+	 &D &
 3VV!/&4&8&89PRV&W	  	  *+;EuEs   AA'A%A'headersc           	      H    t        t        | j                  ||||            S )N)r[   r   r   r  )r   r   _transform_request)r6   r[   r   r   r  r$  s         r?   transform_requestz&AmazonConverseConfig.transform_requeste  s3     ##! /-	 $ 
 	
rA   c           	          | j                  |      \  }}| j                  ||||      }t        ||d|j                  dd             }d|i|}|S r  )r   r  r   r   r   s	            r?   r&  z'AmazonConverseConfig._transform_requestw  s{     +/*H*H*R''%)%C%C"7+	 &D &
 0M+"0"4"45Ld"S	0
  *+;EuErA   raw_responsemodel_responselogging_objrequest_dataencodingapi_keyr   c                 X    | j                  ||||j                  dd      |||
|||	
      S )Nr`   F)
r[   responser*  r`   r+  r   r.  r  r   r-  )_transform_responser   )r6   r[   r)  r*  r+  r,  r   r   r  r-  r.  r   s               r?   transform_responsez'AmazonConverseConfig.transform_response  sG     ''!)"&&x7#+ ( 
 	
rA   reasoning_content_blocksc                 8    d}|D ]  }d|v s||d   d   z  } |S )z
        Extract the reasoning text from the reasoning content blocks

        Ensures deepseek reasoning content compatible output.
        r   reasoningTextr   rD   )r6   r3  reasoning_content_strblocks       r?   _transform_reasoning_contentz1AmazonConverseConfig._transform_reasoning_content  s9     !#-E%'%)?)GG% . %$rA   thinking_blocksc                    g }|D ]  }d|v rTt        d      }|d   j                  d      }|d   j                  d      }|||d<   |||d<   |j                  |       [d|v s`t        d|d         }|j                  |        |S )	zMReturn a consistent format for thinking blocks between Anthropic and Bedrock.r5  ri   r   r   	signatureredactedContentredacted_thinking)r   r  )r   r   rq   r   )r6   r9  thinking_blocks_listr7  _thinking_block_text
_signature_redacted_blocks           r?   _transform_thinking_blocksz/AmazonConverseConfig._transform_thinking_blocks  s      	 %E%'"=:"No.226:"?377D
$27OJ/)3=OK0$++O<"e+"E,59J3K# %++O< % $#rA   usagec                     |d   }|d   }|d   }d}d}d|v r
|d   }||z  }d|v r	 |d   }t        |      }t        ||||||      }|S )	NinputTokensoutputTokenstotalTokensr   cacheReadInputTokenscacheWriteInputTokens)cached_tokens)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_detailscache_creation_input_tokenscache_read_input_tokens)r$   r%   )	r6   rD  input_tokensoutput_tokensrN  rP  rQ  rO  openai_usages	            r?   _transform_usagez%AmazonConverseConfig._transform_usage  s    ]+n-]++,#'(!U*&+,B&C#33L"e+ +00G*H' :1!
 &+%"7(C$;
 rA   c                    |g S t               }|D ]  }|j                  d      }|j                  d      }|Bt        t        |      j                  d      }|!t	        |t
              r|j                  |       |lt        t        |      j                  d      }|t	        |t
              s|j                  |        t        |      S )NtoolSpecr   r   )setr   r   r   rR   r   addr   )r6   rg   tool_setr   	tool_specr   _names          r?   get_tool_call_namesz(AmazonConverseConfig.get_tool_call_names  s     =I UD,Ixx
+H$T9-11&9$E3)?LL'#T8,008$E3)?LL'  H~rA   r}   initial_finish_reasonc                 Z   |}|||fS |j                   	 | j                  |      }t        j                  |j                         }|j	                  d      dk(  r9|j	                  d      |v r&t        t        di |      g}||_        d|_         d}||fS ||fS # t        $ r Y ||fS w xY w)a  
        Apply tool call transformation to a message.

        LLM providers (e.g. Bedrock, Vertex AI) sometimes return tool call in the response content.

        If the response content is a JSON object, we can parse it and return the tool call in the tool_calls field.
        Nr   r   r   )r   
tool_callsrD   )	r   r]  jsonloadsr   r    r!   r`  	Exception)r6   r}   rg   r^  returned_finish_reasontool_call_namesjson_contentr`  s           r?   (apply_tool_call_transformation_if_neededz=AmazonConverseConfig.apply_tool_call_transformation_if_needed  s     "7=222??&"&":":5"A#zz'//: $$V,
:$((0OC 6x?W,?WX"J *4G&&*GO-9* ...w...  ...s   A=B 	B*)B*content_blocksc                    d}g }d}t        |      D ]  \  }}	 d}d|v rt        |d         \  }}|||z  }d|v r`|d   d   }	t        |	      }
t        |
t        j                  |d   d               }t        |d   d	   d
||      }|j                  |       |)|g }|j                  t        t        |                   d|v s|g }|j                  |d           |||fS )a.  
        Translate the message content to a string and a list of tool calls and reasoning content blocks

        Returns:
            content_str: str
            tools: List[ChatCompletionToolCallChunk]
            reasoningContentBlocks: Optional[List[BedrockConverseReasoningContentBlock]]
        r   Nr   toolUser   )response_tool_nameinput)r   	arguments	toolUseIdr   )idr   r   indexr   )r5  reasoningContent)
r   r   r,   r   ra  dumpsr   rq   $BedrockConverseReasoningContentBlock!BedrockConverseReasoningTextBlock)r6   rh  content_strrg   reasoningContentBlocksr   r   extracted_reasoning_content_str_content_str_response_tool_namerk  _function_chunk_tool_response_chunks                r?   _translate_message_contentz/AmazonConverseConfig._translate_message_content,  sX    35 	 &n5LC >B+  1A3 +</KG#&-i&8&@#%:':&" #F+"jj);G)DE#
 (Cy)+6#,	($ 12.:)1-/*&--8&G!@' "W,)1-/*&--g6H.IJW 6Z E#999rA   r0  r`   r  c           	         |!|j                  |	||j                  d|i       |j                  dd       }	 t        di |j	                         }	 |d   d   }d	d
i}d}g }d }|| j                  |d         \  }}}|/d|i|d<   | j                  |      |d<   | j                  |      |d<   ||d<   |du r/|-t        |      dk(  r|d   d   j                  d      }|||d<   n||d<   | j                  |d         }t        di |}t!        |d         }| j#                  ||j                  d      |      \  }}t%        j&                  |d|      g|_        t+        t-        j,                               |_        ||_        t3        |d|       d|v rt3        |d|d          |S # t
        $ r5}t        dj                  |j                  t        |            d      d }~ww xY w)Ncomplete_input_dict)rl  r.  original_responseadditional_argsr   zReceived={}, Error converting to valid response block={}. File an issue if litellm error - https://github.com/BerriAI/litellm/issuesi  r|   outputr}   r   	assistantr   r   rv  provider_specific_fieldsreasoning_contentr9  T   r   r   rm  r`  rD  
stopReasonrg   )r}   rg   r^  )finish_reasonrp  r}   tracerD   )	post_callr   r   ConverseResponseBlockra  rc  r*   r   r   r|  r8  rC  r   r   rU  r"   r
   rg  rs   Choiceschoicesinttimecreatedr[   r:   )r6   r[   r0  r*  r`   r+  r   r.  r  r   r-  r   completion_responseer}   chat_completion_messageru  rg   rv  json_mode_content_strrD  _messager^  returned_messagerd  s                            r?   r1  z(AmazonConverseConfig._transform_responsem  s    "!!"*--!6 =	 "  %4$7$7T$J		"7"J(--/"J"	F +>h*G	*RBH+AV35 	 
 //	0BC	& "-(*@C#$>? 112HI $$78 //0FG $$56 .9	*!2s5zQ388J3G3K3KK3X!$05J'	249#L1 %%&9'&BC 545 12El2S T
 99!%%g."7 : 
	
" OO4("
 "%TYY[!1$/ ))NG-@-IJY  	 _  f  fMM3q6  	 	s   F( (	G&10G!!G&error_messager~   c                     t        |||      S )N)r}   r~   r$  )r*   )r6   r  r~   r$  s       r?   get_error_classz$AmazonConverseConfig.get_error_class  s     !#
 	
rA   api_basec                     |rd| |d<   |S )NzBearer AuthorizationrD   )r6   r$  r[   r   r   r  r.  r  s           r?   validate_environmentz)AmazonConverseConfig.validate_environment  s     )0	':GO$rA   )NNNNN)Nr   Nr   )NN)L__name__
__module____qualname____doc__r   r  r
  r   r   r@   propertyrF   rV   r   rM   rZ   rx   r   boolr   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  CommonRequestObjectr  RequestObjectr#  r'  r&  httpxResponser#   r   Anyr2  rs  r8  r   r   rC  ConverseTokenUsageBlockr%   rU  	ToolBlockr]  r"   rg  r   r|  r1  Headersr   r  r  rD   rA   r?   r.   r.   5   s   
 }DI&&#
3-
3- $(-1%)""4C=4  S	*4 c]	4
 sm4 sm4 
4 "Xc] " " 
$ 
 
 
 
"A  A c A F',S$Y'7FJ	'	(>.49 .Qd3i QQ49 Q
c 
 '++%)	%d^% % c]	%
 
!%N2122 2 !	2
 2"c c c 	c
 c 
cJ"&9=. 	)%')
	 H%	 
$	%	 	 	)%')
	 O,	 
,		 	L)%')
L 56L 
%*L89	:L /-./	t$%t,>'??	@/B3D 3_ 3
   , 6:UU  $$67U 	U
 4 012U 
Un '( 	
  
<

 '(
 	

 
 
 

$ '( 	
  
N "&$(

 nn
 &	

 
 
 '(
 
 
 
 #
 D>
 

6%(,-Q(R%	%$#$HI$	e/1TTU	V$0&= % B 	$y/4(E#FFG

 
c2 ,0/3	#/#/ Y(#/  (}	#/
 
w%	&#/J?:l9K ?:PU():;<	>Q ?:BFF ..F &	F
 F g&F F #F D#IF F 
FP
 
/2
=B4CV=W
	
  "&"&  '(	
   # 3- 
rA   r.   );r  r8   r  rS   typingr   r   r   r   r   r   r	   r  rs   'litellm.litellm_core_utils.core_helpersr
   *litellm.litellm_core_utils.litellm_loggingr   Flitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser   3litellm.litellm_core_utils.prompt_templates.factoryr   r   r   *litellm.llms.anthropic.chat.transformationr   )litellm.llms.base_llm.chat.transformationr   r   litellm.types.llms.bedrocklitellm.types.llms.openair   r   r   r   r   r   r   r   r   r   r   r   litellm.types.utilsr    r!   r"   r#   r$   r%   rp   r&   r'   r(   common_utilsr*   r+   r,   r.   rD   rA   r?   <module>r     s       H H H   E > 
 G R (     S R P PU: UrA   