
    iL                       d Z ddl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mZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZmZm Z  dd
l!m"Z" ddl#m$Z$m%Z% ddl& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZEmFZFmGZGmHZHmIZI g dZJg dZKh dZL G d de$      ZMy)zX
Translating between OpenAI's `/chat/completion` format and Amazon's `/converse` format
    N)ListLiteralOptionalTupleUnioncastoverload)verbose_logger)"BEDROCK_MIN_THINKING_BUDGET_TOKENSRESPONSE_FORMAT_TOOL_NAME)filter_exceptions_from_paramsfilter_internal_paramsmap_finish_reasonsafe_deep_copy)Logging)_parse_content_for_reasoning) BedrockConverseMessagesProcessor_bedrock_converse_messages_pt_bedrock_tools_pt)AnthropicConfig)
BaseConfigBaseLLMException)*)AllMessageValuesChatCompletionAssistantMessage#ChatCompletionRedactedThinkingBlockChatCompletionResponseMessageChatCompletionSystemMessageChatCompletionThinkingBlockChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkChatCompletionToolParam$ChatCompletionToolParamFunctionChunkChatCompletionUserMessageOpenAIChatCompletionToolParamOpenAIMessageContentListBlock)ChatCompletionMessageToolCallCompletionTokensDetailsWrapperFunctionMessageModelResponsePromptTokensDetailsWrapperUsage)add_dummy_tool)any_assistant_message_has_thinking_blockshas_tool_call_blocks5last_assistant_with_tool_calls_has_no_thinking_blockssupports_reasoningtoken_counter   )BedrockErrorBedrockModelInfoget_anthropic_beta_from_headersget_bedrock_tool_nameis_claude_4_5_on_bedrock)computer_use_preview	computer_bash_text_editor_)zadvanced-tool-usezprompt-cachingzcompact-2026-01-12>   gemma-3kimi-k2
minimax-m2deepseek-v3.1nemotron-nanoclaude-opus-4-5claude-opus-4-6mistral-large-3claude-haiku-4-5claude-sonnet-4-5qwen3voxtral	ministralc                      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<   	 	 	 	 	 dtd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ee   dedee   fd       Zed        ZdeddfdZdedefdZdededee   fdZdedefdZdedededdfdZededdf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"d"eee#      dedefd#Z$d$ee#   dee   fd%Z%d"ee#   dede&ee#   ee#   f   fd&Z'	 	 dud'ee   d(ee   de(fd)Z)ededefd*       Z*ed+edefd,       Z+e	 	 	 dvd'ee   d-ee   d(ee   dd.fd/       Z,d"ee#   ded0edefd1Z-d0ededededef
d2Z.d3ededdfd4Z/d3ededed0ed5edefd6Z0d0edefd7Z1e2	 dwd8ee3e4e5e6f   d9e7d:   dee   dee8   fd;       Z9e2	 dwd8ee3e4e5e6f   d9e7d<   dee   dee:   fd=       Z9	 dwd8ee3e4e5e6f   d9e7d>   dee   deee8e:f      fd?Z9	 dwdee   dee   de&ee   ee8   f   fd@Z;dAede<fdBZ=dedAedefdCZ>dedede&eeeee?   f   fdDZ@dEeAdedFee   dGede&eeB   eAf   f
dHZC	 	 dudedIee8   dedeee      dFee   deDfdJZE	 dwdedee   dedKedFee   deFfdLZGdedee   dedKedFedefdMZH	 dwdedee   dedKedFee   deFfdNZI	 	 dudedOeJj                  dPeLdQeMdRedee   dedKedSeNdTee   dUee   deLfdVZOdWeeP   defdXZQdYeeP   deeeReSf      fdZZT	 dwd[eUd\ee   deVfd]ZW	 dwd"eeeeB   ee#   f      dee   fd^ZX	 	 dud_eYd"eeeB      d`ee   de&eYee   f   fdaZZdbee:   de&eee[   eeeP      eee\      f   fdcZ]eddedefde       Z^edUee   d"ee[   dfe_deee[      fdg       Z`dedheJj                  dPeLdiedQeeM   dedTee   djeeef   dedeLfdkZadledmedFeeeJj                  f   decfdnZd	 	 dudFededee   dedKedTee   doee   defdpZe	 	 dudee   diee   dqee   dree   def
dsZfy)x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__)	rT   rM   rN   rO   rP   rQ   locals_keyvalues	            /Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/converse_transformation.py__init__zAmazonConverseConfig.__init__   sA     (--/!--/JCf}!2U3 *    c                      y)Nbedrock_converse rT   s    r]   custom_llm_providerz(AmazonConverseConfig.custom_llm_provider   s    !r_   c                 &    t         t        t        dS )N)guardrailConfigperformanceConfigserviceTier)GuardrailConfigBlockPerformanceConfigBlockServiceTierBlock)clss    r]   get_config_blocksz&AmazonConverseConfig.get_config_blocks   s      4!7+
 	
r_   messagesoptional_paramsc                 Z   d|vr| S g }t        t        |       dz
  dd      D ],  }| |   j                  d      dk(  r|j                  |       , n |s| S t	        j
                  |       }|D ]  }||   }|j                  dg       }t        |t              rvt        d |D              }|r?g }	|D ]Q  }
t        |
t              r.|
j                  d      d	k(  rd
|
d	   d}|	j                  |       A|	j                  |
       S |	||   d<   t        |t              sd
|dg||   d<    |S )z
        Convert consecutive user messages at the end to guarded_text type if guardrailConfig is present
        and no guarded_text is already present in those messages.
        rf      roleusercontentc              3   h   K   | ]*  }t        |t              xr |j                  d       dk(   , yw)typeguarded_textN)
isinstancedictget).0items     r]   	<genexpr>zZAmazonConverseConfig._convert_consecutive_user_messages_to_guarded_text.<locals>.<genexpr>   s5      ' ' tT*Qtxx/?>/QQ 's   02rw   textrx   )rw   r   )rangelenr{   appendrV   deepcopyry   listanyrz   str)rn   ro    consecutive_user_message_indicesimessages_copyuser_message_indexuser_messageru   has_guarded_textnew_contentr}   new_items               r]   2_convert_consecutive_user_messages_to_guarded_textzGAmazonConverseConfig._convert_consecutive_user_messages_to_guarded_text   s`    O3O ,.(s8}q("b1A{v&&0077:	 2 0O h/"B();<L"&&y"5G'4(#& ' '' $  $ !#D!$-$((62Bf2L,:DL#Q#**84#**40 $ @K01)<GS) ,W=@01)<1 #C8 r_   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__rW   
startswithry   typesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)rl   kvs      r]   
get_configzAmazonConverseConfig.get_config   sy     **,
,1<<%&&-- 	  qD,
 	
 
s   AA6metadatac                    ddl }t        |t              s"t        j                  j                  ddd      t        |      dkD  r"t        j                  j                  ddd      |j                  d      }|j                  d	      }|j                         D ]F  \  }}t        |t              s"t        j                  j                  d
dd      t        |t              s"t        j                  j                  ddd      t        |      dk(  st        |      dkD  r"t        j                  j                  ddd      t        |      dkD  r"t        j                  j                  ddd      |j                  |      s&t        j                  j                  d| ddd      |j                  |      r#t        j                  j                  d| ddd       y)a'  
        Validate requestMetadata according to AWS Bedrock Converse API constraints.

        Constraints:
        - Maximum of 16 items
        - Keys: 1-256 characters, pattern [a-zA-Z0-9\s:_@$#=/+,-.]{1,256}
        - Values: 0-256 characters, pattern [a-zA-Z0-9\s:_@$#=/+,-.]{0,256}
        r   Nz$requestMetadata must be a dictionarybedrockmessagemodelllm_provider   z1requestMetadata can contain a maximum of 16 itemsz!^[a-zA-Z0-9\s:_@$#=/+,.-]{1,256}$z!^[a-zA-Z0-9\s:_@$#=/+,.-]{0,256}$z$requestMetadata keys must be stringsz&requestMetadata values must be strings   z3requestMetadata key length must be 1-256 charactersz5requestMetadata value length must be 0-256 characterszrequestMetadata key 'z@' contains invalid characters. Allowed: [a-zA-Z0-9\s:_@$#=/+,.-]zrequestMetadata value ')rery   rz   litellm
exceptionsBadRequestErrorr   compilerW   r   match)rT   r   r   key_patternvalue_patternr[   r\   s          r]   _validate_request_metadataz/AmazonConverseConfig._validate_request_metadata   s    	(D)$$44>& 5   x=2$$44K& 5   jj!EF

#GH"..*JCc3'((88B#!* 9   eS)((88D#!* 9   3x1}C3((88Q#!* 9   5zC((88S#!* 9   $$S)((883C58yz#!* 9   !&&u-((885eW<}~#!* 9  K +r_   r   c                     |}dD ]#  }|j                  |      s|t        |      d } n dD ]#  }|j                  |      s|t        |      d } n |j                  d      xs |j                  d      S )a  
        Check if the model is a Nova 2 model that supports reasoningConfig.

        Nova 2 models use a different reasoning configuration structure compared to
        Anthropic's thinking parameter and GPT-OSS's reasoning_effort parameter.

        Supported models:
        - amazon.nova-2-lite-v1:0
        - amazon.nova-2-pro-preview-20251202-v1:0
        - us.amazon.nova-2-lite-v1:0
        - eu.amazon.nova-2-lite-v1:0
        - apac.amazon.nova-2-lite-v1:0
        - (and other regional variants)

        Args:
            model: The model identifier

        Returns:
            True if the model is a Nova 2 model, False otherwise

        Examples:
            >>> config = AmazonConverseConfig()
            >>> config._is_nova_2_model("amazon.nova-2-lite-v1:0")
            True
            >>> config._is_nova_2_model("us.amazon.nova-2-lite-v1:0")
            True
            >>> config._is_nova_2_model("us.amazon.nova-2-pro-preview-20251202-v1:0")
            True
            >>> config._is_nova_2_model("amazon.nova-pro-1-5-v1:0")
            False
            >>> config._is_nova_2_model("amazon.nova-pro-v1:0")
            False
        )zbedrock/converse/zbedrock/z	converse/N)zus.zeu.zapac.zamazon.nova-2-znova-2/)r   r   )rT   r   model_without_regionrouting_prefixprefixs        r]   _is_nova_2_modelz%AmazonConverseConfig._is_nova_2_model0  s    F  %LN#..~>';C<O<Q'R$ M .F#..v6';CKM'J$ . $..
 8!,,Y7	8r_   web_search_optionsc                 v    d|j                         vrt        j                  d| d       yt        ddi      S )a  
        Map web_search_options to Nova grounding systemTool.

        Nova grounding (web search) is only supported on Amazon Nova models.
        Returns None for non-Nova models.

        Args:
            web_search_options: The web_search_options dict from the request
            model: The model identifier string

        Returns:
            BedrockToolBlock with systemTool for Nova models, None otherwise

        Reference: https://docs.aws.amazon.com/nova/latest/userguide/grounding.html
        novaz$web_search_options passed but model zM is not a Nova model. Nova grounding is only supported on Amazon Nova models.Nnamenova_grounding)
systemTool)lowerr
   debugBedrockToolBlock)rT   r   r   s      r]   _map_web_search_optionsz,AmazonConverseConfig._map_web_search_optionse  sK    ( &  6ug >J J   F4D+EFFr_   reasoning_effortc                 p    g d}||vr(t         j                  j                  d| d| dd      dd|d	iS )
a  
        Transform reasoning_effort parameter to Nova 2 reasoningConfig structure.

        Nova 2 models use a reasoningConfig structure in additionalModelRequestFields
        that differs from both Anthropic's thinking parameter and GPT-OSS's reasoning_effort.

        Args:
            reasoning_effort: The reasoning effort level, must be "low" or "high"

        Returns:
            dict: A dictionary containing the reasoningConfig structure:
                {
                    "reasoningConfig": {
                        "type": "enabled",
                        "maxReasoningEffort": "low" | "medium" |"high"
                    }
                }

        Raises:
            BadRequestError: If reasoning_effort is not "low", "medium" or "high"

        Examples:
            >>> config = AmazonConverseConfig()
            >>> config._transform_reasoning_effort_to_reasoning_config("high")
            {'reasoningConfig': {'type': 'enabled', 'maxReasoningEffort': 'high'}}
            >>> config._transform_reasoning_effort_to_reasoning_config("low")
            {'reasoningConfig': {'type': 'enabled', 'maxReasoningEffort': 'low'}}
        )lowmediumhighz Invalid reasoning_effort value 'z'' for Nova 2 models. Supported values: zamazon.nova-2-lite-v1:0ra   r   reasoningConfigenabled)rw   maxReasoningEffort)r   r   r   )rT   r   valid_valuess      r]   /_transform_reasoning_effort_to_reasoning_configzDAmazonConverseConfig._transform_reasoning_effort_to_reasoning_config  sh    > 1</$$44:;K:L M%%1N4//	 5   !&6 
 	
r_   c                     d|v r||d<   y| j                  |      r#| j                  |      }|j                  |       yt        j                  ||      |d<   y)a   
        Handle the reasoning_effort parameter based on the model type.

        Different model families handle reasoning effort differently:
        - GPT-OSS models: Keep reasoning_effort as-is (passed to additionalModelRequestFields)
        - Nova 2 models: Transform to reasoningConfig structure
        - Other models (Anthropic, etc.): Convert to thinking parameter

        Args:
            model: The model identifier
            reasoning_effort: The reasoning effort value
            optional_params: Dictionary of optional parameters to update in-place

        Examples:
            >>> config = AmazonConverseConfig()
            >>> params = {}
            >>> config._handle_reasoning_effort_parameter("gpt-oss-model", "high", params)
            >>> params
            {'reasoning_effort': 'high'}

            >>> params = {}
            >>> config._handle_reasoning_effort_parameter("amazon.nova-2-lite-v1:0", "high", params)
            >>> params
            {'reasoningConfig': {'type': 'enabled', 'maxReasoningEffort': 'high'}}

            >>> params = {}
            >>> config._handle_reasoning_effort_parameter("anthropic.claude-3", "high", params)
            >>> params
            {'thinking': {'type': 'enabled', 'budget_tokens': 10000}}
        gpt-ossr   )r   r   thinkingN)r   r   updater   _map_reasoning_effort)rT   r   r   ro   reasoning_configs        r]   "_handle_reasoning_effort_parameterz7AmazonConverseConfig._handle_reasoning_effort_parameter  sj    B  3CO./""5)#SS   ""#34 +:*O*O!1+OJ'r_   c                     | j                  d      }t        |t              rQ|j                  d      }t        |t              r/|t        k  r%t        j                  dt        |       t        |d<   yyyy)z
        Clamp thinking.budget_tokens to the Bedrock minimum (1024).

        Bedrock returns a 400 error if budget_tokens < 1024.
        r   budget_tokenszKBedrock requires thinking.budget_tokens >= %d, got %d. Clamping to minimum.N)r{   ry   rz   intr   r
   r   )ro   r   budgets      r]   _clamp_thinking_budget_tokensz2AmazonConverseConfig._clamp_thinking_budget_tokens  sr     #&&z2h%\\/2F&#&64V+V$$+6	 -O) ,W& &r_   c                    ddl m} g d}d|v ri|j                  d       |j                  d       |j                  d       |j                  d       d	|j                         v r|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       |j                  d      r|j                  d
       t        j                  j                  || j                        s+t        j                  j                  || j                        r|j                  d       d|v r|j                  d       |S | j                  |      r|j                  d       |S 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stoprO   top_pextra_headersresponse_formatrequestMetadataservice_tierparallel_tool_callsarntoolstool_choicer   r   r   r   	anthropicmistralcoherezmeta.llama3-1zmeta.llama3-2zmeta.llama3-3zmeta.llama4amazon.novar   rd   r   z
claude-3-7zclaude-sonnet-4zclaude-opus-4zdeepseek.r1)litellm.utilsr   r   r   r6   get_base_modelr   rd   r   utilssupports_tool_choicer   r2   )rT   r   r   supported_params
base_models        r]   get_supported_openai_paramsz0AmazonConverseConfig.get_supported_openai_params  sD   ;
  UN##G,##M2##J/##$67& ''(<=## &44U;
 !!+.$$Y/$$X.$$_5$$_5$$_5$$]3$$]3(1I1I ##G,   /##$89==--T-E-E . 
]]//$2J2J 0 
 ##M2##$67(  ' ""5) ##$67    E! E)%'%!$($<$< " d6N6N ##J/##$67r_   r   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  r   status_coderequired)r   autor   functionr    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.)
r   r   r   UnsupportedParamsErrorformatToolChoiceValuesBlockry   rz   SpecificToolChoiceBlockr{   )rT   r   r   r   specific_tools        r]   map_tool_choice_valuesz+AmazonConverseConfig.map_tool_choice_valuesJ  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  r_   c                 
    g dS )N)pngjpeggifwebprb   rc   s    r]   get_supported_image_typesz.AmazonConverseConfig.get_supported_image_typesi  s    --r_   c                 
    g dS )N)	pdfcsvdocdocxxlsxlsxhtmltxtmdrb   rc   s    r]   get_supported_document_typesz1AmazonConverseConfig.get_supported_document_typesl      PPr_   c                 
    g dS )N)	mp4movmkvwebmflvmpegmpgwmv3gprb   rc   s    r]   get_supported_video_typesz.AmazonConverseConfig.get_supported_video_typeso  r  r_   c                 f    | j                         | j                         z   | j                         z   S N)r  r  r  rc   s    r]   get_all_supported_content_typesz4AmazonConverseConfig.get_all_supported_content_typesr  s5    **,//12,,./	
r_   r   c                 j    |y|D ]+  }d|v s|d   }t         D ]  }|j                  |      s  y - y)z:Check if computer use tools are being used in the request.Frw   T)BEDROCK_COMPUTER_USE_TOOLSr   )rT   r   r   r   	tool_typecomputer_use_prefixs         r]   is_computer_use_tool_usedz.AmazonConverseConfig.is_computer_use_tool_usedy  sI     =D~ L	+E' ++,?@# ,F  r_   computer_use_toolsc                    g }|D ]  }|j                  dd      }d}t        D ]  }|j                  |      sd} n i }|r|j                  d      r1d|v r-|d   }||j                  dd      d	|j                  d
i       }nHt        |      }d|vr9|j                  d      rd|d<   n"|j                  d      rd|d<   nt        |      }|j	                  |        |S )z/Transform computer use tools to Bedrock format.rw   r   FTr;   r   r   computer)rw   r   
parametersr<   bashr=   str_replace_editor)r{   r#  r   rz   r   )	rT   r'  transformed_toolsr   r$  is_computer_use_toolr%  transformed_toolfuncs	            r]   _transform_computer_use_toolsz2AmazonConverseConfig._transform_computer_use_tools  s    )+&D,I $) 'A#''(;<+/( (B
 &(#''4t9K
+D ) $ <( ((<4($ (,Dz$%55$//87=,V4&11.A7K,V4 $(: $$%56A 'D ! r_   c                     g }g }|D ]d  }d|v rM|d   }d}t         D ]  }|j                  |      sd} n |r|j                  |       B|j                  |       T|j                  |       f ||fS )a  
        Separate computer use tools from regular function tools.

        Args:
            tools: List of tools to separate
            model: The model name to check if it supports computer use

        Returns:
            Tuple of (computer_use_tools, regular_tools)
        rw   FT)r#  r   r   )	rT   r   r   r'  regular_toolsr   r$  r.  r%  s	            r]   _separate_computer_use_toolsz1AmazonConverseConfig._separate_computer_use_tools  s      D~ L	',$+E' ++,?@/3, ,F (&--d3!((.$$T*  "=00r_   json_schemadescriptionc                 f    |ddi d}n|}t        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)rw   additionalProperties
properties)r   r*  r6  r   )rw   r   )r#   r   r"   )rT   r5  r6  _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'.
 r_   c                 4     t         fdt        D              S )zXCheck if the Bedrock model supports native structured outputs (outputConfig.textFormat).c              3   &   K   | ]  }|v  
 y wr   rb   )r|   	substringr   s     r]   r~   zKAmazonConverseConfig._supports_native_structured_outputs.<locals>.<genexpr>   s      
0W9I0W   )r   'BEDROCK_NATIVE_STRUCTURED_OUTPUT_MODELSr   s   `r]   #_supports_native_structured_outputsz8AmazonConverseConfig._supports_native_structured_outputs  s      
0W
 
 	
r_   schemac           	         t        | t              s| S t        |       }|j                  d      dk(  r	d|vrd|d<   d|v rPt        |d   t              r=|d   j                         D ci c]  \  }}|t        j                  |       c}}|d<   d|v r.t        |d   t              rt        j                  |d         |d<   dD ]X  }||v st        ||   t              s||   j                         D ci c]  \  }}|t        j                  |       c}}||<   Z dD ]D  }||v st        ||   t              s||   D cg c]  }t        j                  |       c}||<   F |S c c}}w c c}}w c c}w )	a  
        Recursively ensure all object types in a JSON schema have
        ``"additionalProperties": false``.

        Bedrock's native structured-outputs API requires this field to be
        explicitly set on every object node, otherwise it returns a
        validation error.
        rw   r8  r9  Fr:  rW   )z$defsdefinitions)anyOfallOfoneOf)ry   rz   r{   rW   rL   $_add_additional_properties_to_schemar   )rF  resultr   r   defs_keyr[   r}   s          r]   rL  z9AmazonConverseConfig._add_additional_properties_to_schema  s    &$'Mf::f).DF.R-2F)* 6!j1Et&L #<0668$8DAq 'LLQOO8$F<  fF7OT!B2WWwF7O 1H6!j1A4&H !'x 0 6 6 8$ 81 +PPQRSS 8$x  1 /Cf}F3K!> !'s + )MMdS +s / +$$s   ( E)5 E/E5r   OutputConfigBlockc                     | t         j                  |       } | t        j                  |       nd}d|i}|||d<   |||d<   t	        t        dt        |                  S )	a2  
        Build an outputConfig block for Bedrock's native structured outputs API.

        The Converse API expects:
        {
            "outputConfig": {
                "textFormat": {
                    "type": "json_schema",
                    "structure": {
                        "jsonSchema": {
                            "schema": "<json-string>",
                            "name": "optional",
                            "description": "optional"
                        }
                    }
                }
            }
        }
        z{}rF  r   r6  r5  )
jsonSchema)rw   	structure)
textFormat)rL   rL  jsondumpsrO  OutputFormatOutputFormatStructure)r5  r   r6  
schema_strjson_schema_defs        r]   )_create_output_config_for_response_formatz>AmazonConverseConfig._create_output_config_for_response_format/  s~    2 ".SSK 1<0GTZZ,T
19:0F&*OF#"-8OM* #"/?K
 	
r_   non_default_paramsc                 h    | j                  ||      }d|v r|j                  dd      du rd|d<   y y y )Nro   r   zmeta.llama3-3-70b-instruct-v1:0r   FTfake_stream)_add_tools_to_optional_paramsr{   )rT   r   r   r[  ro   s        r]   _apply_tool_call_transformationz4AmazonConverseConfig._apply_tool_call_transformationZ  sR     <<+5 = 

 .6"&&x74?-1OM* @ 7r_   c                    | j                  |      }|j                         D ]  \  }}|dk(  r&t        |t              r| j	                  |||||      }|dk(  s|dk(  r||d<   |dk(  r||d<   |dk(  r't        |t
              rt        |      dk(  ro|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|	ii|d<   |dk(  r||d<   n)|dk(  r$t        |t
              r| j                  |||       |dk(  r(|&t        |t              r| j                  |       ||d<   |dk(  r"t        |t
              r| j                  ||       |dk(  st        |t              s| j!                  ||      }
|
| j#                  ||
g      } d|vr$| j%                  |      s| j'                  ||       | j                  |      }|rHd|v rD|d   }t        |t              r/d|v sd|v r't)        j*                  | d       t-        i        |d<   |S )!Nr   )r\   r   ro   r[  is_thinking_enabledr   r   rM   r   r   r   rN   rO   r   rP   r   )r   r   r[  ro   r   )r   r   r   r   disable_parallel_tool_use_parallel_tool_use_configr   r   )r   r   ro   r   r   r   r]  r   )r[  ro   r   r   z does not support forced tool use (tool_choice='required' or specific tool) when reasoning is enabled. Changing tool_choice to 'auto'.r   )rb  rW   ry   rz    _translate_response_format_paramr   r   r   r`  r   r   r%   r  r   r   _map_service_tier_paramr   r_  r   +update_optional_params_with_thinking_tokensr
   infor   )rT   r[  ro   r   r   rb  paramr\   _tool_choice_valuedisable_parallelgrounding_toolfinal_is_thinking_enabledtool_choice_blocks                r]   map_openai_paramsz&AmazonConverseConfig.map_openai_paramsk  s    #667IJ.446LE5))j.E"&"G"G$3'9(; #H # $1H(H/4, ,1)eS)5zQ "GE380%16.*/'Jud$;44t$ABEJ'9$3	 5  %%)%@%@U &A &" &15GOM2--',9 !$?AQ#R@ ;< 
".3
+,,E31G77% 8  ))$E4)@33E:9>O$56&:eS+A,,UOD,,E41H "&!=!=eU!K!-&*&H&H(7?O 'I 'Ow 7B E!$*?*?*F<<#5 =  %)$<$<_$M!$/)I / >+T2--;L1L"'' ' "U V 6KPR5SOM2r_   r\   c                 .    |}|dk(  rd}|dv rd|i|d<   yy)zMap OpenAI service_tier (string) to Bedrock serviceTier (object).

        OpenAI values: "auto", "default", "flex", "priority"
        Bedrock values: "default", "flex", "priority" (no "auto")
        r   default)rq  flexpriorityrw   rh   Nrb   )rT   r\   ro   bedrock_tiers       r]   rf  z,AmazonConverseConfig._map_service_tier_param  s2     F?$L::.4l-COM* ;r_   rb  c                 :   dg}|d   |v r|S d}d}d}	d|v r|d   }n4d|v r0|d   d   }|d   j                  d      }|d   j                  d      }	d|v r
|d   dk(  r|S | j                  |      r|| j                  |||		      }
|
|d
<   n| j                  ||	      }| j	                  ||g      }t
        j                  j                  || j                        r|st        t        t                    |d<   |j                  dd      du rd|d<   d|d<   |S )z
        Handles translation of response_format parameter to Bedrock format.

        Returns `optional_params` with the translated response_format parameter.
        r   rw   Nresponse_schemar5  rF  r   r6  )r5  r   r6  outputConfig)r5  r6  r]  r   r   r   r   r   FTr^  	json_mode)r{   rE  rZ  r>  r_  r   r   r   rd   r   r   r   )rT   r\   r   ro   r[  rb  ignore_response_format_typesr5  r   r6  output_configr=  s               r]   re  z5AmazonConverseConfig._translate_response_format_param  s    )/x$=88""&*"%)% 12Ke#.x8K'++F3D.22=AKU?uV}6""33E:{?V
 !JJ'' K M
 /<ON+ CC'' D E #@@ /w A O
 22T5M5M 3  ,1F06OP2. "%%h6$>15.'+$r_   c                     ddl m} | j                  |       | 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

        Also clamps thinking.budget_tokens to the Bedrock minimum (1024) to
        prevent 400 errors from the Bedrock API.
        r   )DEFAULT_MAX_TOKENSr   r   NrM   )litellm.constantsr|  r   rb  is_max_tokens_in_requestr   rz   r{   )rT   r[  ro   r|  rb  r~  thinking_token_budgets          r]   rg  z@AmazonConverseConfig.update_optional_params_with_thinking_tokens  s     	9**?;"66G#'#@#@AS#T '?$(z/J$K$O$O%! %0),>>  , 1	 (@r_   message_block
block_typesystemc                      y r   rb   rT   r  r  r   s       r]   _get_cache_point_blockz+AmazonConverseConfig._get_cache_point_block2       	r_   content_blockc                      y r   rb   r  s       r]   r  z+AmazonConverseConfig._get_cache_point_block@  r  r_   )r  r  c                     |j                  dd       }|y t        d      }t        |t              rd|v r|d   }|dv r|t	        |      r||d<   |dk(  rt        |      S t        |      S )Ncache_controlrq  rw   ttl)5m1hr  )
cachePoint)r{   CachePointBlockry   rz   r9   SystemContentBlockContentBlock)rT   r  r  r   r  cache_pointr  s          r]   r  z+AmazonConverseConfig._get_cache_point_blockN  s     &))/4@ %95mT*u/E&Cl"u'8+E2),K&!%==;77r_   c                    g }g }t        |      D ]
  \  }}|d   dk(  s|j                  |       t        |d   t              rL|d   rG|j                  t	        |d                | j                  |d|      }|sn|j                  |       t        |d   t              s|d   D ]o  }|j                  d      dk(  s|j                  d      s*|j                  t	        |d                | j                  |d|      }|s_|j                  |       q  t        |      dkD  r!t        |      D ]  }|j                  |        ||fS )	Nrs   r  ru   r   )r  r   rw   r   r   )	enumerater   ry   r   r  r  r   r{   r   reversedpop)	rT   rn   r   system_prompt_indicessystem_content_blocksidxr   cache_blockms	            r]   _transform_system_messagez.AmazonConverseConfig._transform_system_messagei  s[    !#:<%h/LCv(*%,,S1gi0#679;M)00*	0BC #'"="=HE #> #K #-44[A	 2D9$Y/55=F2quuV}188 2&	 B +/*E*E !he +F +K  + 5 < <[ I 0 0. $%) 56S! 7...r_   inference_paramsc                 H    d|v r|j                  d      |d<   t        di |S )Ntop_krQ   rb   )r  InferenceConfig)rT   r  s     r]   _transform_inference_paramsz0AmazonConverseConfig._transform_inference_params  s0    &&'7';';G'DV$2!122r_   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 )NrQ   r  r   r   inferenceConfig)r6   r   r  r   )rT   r   r  r   	val_top_ks        r]   _handle_top_k_valuez(AmazonConverseConfig._handle_top_k_value  s    %44U;
	%%(,,V4I(((,,W5I$$[1++$$]3)FI+>??	r_   c                 
   t        |      }t        |      }t        t        j                  j                               dgz   }ddg}t        | j                         j                               }||z   |z   }|j                  dd       |j                  dd       |j                  dd      }	|	| j                  |	       |j                  dd      }
|j                  dd       |j                         D ci c]  \  }}||vs|| }}}|j                         D ci c]  \  }}||v s|| }}}|j                  d	d      }|dt        |      rY|j                         D ]F  \  }}||v r8t        ||   t              r%t        |t              r||   j                  |       B|||<   H |j                  d
d       |j                  | j                  ||             t        |      }t        |      }|||	|
fS c c}}w c c}}w )z(Prepare and separate request parameters.r  r   r   rx  Nrz  r   rw  rd  r   )r   r   r   rL   __annotations__keysrm   r  r   rW   r9   ry   rz   r   r  r   )rT   ro   r   cleaned_paramsr  supported_converse_paramssupported_tool_call_paramssupported_config_paramstotal_supported_paramsrequest_metadatarz  r   r   additional_request_paramsparallel_tool_use_configr[   r\   s                    r]   _prepare_request_paramsz,AmazonConverseConfig._prepare_request_params  sa    7G).9$( 00557%
I%! '.}%=""&t'='='?'D'D'F"G%()%& 	
 	[$/ 	_d3 ,//0A4H'++,<=5E5I5ID6
 	T	
 .335%
5TQBX9XAqD5 	" %
 .335
5TQ>T9TAqD5 	 

 $=#@#@'$
  $/4LU4S6<<>
U44"#<S#A4H"5$/-c299%@5:-c2 ? 	"%%&;TB 	"(($$U,<=	
 %;;T$U!
 %B%%
!
 %	
 	
Q%

s   5G9G9G?*G?original_toolsheadersr  c                    g }g }|rt        |      }|j                  |       g }g }	|rE|D ]@  }
d|
v r|	j                  |
       |
j                  dd      }|dv r0|j                  |
       B |r| j	                  ||      r| j                  ||      \  }}t        |      }|r|j                         dv sdv sdv sdv sd	v sd
v sdv sdv rd}n,dv sdv sdv sdv rd}nt        fddD              rd}nd}|j                  |       | j                  |      }||d<   nt        |      }|j                  |	       t        j                  |      }|r|j                  d      r||d<   ||fS )z0Process tools and collect anthropic_beta values.r   rw   r   )tool_search_tool_regex_20251119tool_search_tool_bm25_20251119zopus-4.6zopus_4.6zopus-4-6opus_4_6z
sonnet-4.6z
sonnet_4.6z
sonnet-4-6
sonnet_4_6zcomputer-use-2025-11-24zopus-4.5zopus_4.5zopus-4-5opus_4_5c              3   &   K   | ]  }|v  
 y wr   rb   )r|   patternmodel_lowers     r]   r~   z?AmazonConverseConfig._process_tools_and_beta.<locals>.<genexpr>9  s"      $ {*$rB  )z
sonnet-4.5z
sonnet_4.5z
sonnet-4-5
sonnet_4_5z	haiku-4.5z	haiku_4.5z	haiku-4-5	haiku_4_5zopus-4.1zopus_4.1zopus-4-1opus_4_1zsonnet-4sonnet_4zopus-4opus_4z
sonnet-3.7z
sonnet_3.7z
sonnet-3-7
sonnet_3_7zcomputer-use-2025-01-24zcomputer-use-2024-10-22r   r   anthropic_beta)r7   extendr   r{   r&  r4  r   r   r   r1  r6   r   r   )rT   r  r   r  r  bedrock_toolsanthropic_beta_list
user_betasfiltered_toolspre_formatted_toolsr   r$  r'  r3  computer_use_headertransformed_computer_toolsr   r  s                    @r]   _process_tools_and_betaz,AmazonConverseConfig._process_tools_and_beta  s    *, !8AJ&&z2 /1&4''..t4 HHVR0	 ! 
 %%d+ ' d<<^US040Q0Q1-
 .m<M "
 $kkm+-![0![0![0#{2#{2#{2#{2*C'+-![0![0![0*C' $ 2 +D'*C'#**+>?-1-O-O&.* 6P)'2 .n=M 	01 &44U;
:#8#8#E:M%&67111r_   r  c                    d|vrE|Ct        |      r8t        j                  rt        d      |d<   nt        j                  ddd      |j                  d	      Y|Wt        |      rLt        |      sAt        j                  r1|j                  d	d       t        j                  j                  d
       | j                  ||      \  }}}}	|j                  dg       }
| j                  |
|||      \  }}|j                  dd      }|r@t        |      dkD  r2|D ]-  }|j                  d      dk(  s|j                  dddii        n d}t        |      dkD  r%|j                  dd      }t        |      }|||d<   ||| j!                  |      d}| j#                         j%                         D ]%  \  }}|j                  |d      }| |di |||<   ' |||d<   |||d<   |	|	|d<   |S )zX
        Bedrock doesn't support tool calling without `tools=` param specified.
        r   Nra   )rd   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   r   r   r   zDropping 'thinking' param because the last assistant message with tool_calls has no thinking_blocks. The model won't use extended thinking for this turn.cache_control_injection_pointsr   locationtool_configr  rw   rq  r   )r   
toolChoice)r  )additionalModelRequestFieldsr  r  
toolConfigr   rw  rb   )r0   r   modify_paramsr.   r   r{   r1   r/   r  r
   warningr  r  r   r   ToolConfigBlockr  rm   rW   )rT   r   r  ro   rn   r  r  r  r  rz  r  r  r  cache_injection_pointspointbedrock_tool_configtool_choice_valuesdataconfig_nameconfig_classconfig_values                        r]   _transform_request_helperz.AmazonConverseConfig._transform_request_helperk  sg    ?*$$X.$$+9(:,( 44 l!*  
+7$EhO=hG$$##J5&&..c ((%@	
% *--gr: .2-I-IE7,E.
**
 ";!>!>,d"
 "c-&81&</99Z(M9!((,8K)LM 0
 :>}!8H8L8Lt9 #2## "-4F#L1 -F+#??!1  @  %
 *.)?)?)A)G)G)I%K+//TBL'$0$@<$@[! *J *!4D '&6D"#$#0D r_   litellm_paramsc           	         K   | j                  ||      \  }}| j                  ||      }| j                  |||||      }t        j                  ||d|j                  dd              d {   }d|i|}	|	S 7 wNrD  )r   r  ro   rn   r  ra   user_continue_message)rn   r   r   r  rn   )r  r   r  r   #_bedrock_converse_messages_pt_asyncr  
rT   r   rn   ro   r  r  r  _databedrock_messagesr  s
             r]   _async_transform_requestz-AmazonConverseConfig._async_transform_request  s      +/*H*HE +I +
''
 JJo

 &*%C%C"7+ &D &
 3VV!/&4&8&89PRV&W	  	  *+;EuEs   A+A<-A:.A<c           
      J    t        t        | j                  |||||            S )N)r   rn   ro   r  r  )r   rz   _transform_request)rT   r   rn   ro   r  r  s         r]   transform_requestz&AmazonConverseConfig.transform_request   s6     ##! /- $ 	
 		
r_   c           	          | j                  ||      \  }}| j                  ||      }| j                  |||||      }t        ||d|j	                  dd             }d|i|}	|	S r  )r  r   r  r   r  r  s
             r]   r  z'AmazonConverseConfig._transform_request  s     +/*H*HE +I +
''
 JJo
 &*%C%C"7+ &D &
 0M+"0"4"45Ld"S	0
  *+;EuEr_   raw_responsemodel_responselogging_objrequest_dataencodingapi_keyrx  c                 X    | j                  ||||j                  dd      |||
|||	
      S )Nr   F)
r   responser  r   r  ro   r  r  rn   r  )_transform_responser{   )rT   r   r  r  r  r  rn   ro   r  r  r  rx  s               r]   transform_responsez'AmazonConverseConfig.transform_response8  sG     ''!)"&&x7#+ ( 
 	
r_   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   rb   )rT   r  reasoning_content_strblocks       r]   _transform_reasoning_contentz1AmazonConverseConfig._transform_reasoning_contentS  s9     !#-E%'%)?)GG% . %$r_   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.r  r   r  r   	signatureredactedContentredacted_thinking)rw   r  )r   r{   r   r   )rT   r  thinking_blocks_listr  _thinking_block_text
_signature_redacted_blocks           r]   _transform_thinking_blocksz/AmazonConverseConfig._transform_thinking_blocksa  s      	 %E%'"=:"No.226:"?377D
$27OJ/)3=OK0$++O<"e+"E,59J3K# %++O< % $#r_   usagereasoning_contentc           	          |d   }|d   }|d   }d}d}d|v r
|d   }||z  }d|v r
|d   }||z  }t        |      }|rt        |d	      nd}	t        |	|	dkD  r||	z
  n|
      }
t        |||||||
      }|S )NinputTokensoutputTokenstotalTokensr   cacheReadInputTokenscacheWriteInputTokens)cached_tokensT)r   count_response_tokens)reasoning_tokenstext_tokens)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_detailscache_creation_input_tokenscache_read_input_tokenscompletion_tokens_details)r,   r3   r(   r-   )rT   r
  r  input_tokensoutput_tokensr  r  r  r  r  r  openai_usages               r]   _transform_usagez%AmazonConverseConfig._transform_usagey  s    
 ]+n-]++,#'(!U*&+,B&C#33L"e+*/0G*H'77L :1!

 ! 0M 	
 %C- $a'  00"%
! &+%"7(C$;&?
 r_   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   rz   ry   r   addr   )rT   r   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~r_   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.
        Nrw   r   r   )r   
tool_callsrb   )	ru   r(  rT  loadsr{   r'   r)   r+  	Exception)rT   r   r   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}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 r|g }|j                  |d          d|v s|g }|j                  |d           ||||fS )a  
        Translate the message content to a string and a list of tool calls, reasoning content blocks, and citations.

        Returns:
            content_str: str
            tools: List[ChatCompletionToolCallChunk]
            reasoningContentBlocks: Optional[List[BedrockConverseReasoningContentBlock]]
            citationsContentBlocks: Optional[List[CitationsContentBlock]] - Citations from Nova grounding
        r   Nr   toolUser   )response_tool_nameinput)r   	arguments	toolUseIdr   )idrw   r   indexr  )r  reasoningContentcitationsContent)
r  r   r8   r!   rT  rU  r    r   $BedrockConverseReasoningContentBlock!BedrockConverseReasoningTextBlock)rT   r2  content_strr   reasoningContentBlockscitationsContentBlocksr  ru   extracted_reasoning_content_str_content_str_response_tool_namer5  _function_chunk_tool_response_chunks                 r]   _translate_message_contentz/AmazonConverseConfig._translate_message_content  s   " 35  	 IM%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J!W,)1-/*&--g6H.IJa 6d E#9;QQQr_   json_strc                     	 t        j                  |       }t        |t              r,d|v r(t	        |      dk(  r|d   }t        j
                  |      S | S # t         j                  $ r Y | S w xY w)aL  
        Unwrap Bedrock's response_format JSON structure.

        If the JSON has a single "properties" key, extract its value.
        Otherwise, return the original string.

        Args:
            json_str: JSON string to unwrap

        Returns:
            Unwrapped JSON string or original if unwrapping not needed
        r:  rq   )rT  r,  ry   rz   r   rU  JSONDecodeError)rH  response_datas     r]   _unwrap_bedrock_propertiesz/AmazonConverseConfig._unwrap_bedrock_properties,  ss    
	 JJx0M=$/ M1&!+ -l ;zz-00  ## 		s   AA A,+A,chat_completion_messagec                 ^   | r|s|r|S dS t        |      D cg c]"  \  }}|d   j                  d      t        k(  r|$ }}}|s|S t        |      t        |      k(  rIt	        j
                  d       |d   d   j                  d      }|t        j                  |      }||d<   y|d   }||   d   j                  d      }|6t        j                  |      }|j                  d      xs d}	|	r|	|z   n||d<   t        |      D cg c]  \  }}||vs| }
}}|
r|
S dS c c}}w c c}}w )	a  
        When json_mode is True, Bedrock may return the internal `json_tool_call`
        tool alongside real user-defined tools. This method handles 3 scenarios:

        1. Only json_tool_call present  -> convert to text content, return None
        2. Mixed json_tool_call + real  -> filter out json_tool_call, return real tools
        3. No json_tool_call / no json_mode -> return tools as-is
        Nr   r   z6Processing JSON tool call response for response_formatr   r7  ru   r   )r  r{   r   r   r
   r   rL   rL  )rx  r   rM  r   tjson_tool_indicesjson_mode_content_str	first_idxjson_mode_argsexisting
real_toolss              r]   _filter_json_mode_toolsz,AmazonConverseConfig._filter_json_mode_toolsG  s|    !5+t+ "%(
(1}  (,EE ( 	 
 !L !SZ/  H 498J3G3K3KK3X!$0(<(W(W))% 6K'	2
 &a(	y)*599+F%1LLN /229=CH-5>)> $I. %.e$4S$4DAqAR8Ra$4
S'z1T1M
J Ts   'D#	D)D)r  r   r  c           	      :   |!|j                  |	||j                  d|i       |j                  dd       }	 t        di |j	                         }	 |d   d   }d	d
i}d}g }d }d }|| j                  |d         \  }}}}i }|||d<   |||d<   |r||d<   |(| j                  |      |d<   | j                  |      |d<   ||d<   | j                  |||      }|r||d<   | j                  |d   |j                  d            }t        di |}t        |d         }| j!                  ||j                  d      |      \  }}t#        j$                  |d|      g|_        t)        t+        j*                               |_        ||_        t1        |d|       d|v rt1        |d|d          d|v r)|d   }t3        |t4              rd|v rt1        |d|d          |S # t
        $ r5}t        dj                  |j                  t        |            d      d }~ww xY w) Ncomplete_input_dict)r6  r  original_responseadditional_argsrx  zReceived={}, Error converting to valid response block={}. File an issue if litellm error - https://github.com/BerriAI/litellm/issuesi  r   outputr   rs   	assistantr   ru   r@  r<  provider_specific_fieldsr  r  )rx  r   rM  r+  r
  )r  
stopReasonr   )r   r   r)  r   )finish_reasonr:  r   tracerh   rw   r   rb   )	post_callr   r{   ConverseResponseBlockrT  r-  r5   r   r   rG  r  r	  rV  r   r*   r   r1  r   Choiceschoicesr   timecreatedr   rX   ry   rz   )rT   r   r  r  r   r  ro   r  r  rn   r  rx  completion_responseer   rM  r?  r   r@  rA  r]  r  r
  _messager)  returned_messager.  service_tier_blocks                               r]   r  z(AmazonConverseConfig._transform_response  s    "!!"*--!6 =	 "  %4$7$7T$J		"7"J(--/"J"	F +>h*G	*RBH+AV35  	 IM //	0BC&& *, !-AW$%=>!-;Q$%78# ) $* "- 112HI $#
 //0FG $! .9	*55$; 6 

 4B#L1 %%(599:MN & 
 545 12El2S T
 99!%%g."7 : 
	
" OO4("
 "%TYY[!1$/ ))NG-@-IJ //!4]!C,d3BT8T8J68RSC  	 _  f  fMM3q6  	 	s   G 	H%0HHerror_messager   c                     t        |||      S )N)r   r   r  )r5   )rT   rl  r   r  s       r]   get_error_classz$AmazonConverseConfig.get_error_class  s     !#
 	
r_   api_basec                     |rd| |d<   |S )NzBearer Authorizationrb   )rT   r  r   rn   ro   r  r  ro  s           r]   validate_environmentz)AmazonConverseConfig.validate_environment&  s     )0	':GO$r_   rd   r^  c                 $    |du ry|du r|d|v ryy)zG
        Returns True if the model/provider should fake stream
        Tai21Frb   )rT   r   r   rd   r^  s        r]   should_fake_streamz'AmazonConverseConfig.should_fake_stream4  s-     $
 T>  U?r_   )NNNNN)NN)NNNr   )g__name__
__module____qualname____doc__r   r   r  r   r   r^   propertyrd   r   rz   rm   r   r   r   r   r   boolr   r   r   r   r   r   r   r   r   r  r  r  r  r!  r%   r&  r1  r   r4  r"   r>  rE  rL  rZ  r`  ro  rf  re  rg  r	   r&   r$   r   r   r   r  r  r  r  r  r  r  rO  r  r   	ToolBlockr  CommonRequestObjectr  RequestObjectr  r  r  httpxResponser+   r   Anyr  r=  r  r   r   r	  ConverseTokenUsageBlockr-   r   r(  r*   r1  r    CitationsContentBlockrG  rL  r   rV  r  Headersr   rn  rr  ru  rb   r_   r]   rL   rL   {   s   
 }DI&&#
3-
3- $(-1%)""4C=4  S	*4 c]	4
 sm4 sm4 
4 "Xc] " " 
$ 
 
 4'(4;?4		4 4l 
 
"E4 ED EN38c 38d 38jG"&G/2G	"	#G>-
 #-
	-
^//,//BF/	/b Ot O O O$Q  Q c Q f',S$Y'7FJ	'	(>.49 .Qd3i QQ49 Q
c 
d#@ABKN	(!"&'D"E(!	d(!T!178!1AD!1	*+T2O-PP
!1J '+%)&d^& c]& 
!	&P 
3 
4 
 
 (T (d ( (T &*"%)(
d^(
sm(
 c](
 
	(
 (
T2122 2 !	2
 2"Z Z Z 	Z
 Z 
Zx
DS 
D4 
DD 
DAA A 	A
 !A "A 
AF"&9=8   $)%'*,
 H% } 
$	%    $)%'*,
 O, } 
,	 ,  $8)%'*,
8 568 }8 
%*L89	:88 HL/-./7?}/	t$%t,>'??	@/B3D 3_ 3
   "Q
#Q
,/Q
	tT4*;!<<	=Q
fv2v2 v2 $	v2
 $(v2 
tI$	%v2z 6:"&ll  $$67l 	l
 4 012l $l 
lh #'%% '(% 	%
 % $% 
%N

 '(
 	

 
 
 

2 #'## '(# 	#
 # $# 
#` "&$(

 nn
 &	

 
 
 '(
 
 
 
 #
 D>
 

6%(,-Q(R%	%$#$HI$	e/1TTU	V$6 ,0+&+ $C=+ 
	+b 	$y/4(E#FFG

 
c2 ,0/3	#/#/ Y(#/  (}	#/
 
w%	&#/JIR"<0IR	():;<+,-	/
IRV S S  4 62D>62/062 "?62 
$23	4	62 62p[[ ..[ &	[
 [ g&[ [ #[ D#I[ [ 
[z
 
/2
=B4CV=W
	
  "&"&  '(	
   # 3- 
$ .2&*}  &c]	
 d^ 
r_   rL   )Nry  rV   rT  re  r   typingr   r   r   r   r   r   r	   r  r   litellm._loggingr
   r}  r   r   'litellm.litellm_core_utils.core_helpersr   r   r   r   *litellm.litellm_core_utils.litellm_loggingr   8litellm.litellm_core_utils.prompt_templates.common_utilsr   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%   r&   litellm.types.utilsr'   r(   r)   r*   r+   r,   r-   r   r.   r/   r0   r1   r2   r3   common_utilsr5   r6   r7   r8   r9   r#  *UNSUPPORTED_BEDROCK_CONVERSE_BETA_PATTERNSrC  rL   rb   r_   r]   <module>r     s        H H H   +  ? 
 G R (        . *+ '4S: Sr_   