Ë
    uPêjS§ ã                   ó(  — U d Z ddlZddlZddlZddlZddlZddlmZ ddl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!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1 ddl2­ ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddlKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ e	rddl[Z[g d¢Z\e
e]d<   dZ^e
e]d<   g d¢Z_e
e]d<    G d„ de+«      Z`y)zX
Translating between OpenAI's `/chat/completion` format and Amazon's `/converse` format
é    N)ÚMapping)ÚTYPE_CHECKINGÚFinalÚLiteralÚ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Úmake_valid_bedrock_tool_name)Ú*DROP_UNSUPPORTED_ADAPTIVE_THINKING_WARNINGÚ&DROP_UNSUPPORTED_OUTPUT_CONFIG_WARNINGÚ(REASONING_EFFORT_TO_OUTPUT_CONFIG_EFFORTÚAnthropicConfig)ÚAnthropicModelInfo)Ú
BaseConfigÚBaseLLMException)Ú bedrock_request_metadata_headersÚ!bedrock_request_metadata_is_ownedÚmerge_bedrock_invoke_headersÚ resolve_bedrock_request_metadata)Ú*)ÚAllMessageValuesÚChatCompletionAnnotationÚChatCompletionAssistantMessageÚ#ChatCompletionRedactedThinkingBlockÚChatCompletionResponseMessageÚChatCompletionSystemMessageÚChatCompletionThinkingBlockÚChatCompletionToolCallChunkÚ#ChatCompletionToolCallFunctionChunkÚChatCompletionToolParamÚ$ChatCompletionToolParamFunctionChunkÚChatCompletionUserMessageÚOpenAIChatCompletionToolParamÚOpenAIMessageContentListBlock)ÚCacheCreationTokenDetailsÚChatCompletionMessageToolCallÚCompletionTokensDetailsWrapperÚFunctionÚMessageÚModelResponseÚPromptTokensDetailsWrapperÚUsage)Úadd_dummy_toolÚ)any_assistant_message_has_thinking_blocksÚhas_tool_call_blocksÚ5last_assistant_with_tool_calls_has_no_thinking_blocksÚsupports_reasoningÚtoken_counteré   )ÚBedrockErrorÚBedrockModelInfoÚ2bedrock_converse_supports_parallel_tool_use_configÚget_anthropic_beta_from_headersÚget_bedrock_tool_nameÚ,is_bedrock_application_inference_profile_arnÚis_claude_4_5_on_bedrockÚ+normalize_bedrock_opus_output_config_effort)Úcomputer_use_previewÚ	computer_Úbash_Útext_editor_ÚBEDROCK_COMPUTER_USE_TOOLSé   Ú$BEDROCK_OPENAI_COMPAT_MIN_MAX_TOKENS)zadvanced-tool-usezprompt-cachingzcompact-2026-01-12Ú*UNSUPPORTED_BEDROCK_CONVERSE_BETA_PATTERNSc                   óè
  — e Zd ZU dZedz  ed<   ee   dz  ed<   edz  ed<   edz  ed<   edz  ed<   	 	 	 	 	 d�dedz  dee   dz  dedz  dedz  dedz  ddfd	„Ze	dedz  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ededefd„«       Zededefd„«       Zdedefd„Zdedededz  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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z  d ededz  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$   dz  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(	 	 d�d+edz  d,edz  de)fd-„Z*ed‘ded.edz  defd/„«       Z+ed0edefd1„«       Z,e	 	 	 d’d+edz  d2edz  d,edz  dd3fd4„«       Z-d&ee$   ded5edefd6„Z.d5ededed edef
d7„Z/d8e0deddfd9„Z1d8eez  deddfd:„Z2d8ededdfd;„Z3d8ededed5ed<edefd=„Z4d5edefd>„Z5e6	 d‘d?e7e8z  e9z  e:z  d@e;dA   dedz  de<dz  fdB„«       Z=e6	 d‘d?e7e8z  e9z  e:z  d@e;dC   dedz  de>dz  fdD„«       Z=	 d‘d?e7e8z  e9z  e:z  d@e;dE   dedz  de<e>z  dz  fdF„Z=ed‘dGedz  dedz  de?fdH„«       Z@	 d‘dee   dedz  de'ee   ee<   f   fdI„ZAdJedeBfdK„ZCd“dedJed edefdL„ZDedMedNedefdO„«       ZEedMeddfdP„«       ZF	 d“deded ede'eeeeGdz  f   fdQ„ZHdRededSedz  dMede'eeI   ef   f
dT„ZJedMedUeddfdV„«       ZK	 	 	 	 d”dedWee<   dedee   dz  dSedz  d edXeLeeMf   dz  deNfdY„ZO	 d‘dedee   dedXedSedz  dePfdZ„ZQdedee   dedXedSedefd[„ZR	 d‘dedee   dedXedSedz  dePfd\„ZS	 	 d�ded]eTjª                  d^eVd_eWd`edee   dedXedadbdcedz  ddedz  deVfde„ZXdfeeY   defdg„ZZdheeY   dee[e\z     fdi„Z]edje^ddkfdl„«       Z_edmeMdedz  fdn„«       Z`edoeLeeMf   defdp„«       ZaedoeLeeMf   dqedefdr„«       ZbdoeLeeMf   decfds„Zd	 	 	 d•dje^dtedz  duedvedz  decf
dw„Ze	 d‘d&eeI   ee$   z  dz  dee   fdx„Zf	 	 d�dyegd&eeI   dz  dzedz  de'egedz  f   fd{„Zhd|ee>   de'eeei   eeY   dz  eej   dz  f   fd}„Zked~eej   dz  de'edz  eel   dz  f   fd„«       Zmed€edefd�„«       Zneddedz  d&eei   d‚eodeei   dz  fdƒ„«       Zpded„eTjª                  d^eVd…ed_eWdz  dedcedz  d†eez  dedeVfd‡„Zqdˆed‰edSeeTjä                  z  desfdŠ„Zt	 	 d�dSededee   dedXedcedz  d‹edz  defdŒ„Zu	 	 d�dedz  d…edz  d.edz  d�edz  def
dŽ„Zvy)–Ú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
    NÚ	maxTokensÚstopSequencesÚtemperatureÚtopPÚtopKÚreturnc                 ó¤   — t        «       j                  «       }|j                  «       D ]%  \  }}|dk7  sŒ|€Œt        | j                  ||«       Œ' y )NÚself)ÚlocalsÚcopyÚitemsÚsetattrÚ	__class__)	rX   rQ   rR   rS   rT   rU   Úlocals_ÚkeyÚvalues	            úv/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/converse_transformation.pyÚ__init__zAmazonConverseConfig.__init__ƒ   sF   € ô  ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4ó    c                  ó   — y)NÚbedrock_converse© ©rX   s    ra   Úcustom_llm_providerz(AmazonConverseConfig.custom_llm_provider�   s   € à!rc   c                 ó&   — t         t        t        dœS )N)ÚguardrailConfigÚperformanceConfigÚserviceTier)ÚGuardrailConfigBlockÚPerformanceConfigBlockÚServiceTierBlock)Úclss    ra   Úget_config_blocksz&AmazonConverseConfig.get_config_blocks”   s   € ô  4Ü!7Ü+ñ
ð 	
rc   Ú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.
        rj   é   éÿÿÿÿÚroleÚuserÚcontentc              3   óh   K  — | ]*  }t        |t        «      xr |j                  d «      dk(  –— Œ, y­w)ÚtypeÚguarded_textN)Ú
isinstanceÚdictÚget)Ú.0Úitems     ra   ú	<genexpr>zZAmazonConverseConfig._convert_consecutive_user_messages_to_guarded_text.<locals>.<genexpr>º   s2   è ø€ ò 'ØVZ”J˜t¤TÓ*ÒQ¨t¯x©x¸Ó/?À>Ñ/QÓQñ'ùs   ‚02r{   Útextr|   )r{   rƒ   )ÚrangeÚlenr   ÚappendrZ   Údeepcopyr}   ÚlistÚanyr~   Ústr)rr   rs   Ú consecutive_user_message_indicesÚiÚmessages_copyÚuser_message_indexÚuser_messagery   Úhas_guarded_textÚnew_contentr�   Únew_items               ra   Ú2_convert_consecutive_user_messages_to_guarded_textzGAmazonConverseConfig._convert_consecutive_user_messages_to_guarded_textœ   sl  € ð  OÑ3ØˆOð 35Ð(Ü”s˜8“} qÑ(¨"¨bÓ1ò 	ˆAØ˜‰{�‰˜vÓ&¨&Ò0Ø0×7Ñ7¸Õ:áð		ñ 0ØˆOô  $Ÿ}™}¨XÓ6ˆØ"Bò 	kÐØ(Ð);Ñ<ˆLØ"×&Ñ& y°"Ó5ˆGä˜'¤4Ô(Ü#&ñ 'Ø^eô'ó $Ð ñ $Øð !�Ø#ò 1�DÜ! $¬Ô-°$·(±(¸6Ó2BÀfÒ2LØ,:ÀDÈÁLÑ#Q˜Ø#×*Ñ*¨8Õ4à#×*Ñ*¨4Õ0ð1ð @K�Ð0Ñ1°)Ò<Ü˜G¤SÕ)àIWÐahÑ@iÐ?j�Ð0Ñ1°)Ò<ð/	kð2 Ðrc   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__r[   Ú
startswithr}   ÚtypesÚFunctionTypeÚBuiltinFunctionTypeÚclassmethodÚstaticmethod)rp   ÚkÚvs      ra   Ú
get_configzAmazonConverseConfig.get_configÐ   st   € ð Ÿ™×*Ñ*Ó,÷
á��1Ø—<‘< Ô$ÜØä×&Ñ&Ü×-Ñ-ÜÜ ð	ôð �ð ˆq‰Dó
ð 	
ùó 
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_providerrL   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 ')Úrer}   r~   ÚlitellmÚ
exceptionsÚBadRequestErrorr…   Úcompiler[   rŠ   Úmatch)rX   r    r¨   Úkey_patternÚvalue_patternr_   r`   s          ra   Ú_validate_request_metadataz/AmazonConverseConfig._validate_request_metadataâ   s  € ó 	ä˜(¤DÔ)Ü×$Ñ$×4Ñ4Ø>ØØ&ð 5ó ð ô ˆx‹=˜2ÒÜ×$Ñ$×4Ñ4ØKØØ&ð 5ó ð ð (˜RŸZ™ZÐ(LÓMˆØ)˜rŸz™zÐ*NÓOˆà"Ÿ.™.Ó*ó )	‰JˆC�Ü˜c¤3Ô'Ü×(Ñ(×8Ñ8ØBØ#Ø!*ð 9ó ð ô ˜e¤SÔ)Ü×(Ñ(×8Ñ8ØDØ#Ø!*ð 9ó ð ô �3‹x˜1Š}¤ C£¨3¢Ü×(Ñ(×8Ñ8ØQØ#Ø!*ð 9ó ð ô �5‹z˜CÒÜ×(Ñ(×8Ñ8ØSØ#Ø!*ð 9ó ð ð ×$Ñ$ SÔ)Ü×(Ñ(×8Ñ8Ø3°C°5Ð8yÐzØ#Ø!*ð 9ó ð ð !×&Ñ& uÖ-Ü×(Ñ(×8Ñ8Ø5°e°WÐ<}Ð~Ø#Ø!*ð 9ó ð ñK)	rc   r¥   c                 ó2   — t        j                  d| «      d uS )Nzopenai\.gpt-\d|xai\.grok-©r¨   Úsearch©r¥   s    ra   Ú_requires_min_max_tokensz-AmazonConverseConfig._requires_min_max_tokens)  s   € ä�y‰yÐ5°uÓ=ÀTÐIÐIrc   c                 ó2   — t        j                  d| «      d uS )Nzopenai\.gpt-\dr²   r´   s    ra   Ú_is_openai_gpt_reasoning_modelz3AmazonConverseConfig._is_openai_gpt_reasoning_model-  s   € ä�y‰yÐ*¨EÓ2¸$Ð>Ð>rc   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…   )rX   r¥   Úmodel_without_regionÚrouting_prefixÚprefixs        ra   Ú_is_nova_2_modelz%AmazonConverseConfig._is_nova_2_model1  s—   € ðF  %ÐØLò 	ˆNØ#×.Ñ.¨~Õ>Ø';¼CÀÓ<OÐ<QÐ'RÐ$Ùð	ð .ò 	ˆFØ#×.Ñ.¨vÕ6Ø';¼CÀ»K¸MÐ'JÐ$Ùð	ð $×.Ñ.Ð/?Ó@ÒnÐDX×DcÑDcÐdmÓDnÐnrc   Úweb_search_optionsc                 óp   — d|j                  «       vrt        j                  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
        Únovazsweb_search_options passed but model %s is not a Nova model. Nova grounding is only supported on Amazon Nova models.NÚnameÚnova_grounding)Ú
systemTool)Úlowerr	   ÚdebugÚBedrockToolBlock)rX   r½   r¥   s      ra   Ú_map_web_search_optionsz,AmazonConverseConfig._map_web_search_optionsd  sA   € ð$ ˜Ÿ™›Ñ&Ü× Ñ ð FØôð ô  ¨FÐ4DÐ+EÔFÐFrc   Ú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:0re   r£   ÚreasoningConfigÚenabled)r{   ÚmaxReasoningEffort)r©   rª   r«   )rX   rÇ   Úvalid_valuess      ra   Ú/_transform_reasoning_effort_to_reasoning_configzDAmazonConverseConfig._transform_reasoning_effort_to_reasoning_config�  sh   € ò: 8ˆØ <Ñ/Ü×$Ñ$×4Ñ4Ø:Ð;KÐ:Lð M%Ø%1 Nð4à/Ø/ð	 5ó ð ð Ø!Ø&6ñ ð
ð 	
rc   c                 ó”  — d|v r||d<   y| j                  |«      r
d|i}||d<   y| j                  |«      r#| j                  |«      }|j                  |«       yt	        j
                  ||dd¬«      }|€%|j                  d	d«       |j                  d
d«       y||d	<   t	        j                  |d«      r”t        j                  |«      }|€t	        j                  ||d¬«       |j                  d
«      }t        |t        «      si }|j                  d|«       t        ||¬«       |d   }| j                  ||¬«       ||d
<   d|d<   yy)aÅ  
        Handle the reasoning_effort parameter based on the model type.

        - GPT-OSS models: passed through unchanged via additionalModelRequestFields.
        - OpenAI GPT-5.x and GPT-6 models: mapped to ``reasoning.effort`` via additionalModelRequestFields.
        - Nova 2 models: transformed to reasoningConfig.
        - Anthropic models: mapped to ``thinking`` (and ``output_config.effort`` on
          adaptive Claude 4.6 / 4.7).
        úgpt-ossrÇ   ÚeffortÚ	reasoningr¢   re   )rÇ   r¥   rh   r¦   NÚthinkingÚoutput_config)r¥   r`   r¦   ©r¥   rÖ   ©r¥   rÓ   TÚ_output_config_normalized)r·   r¼   rÐ   Úupdater   Ú_map_reasoning_effortÚpopÚ_is_adaptive_thinking_modelr   r   Ú_raise_invalid_reasoning_effortr}   r~   Ú
setdefaultrF   Ú#_validate_anthropic_adaptive_effort)	rX   r¥   rÇ   rs   rÔ   Úreasoning_configÚmapped_thinkingÚmapped_effortÚexisting_output_configs	            ra   Ú"_handle_reasoning_effort_parameterz7AmazonConverseConfig._handle_reasoning_effort_parameter®  sr  € ð ˜ÑØ2BˆOÐ.Ò/Ø×0Ñ0°Ô7ØHPÐRbÐGcˆIØ+4ˆO˜KÒ(Ø×"Ñ" 5Ô)Ø&*×&ZÑ&ZÐ[kÓ&lÐØ×"Ñ"Ð#3Õ4ä%4×%JÑ%JØ!1ØØ$-Ø/ô	&ˆOð Ð&Ø×#Ñ# J°Ô5Ø×#Ñ# O°TÕ:à.=� 
Ñ+Ü"×>Ñ>¸uÀiÔPÜ$L×$PÑ$PÐQaÓ$b�MØ$Ð,Ü'×GÑGØ"'Ø"2Ø);õð
 .=×-@Ñ-@ÀÓ-QÐ*Ü%Ð&<¼dÔCØ13Ð.Ø*×5Ñ5°hÀÔNÜ?Ø#Ø&<õð %;¸8Ñ$D�MØ×<Ñ<À5ÐQ^Ð<Ô_Ø7M�O OÑ4ØCG�OÐ$?Ò@ð' Qrc   rÓ   c                 óØ   — h d£}||vr&t         j                  j                  d|›d�| d¬«      ‚t        j                  | |d¬«      }|�"t         j                  j                  || d¬«      ‚y)	zGValidate ``output_config.effort`` for adaptive-thinking Claude 4.6/4.7.>   rÉ   ÚmaxrË   ÚxhighrÊ   z5Invalid reasoning_effort/output_config.effort value: z=. Must be one of: 'low', 'medium', 'high', 'xhigh', or 'max'.re   r£   r¢   )r¥   rÓ   rh   N)r©   rª   r«   r   Ú_validate_effort_for_model)r¥   rÓ   Úvalid_effortsÚerrors       ra   rà   z8AmazonConverseConfig._validate_anthropic_adaptive_effortá  s“   € ò  IˆØ˜Ñ&Ü×$Ñ$×4Ñ4àKØ�jð !)ð*ð Ø/ð 5ó ð ô  ×:Ñ:ÀÈvÐktÔuˆØÐÜ×$Ñ$×4Ñ4ØØØ/ð 5ó ð ð rc   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   r}   r~   Úintr
   r	   rÄ   )rs   rÕ   Úbudgets      ra   Ú_clamp_thinking_budget_tokensz2AmazonConverseConfig._clamp_thinking_budget_tokens÷  sp   € ð *×-Ñ-¨jÓ9ˆÜ�h¤Ô%Ø$ŸL™L¨Ó9ˆFÜ˜&¤#Ô&¨6Ô4VÒ+VÜ×$Ñ$ØaÜ6Øôô
 -O�˜Ò)ð ,WÐ&ð &rc   c                 óˆ  — ddl m} g d¢}d|v rz|j                  d«       |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 s"| j                  |«      s| j                  |«      r|j                  d«       n”| j                  |«      r|j                  d«       nqd|v s:d|v s6d|v s2d|v s.t        || j                  ¬«      st        || j                  ¬«      r3|j                  d«       |j                  d«       |j                  d	«       |j                  d«      r|j                  d«       |S )Nr   )Úsupports_function_calling)Ú
max_tokensÚmax_completion_tokensÚstreamÚstream_optionsÚstoprS   Útop_pÚextra_headersÚresponse_formatÚrequestMetadataÚservice_tierÚparallel_tool_callsÚarnÚtoolsÚtool_choicerÕ   rÇ   rÖ   r¿   r½   Ú	anthropicÚmistralÚcoherezmeta.llama3-1zmeta.llama3-2zmeta.llama3-3zmeta.llama4úamazon.nova©r¥   rh   rÒ   z
claude-3-7zclaude-sonnet-4zclaude-opus-4zdeepseek.r1Úcontext_management)Úlitellm.utilsrò   r†   rÃ   r@   Úget_base_modelr—   rh   r©   ÚutilsÚsupports_tool_choicer·   r¼   r<   )rX   r¥   rò   Úsupported_paramsÚ
base_models        ra   Úget_supported_openai_paramsz0AmazonConverseConfig.get_supported_openai_params	  sw  € Ý;ò#
Ðð �E‰>Ø×#Ñ# GÔ,Ø×#Ñ# MÔ2Ø×#Ñ# JÔ/Ø×#Ñ#Ð$6Ô7Ø×#Ñ# OÔ4à˜Ÿ™›Ñ&Ø ×'Ñ'Ð(<Ô=Ø#Ð#ô -×;Ñ;¸EÓBˆ
ð ×!Ñ! +Ô.Ø×$Ñ$ YÔ/Ø×$Ñ$ XÔ.Ø×$Ñ$ _Ô5Ø×$Ñ$ _Ô5Ø×$Ñ$ _Ô5Ø×$Ñ$ ]Ô3Ø×$Ñ$ ]Ô3Ù(¨uÈ$×JbÑJbÕcà×#Ñ# GÔ,ð × Ñ  Ô/Ø×#Ñ#Ð$8Ô9ä�=‰=×-Ñ-Ø¨T×-EÑ-Eð .ô 
ä�]‰]×/Ñ/°jÐVZ×VnÑVnÐ/Ôoà×#Ñ# MÔ2ð ˜ÑØ×2Ñ2°5Ô9Ø×2Ñ2°:Ô>à×#Ñ#Ð$6Õ7Ø×"Ñ" 5Ô)ð ×#Ñ#Ð$6Õ7à˜EÑ!Ø  EÑ)Ø %Ñ'Ø Ñ%Ü!ØØ$(×$<Ñ$<õô "¨
È×H`ÑH`Õaà×#Ñ# JÔ/Ø×#Ñ#Ð$6Ô7Ø×#Ñ# OÔ4à× Ñ  Ô-Ø×#Ñ#Ð$8Ô9ØÐrc   r   Údrop_paramsc                 ó´  — |dk(  r<t         j                  du s|du ry t         j                  j                  d|› d�d¬«      ‚|dk(  rt	        i ¬«      S |d	k(  rt	        i ¬
«      S t        |t        «      rAt        t        |j                  di «      j                  dd«      «      ¬«      }t	        |¬«      S t         j                  j                  d|› d�d¬«      ‚)NÚnoneTz$Bedrock doesn't support tool_choice=z<. To drop it from the call, set `litellm.drop_params = True.i�  ©r¤   Ústatus_codeÚrequired)r‰   Úauto©r  ÚfunctionrÀ   Ú ©rÀ   ©Útoolz|. Supported tool_choice values=['auto', 'required', json object]. To drop it from the call, set `litellm.drop_params = True.)
r©   r  r	  ÚUnsupportedParamsErrorÚToolChoiceValuesBlockr}   r~   ÚSpecificToolChoiceBlockr   r   )rX   r¥   r   r  Úspecific_tools        ra   Úmap_tool_choice_valuesz+AmazonConverseConfig.map_tool_choice_values]  sõ   € ð ˜&Ò Ü×"Ñ" dÑ*¨k¸TÑ.AØä—m‘m×:Ñ:ØBÀ;À-ð  PLð  MØ #ð ;ó ð ð ˜JÒ&Ü(¨RÔ0Ð0Ø˜FÒ"Ü(¨bÔ1Ð1Ü˜¤TÔ*ä#:Ü1°+·/±/À*ÈbÓ2Q×2UÑ2UÐV\Ð^`Ó2aÓbô$ˆMô )¨mÔ<Ð<ä—-‘-×6Ñ6Ø>¸{¸mð  LHð  IØð 7ó ð rc   c                 ó
   — g d¢S )N)ÚpngÚjpegÚgifÚwebprf   rg   s    ra   Úget_supported_image_typesz.AmazonConverseConfig.get_supported_image_typesx  s   € Ú-Ð-rc   c                 ó
   — g d¢S )N)	ÚpdfÚcsvÚdocÚdocxÚxlsÚxlsxÚhtmlÚtxtÚmdrf   rg   s    ra   Úget_supported_document_typesz1AmazonConverseConfig.get_supported_document_types{  ó   € ÚPÐPrc   c                 ó
   — g d¢S )N)	Úmp4ÚmovÚmkvÚwebmÚflvÚmpegÚmpgÚwmvÚ3gprf   rg   s    ra   Úget_supported_video_typesz.AmazonConverseConfig.get_supported_video_types~  r1  rc   c                 óf   — | j                  «       | j                  «       z   | j                  «       z   S ©N)r%  r0  r<  rg   s    ra   Úget_all_supported_content_typesz4AmazonConverseConfig.get_all_supported_content_types�  s.   € Ø×-Ñ-Ó/°$×2SÑ2SÓ2UÑUÐX\×XvÑXvÓXxÑxÐxrc   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.Fr{   T)rK   r—   )rX   rÿ   r¥   r  Ú	tool_typeÚcomputer_use_prefixs         ra   Úis_computer_use_tool_usedz.AmazonConverseConfig.is_computer_use_tool_used„  sP   € àˆ=Øàò 	$ˆDØ˜Š~Ø  ™L�	Ü+Eò $Ð'Ø ×+Ñ+Ð,?Õ@Ú#ñ$ð	$ð rc   Ú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.r{   r  FTrH   r  rÀ   Úcomputer)r{   rÀ   Ú
parametersrI   ÚbashrJ   Ústr_replace_editor)r   rK   r—   r~   r†   )	rX   rD  Útransformed_toolsr  rA  Úis_computer_use_toolrB  Útransformed_toolÚfuncs	            ra   Ú_transform_computer_use_toolsz2AmazonConverseConfig._transform_computer_use_tools‘  s  € à/1Ðà&ò  	7ˆDØŸ™ ¨Ó,ˆIð $)Ð Ü'Aò Ð#Ø×'Ñ'Ð(;Õ<Ø+/Ð(Ùðð
 &(ÐÙ#Ø×'Ñ'¨Ô4¸ÀtÑ9Kà 
Ñ+�Dà )Ø $§¡¨°Ó <ñ(ð Ÿ(™( <°Ó4ð(Ñ$ô (,¨D£zÐ$ØÐ%5Ñ5Ø$×/Ñ/°Ô8Ø7=Ð,¨VÒ4Ø&×1Ñ1°.ÔAØ7KÐ,¨VÒ4ô $(¨£:Ð à×$Ñ$Ð%5Õ6ðA 	7ðD !Ð rc   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)
        r{   FT)rK   r—   r†   )	rX   rÿ   r¥   rD  Úregular_toolsr  rA  rK  rB  s	            ra   Ú_separate_computer_use_toolsz1AmazonConverseConfig._separate_computer_use_tools¹  s˜   € ð %'ÐØ!ˆàò 	+ˆDØ˜‰~Ø  ™L�	Ø',Ð$Ü+Eò Ð'Ø ×+Ñ+Ð,?Õ@Ø/3Ð,Ùðñ (Ø&×-Ñ-¨dÕ3à!×(Ñ(¨Õ.à×$Ñ$ TÕ*ð	+ð " =Ð0Ð0rc   Ú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)r{   ÚadditionalPropertiesÚ
properties)rÀ   rG  rS  r  )r{   r  )r,   r   r+   )rX   rR  rS  Ú_input_schemaÚtool_param_function_chunkÚ_tools         ra   Ú*_create_json_tool_call_for_response_formatz?AmazonConverseConfig._create_json_tool_call_for_response_formatÚ  sZ   € ð Ðð !Ø(,Ø ñ‰Mð (ˆMä+OÜ*°}ô,
Ð!ñ Ø7BÐ% mÑ4ä.ØØ.ô
ˆð ˆrc   rh   c                 ó"   — ddl m}  || |¬«      S )am  Check if the Bedrock model supports native structured outputs (outputConfig.textFormat).

        Delegates to the standard ``supports_native_structured_output`` utility
        which looks up the flag in ``litellm.model_cost`` via
        ``_get_model_info_helper``.
        Ref: https://docs.aws.amazon.com/bedrock/latest/userguide/structured-output.html
        r   )Ú!supports_native_structured_outputr  )r  r]  )r¥   rh   r]  s      ra   Ú#_supports_native_structured_outputsz8AmazonConverseConfig._supports_native_structured_outputs  s   € õ 	Dá0°uÐReÔfÐfrc   Ú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.
        r{   rU  rV  FrW  r[   )z$defsÚdefinitions)ÚanyOfÚallOfÚoneOf)r}   r~   r   r[   rP   Ú$_add_additional_properties_to_schemarˆ   )r_  Úresultr�   rž   Údefs_keyr_   r�   s          ra   re  z9AmazonConverseConfig._add_additional_properties_to_schema  s–  € ô ˜&¤$Ô'ØˆMä˜V›ˆà�:‰:�fÓ Ò)Ð.DÈFÑ.RØ-2ˆFÐ)Ñ*ð ˜6Ñ!¤j°¸Ñ1EÄtÔ&Là\bÐcoÑ\p×\vÑ\vÓ\x÷$ÙTXÐTUÐWX�Ô'×LÑLÈQÓOÑOó$ˆF�<Ñ ð �fÑ¤¨F°7©O¼TÔ!BÜ2×WÑWÐX^Ð_fÑXgÓhˆF�7‰OØ0ò 	ˆHØ˜6Ò!¤j°¸Ñ1AÄ4Õ&Hà`fÐgoÑ`p×`vÑ`vÓ`x÷$ÙX\ÐXYÐ[\�AÔ+×PÑPÐQRÓSÑSó$��xÒ ð	ð
 /ò 	xˆCØ�fŠ}¤¨F°3©K¼Õ!>ØkqÐruÑkvÖwÐcgÔ3×XÑXÐY]Õ^Òw��s’ð	xð ˆùó$ùó$ùò
 x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{}r_  rÀ   rS  rR  )Ú
jsonSchema)r{   Ú	structure)Ú
textFormat)rP   re  ÚjsonÚdumpsrh  ÚOutputFormatÚOutputFormatStructure)rR  rÀ   rS  Ú
schema_strÚjson_schema_defs        ra   Ú)_create_output_config_for_response_formatz>AmazonConverseConfig._create_output_config_for_response_format3  s{   € ð2 Ð"Ü.×SÑSÐT_Ó`ˆKØ7BÐ7NœDŸJ™J {Ô3ÐTXˆ
Ø8@À*Ð7MˆØÐØ&*ˆO˜FÑ#ØÐ"Ø-8ˆO˜MÑ*ä Ü#Ø"Ü/¸?ÔKôô
ð 	
rc   Únon_default_paramsc                 óh   — | j                  ||¬«      }d|v r|j                  dd«      du rd|d<   y y y )N©rs   rÿ   zmeta.llama3-3-70b-instruct-v1:0rõ   FTÚfake_stream)Ú_add_tools_to_optional_paramsr   )rX   rÿ   r¥   rt  rs   s        ra   Ú_apply_tool_call_transformationz4AmazonConverseConfig._apply_tool_call_transformation\  sM   € ð ×<Ñ<È_ÐdiÐ<Ójˆà,°Ñ5Ð:L×:PÑ:PÐQYÐ[`Ó:aÐeiÑ:iØ-1ˆO˜MÒ*ð ;jÐ5rc   c           
      óž  — | j                  |«      }|j                  «       D �]&  \  }}|dk(  r&t        |t        «      r| j	                  |||||¬«      }|dk(  s|dk(  r6t        |t
        «      r!| j                  |«      rt        |t        «      n||d<   |dk(  r||d<   |dk(  r't        |t        «      rt        |«      dk(  rŒ |g}||d	<   |d
k(  s|dk(  r"t        j                  ||||||dk(  rdn|¬«       |dk(  r:t        |t        «      r*| j                  t        t        t            |«      |||¬«       |dk(  r| j#                  |||¬«      }|�||d<   |dk(  rdd| dœi|d<   |dk(  rÔ| j%                  |«      sÃt        |t        «      r­|j'                  d«      dk(  r™t        j(                  |d«      sƒ|j'                  d«      xs |j'                  d«      }	t        j*                  d|d¬«      }
|
�t        j,                  |
|	«      nd }|�||d<   nµt.        j0                  j3                  t4        |«       n�||d<   nŠ|dk(  r%t        |t        «      r| j7                  |||¬«       n`|dk(  r.t        |t        «      rt        |«      }t9        ||¬«       ||d<   n-|d k(  r(t        |t        t        f«      r| j;                  ||«       |d!k(  r| j=                  ||«       |d"k(  r"t        |t        «      r| j?                  ||«       |d#k(  s�Œët        |t        «      s�Œý| jA                  ||«      }|€�Œ| jC                  ||g¬$«      }�Œ) d%|vr$| jE                  |«      s| jG                  ||¬&«       | j                  |«      }|rFd|v rB|d   }t        |t        «      r-d'|v sd(|v r%t1        jH                  d)|«       tK        i ¬*«      |d<   |S )+Nrú   )r`   r¥   rs   rt  Úis_thinking_enabledró   rô   rQ   rõ   r÷   r   rR   rS   rø   rT   ©rs   r¥   Úparamr`   r  Ú
output_keyrÿ   )rÿ   r¥   rt  rs   r   )r¥   r   r  rý   r  )r{   Údisable_parallel_tool_useÚ_parallel_tool_use_configrÕ   r{   Úadaptiver¢   rÊ   )rÇ   r¥   rh   rÇ   )r¥   rÇ   rs   rÖ   r×   r  rû   rü   r½   rv  rÒ   )rt  rs   r‰   r  zˆ%s does not support forced tool use (tool_choice='required' or specific tool) when reasoning is enabled. Changing tool_choice to 'auto'.r  )&r{  r[   r}   r~   Ú _translate_response_format_paramrî   rµ   rç   rM   rŠ   r…   r   Ú_apply_sampling_paramrˆ   ry  r   r.   r  r·   r   rÝ   rÛ   Ú!cap_thinking_budget_to_max_tokensr©   r	   Úwarningr   rå   rF   Ú_map_context_management_paramÚ_map_request_metadata_paramÚ_map_service_tier_paramrÆ   rx  r¼   Ú+update_optional_params_with_thinking_tokensÚinfor  )rX   rt  rs   r¥   r  r{  r}  r`   Ú_tool_choice_valueró   Úlegacy_thinkingÚcappedÚmapped_output_configÚgrounding_toolÚfinal_is_thinking_enabledÚtool_choice_blocks                   ra   Úmap_openai_paramsz&AmazonConverseConfig.map_openai_paramsh  sO  € ð &*×%=Ñ%=Ð>PÓ%QÐà.×4Ñ4Ó6ó `	‰LˆE�5ØÐ)Ò)¬j¸ÄÔ.EØ"&×"GÑ"GØØØ$3Ø'9Ø(;ð #Hó #�ð ˜Ò$¨Ð1HÒ(Hô " %¬Ô-°$×2OÑ2OÐPUÔ2Vô ˜ÔCÔDàð   Ñ,ð
 ˜Ò Ø,1� Ñ)Ø˜ŠÜ˜e¤SÔ)Ü˜5“z Q’Ø Ø"˜G�EØ38� Ñ0Ø˜Ò%¨°'Ò)9Ü×5Ñ5Ø$3ØØØØ +Ø).°'Ò)9™v¸uõð ˜Ò¤J¨u´dÔ$;Ø×4Ñ4ÜœtÔ$AÑBÀEÓJØØ'9Ø$3ð	 5ô ð ˜Ò%Ø%)×%@Ñ%@ØØ %Ø +ð &Aó &Ð"ð
 &Ð1Ø5G�O MÑ2ØÐ-Ò-à!¨FÐUZÐQZÑ#[ð@�Ð ;Ñ<ð ˜
Ò"¨4×+NÑ+NÈuÔ+Uä˜u¤dÔ+ØŸ	™	 &Ó)¨ZÒ7Ü+×GÑGÈÈyÔYà!3×!7Ñ!7Ð8OÓ!PÒ!xÐTf×TjÑTjÐkwÓTx�JÜ&5×&KÑ&KØ)1Ø#Ø,5ô'�Oð +Ð6ô (×IÑIÈ/Ð[eÔfà!ð ð
 Ð)Ø6<˜¨
Ò3ä×.Ñ.×6Ñ6Ô7aÐchÕià27�O JÒ/ØÐ,Ò,´¸EÄ3Ô1GØ×7Ñ7Ø°%Èð 8õ ð ˜/Ò)¬j¸ÄÔ.EÜ'+¨E£{Ð$Ü;À%ÐWkÕlØ3G� Ò0ØÐ.Ò.´:¸eÄdÌDÀ\Ô3RØ×2Ñ2°5¸/ÔJØÐ)Ò)Ø×0Ñ0°¸ÔHØ˜Ò&¬:°e¼SÔ+AØ×,Ñ,¨U°OÔDàÐ,Ô,´¸EÄ4Ö1Hð "&×!=Ñ!=¸eÀUÓ!K�Ø!Ò-Ø&*×&HÑ&HØ(7ÀÐ?Oð 'Ió '’Oð}`	ðH ˜EÑ!¨$×*?Ñ*?ÀÔ*FØ×<Ñ<Ø#5Àð =ô ð ,0×+CÑ+CÀOÓ+TÐ!Ù$¨¸/Ñ)IØ'6°}Ñ'EÐÜÐ+¬TÔ2ØÐ-Ñ-°Ð;LÑ1LÜ"×'Ñ'ð cØôô 6KÐPRÔ5S�O MÑ2àÐrc   r`   c                 óX   — |�(t        |t        «      r| j                  |«       ||d<   y y y )Nrû   )r}   r~   r°   )rX   r`   rs   s      ra   r‡  z0AmazonConverseConfig._map_request_metadata_paramç  s2   € ØÐ¤¨E´4Ô!8Ø×+Ñ+¨EÔ2Ø16ˆOÐ-Ò.ð "9Ðrc   c                 óŽ   — t        |t        «      r+t        j                  t	        t
        t        z  |«      «      }n|}|�||d<   y y )Nr  )r}   rˆ   r   Ú*map_openai_context_management_to_anthropicr   r~   )rX   r`   rs   Úmappeds       ra   r†  z2AmazonConverseConfig._map_context_management_paramì  sK   € ô �eœTÔ"Ü$×OÑOÔPTÔUYÔ\`ÑU`ÐbgÓPhÓi‰FàˆFð
 ÐØ4:ˆOÐ0Ò1ð rc   c                 ó.   — |}|dk(  rd}|dv rd|i|d<   yy)zÊMap OpenAI service_tier (string) to Bedrock serviceTier (object).

        OpenAI values: "auto", "default", "flex", "priority"
        Bedrock values: "default", "flex", "priority" (no "auto")
        r  Údefault)r˜  ÚflexÚpriorityr{   rl   Nrf   )rX   r`   rs   Úbedrock_tiers       ra   rˆ  z,AmazonConverseConfig._map_service_tier_paramý  s2   € ð ˆØ�FŠ?Ø$ˆLØÐ:Ñ:Ø.4°lÐ-CˆO˜MÒ*ð ;rc   r{  c                 óT  — 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                  || 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ƒ   r{   NÚresponse_schemarR  r_  rÀ   rS  ©rR  rÀ   rS  ÚoutputConfig)rR  rS  rv  r  r  r  r   rõ   FTrw  Ú	json_mode)r   r^  rh   rs  r[  rx  r©   r	  r
  r  r  r   )rX   r`   r¥   rs   rt  r{  Úignore_response_format_typesrR  rÀ   rS  rÖ   rZ  s               ra   r‚  z5AmazonConverseConfig._translate_response_format_param	  s‘  € ð 06¨hÐ$Ø�‰=Ð8Ñ8Ø"Ð"à#'ˆØˆØ"&ˆØ Ñ%ØÐ 1Ñ2‰KØ˜eÑ#Ø Ñ.¨xÑ8ˆKØ˜Ñ'×+Ñ+¨FÓ3ˆDØ Ñ.×2Ñ2°=ÓAˆKà�U‰?˜u V™}°Ò6Ø"Ð"à×3Ñ3°E¸4×;SÑ;SÔTÐYdÐYpð
 $(×#QÑ#QØ'ØØ'ð $Ró $ˆMð
 /<ˆO˜NÒ+ØÐ$ð  ×JÑJØ'Ø'ð Kó ˆEð #×@Ñ@ÐQ`ÐinÐhoÐ@ÓpˆOô —‘×2Ñ2¸ÐTX×TlÑTlÐ2ÔmÙ+ä1FÜ0Ô6OÔPô2� Ñ.ð "×%Ñ% h°Ó6¸$Ñ>Ø15� Ñ.ð (,ˆ˜Ñ$ØÐrc   c                 ó   — ddl m} | j                  |«       | j                  |«      }| j	                  |«      }|rC|s@|j                  d«      }t        |t        «      r|j                  d«      n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í   NrQ   )Úlitellm.constantsr£  rð   r{  Úis_max_tokens_in_requestr   r}   r~   )rX   rt  rs   r£  r{  r¥  Úthinking_valueÚthinking_token_budgets           ra   r‰  z@AmazonConverseConfig.update_optional_params_with_thinking_tokensN  s”   € õ 	9à×*Ñ*¨?Ô;à%)×%=Ñ%=¸oÓ%NÐØ*.×*GÑ*GÐHZÓ*[Ð ÙÑ'?Ø$3×$7Ñ$7¸
Ó$CˆNä7AÀ.ÔRVÔ7W�×"Ñ" ?Ô3Ð]að "ð %Ð0Ø/DÐGYÑ/Y� Ò,ð 1ð (@Ðrc   Úmessage_blockÚ
block_typeÚsystemc                  ó   — y r>  rf   ©rX   r¨  r©  r¥   s       ra   Úget_cache_point_blockz*AmazonConverseConfig.get_cache_point_blockg  ó   € ð 	rc   Úcontent_blockc                  ó   — y r>  rf   r¬  s       ra   r­  z*AmazonConverseConfig.get_cache_point_blocks  r®  rc   )rª  r¯  c                 óŠ   — |j                  dd «      }|€y | j                  ||«      }|dk(  rt        |¬«      S t        |¬«      S )NÚcache_controlrª  ©Ú
cachePoint)r   Ú_build_cache_point_blockÚSystemContentBlockÚContentBlock)rX   r¨  r©  r¥   r²  Úcache_points         ra   r­  z*AmazonConverseConfig.get_cache_point_block  sO   € ð  -×0Ñ0°À$ÓGˆØÐ Øà!×:Ñ:¸=È%ÓPˆà˜Ò!Ü%°Ô=Ð=ä¨;Ô7Ð7rc   Úcontrolc                 ó|   — t        d¬«      }t        | t        «      rd| v r| d   }|dv r|�t        |«      r||d<   |S )a6  Build a Bedrock ``cachePoint`` block from an OpenAI-style ``cache_control``/``control`` dict.

        ``type`` is always ``"default"`` (the only value Bedrock's Converse API
        accepts). ``ttl`` is only honored for models that support extended TTL
        caching (Claude 4.5 family on Bedrock).
        r˜  ©r{   Úttl)Ú5mÚ1h)ÚCachePointBlockr}   r~   rE   )r¹  r¥   r¸  r¼  s       ra   rµ  z-AmazonConverseConfig._build_cache_point_block“  sN   € ô -°)Ô<ˆÜ�gœtÔ$¨°'Ñ)9Ø  ™ˆCØ�lÑ" uÐ'8Ô=UÐV[Ô=\Ø%(�˜EÑ"ØÐrc   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 )	Nrw   rª  ry   ©rƒ   )r©  r¥   r{   rƒ   r   )Ú	enumerater†   r}   rŠ   r¶  r­  rˆ   r   r…   ÚreversedrÜ   )	rX   rr   r¥   Úsystem_prompt_indicesÚsystem_content_blocksÚidxr¤   Úcache_blockÚms	            ra   Ú_transform_system_messagez.AmazonConverseConfig._transform_system_message¢  s_  € ð (*ÐØACÐÜ% hÓ/ó 	J‰LˆC�Ø�v‰ (Ó*Ø%×,Ñ,¨SÔ1Ü˜g iÑ0´#Ô6¸7À9Ò;MØ)×0Ñ0Ô1CÈÐQZÑI[Ô1\Ô]Ø"&×"<Ñ"<¸WÐQYÐafÐ"<Ó"g�KÚ"Ø-×4Ñ4°[ÕAÜ ¨	Ñ 2´DÕ9Ø$ YÑ/ò J˜ØŸ5™5 ›=¨FÓ2°q·u±u¸Vµ}Ø1×8Ñ8Ô9KÐQRÐSYÑQZÔ9[Ô\Ø*.×*DÑ*DÀQÐS[ÐchÐ*DÓ*i˜KÚ*Ø 5× <Ñ <¸[Õ IòJð	Jô Ð$Ó%¨Ò)ÜÐ 5Ó6ò "�Ø—‘˜SÕ!ð"àÐ.Ð.Ð.rc   Úinference_paramsc                 óH   — d|v r|j                  d«      |d<   t        di |¤ŽS )NÚtop_krU   rf   )rÜ   ÚInferenceConfig)rX   rÊ  s     ra   Ú_transform_inference_paramsz0AmazonConverseConfig._transform_inference_params»  s0   € ØÐ&Ñ&Ø'7×';Ñ';¸GÓ'DÐ˜VÑ$ÜÑ2Ð!1Ñ2Ð2rc   c                 ó  — t        j                  |«      }d }d|v r|j                  d«      }nd|v r|j                  d«      }|�G|j                  d«      ri }t	        j
                  ||d||d¬«       |S |j                  d«      rdd|iiS i S )NrU   rÌ  r  r|  r  ÚinferenceConfig)r@   r  rÜ   r—   r   rƒ  )rX   r¥   rÊ  r  r  Ú	val_top_kÚtop_k_paramss          ra   Ú_handle_top_k_valuez(AmazonConverseConfig._handle_top_k_valueÀ  s­   € Ü,×;Ñ;¸EÓBˆ
àˆ	ØÐ%Ñ%Ø(×,Ñ,¨VÓ4‰IØÐ(Ñ(Ø(×,Ñ,¨WÓ5ˆIàÐ Ø×$Ñ$ [Ô1Ø,.�Ü×5Ñ5Ø$0ØØ!Ø#Ø +Ø&õð $Ð#Ø×$Ñ$ ]Ô3Ø)¨F°IÐ+>Ð?Ð?àˆ	rc   Úadditional_request_paramsÚparallel_tool_use_configc                 ó<  — |j                  «       D ����ci c]j  \  }}|t        | j                  |«      t        «      rCt        |t        «      r3i |¥| |   ¥|j                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}¥n|“Œl }}}}}i | ¥|¥S c c}}w c c}}}}w )Nr{   )r[   r}   r   r~   )rÔ  rÕ  r_   r`   r�   rž   Úmerged_entriess          ra   Ú_merge_parallel_tool_use_configz4AmazonConverseConfig._merge_parallel_tool_use_configÚ  sÃ   € ð 7×<Ñ<Ó>÷!
ñ !
ñ ��Uð ô Ð7×;Ñ;¸CÓ@Ä$ÔGÌJÐW\Ô^bÔLcðØðà/°Ñ4ðð ).¯©«×E¡  1¸¸f»�q˜!‘tÓEñð ñð!
ˆó !
ð ?Ð+Ð>¨~Ð>Ð>ùó Fùõ!
s   –AB
Á)BÁ7BÁ<	B
ÂB
c                 ól   — | j                  d«      }t        |t        «      r|j                  dd«       yy)aØ  Drop ``tool_choice.type`` from the Anthropic passthrough fields.

        Converse rejects a request carrying both ``toolConfig.toolChoice`` and an
        ``additionalModelRequestFields.tool_choice.type``, so once the caller asked for a
        tool choice the type has to come from ``toolChoice`` alone. Sibling keys such as
        ``disable_parallel_tool_use`` have no ``toolConfig`` equivalent and are accepted
        alongside ``toolChoice``, so they stay.
        r   r{   N)r   r}   r~   rÜ   )rÔ  r   s     ra   Ú3_drop_tool_choice_type_conflicting_with_tool_configzHAmazonConverseConfig._drop_tool_choice_type_conflicting_with_tool_configê  s1   € ð 0×3Ñ3°MÓBˆÜ�k¤4Ô(Ø�O‰O˜F DÕ)ð )rc   c                 ó  — t        |j                  dd«      «      }t        |«      }t        |«      }t	        t
        j                  j                  «       «      dgz   }ddg}t	        | j                  «       j                  «       «      }	||z   |	z   }
|j                  dd«       |j                  dd«      }d}t        |t        «      r3t        |«      }|j                  d	d«      }t        |t        «      r|}|sd}|j                  d
d«      }|�| j                  |«       |j                  dd«      }t        j                  |«      }|€…|�ƒ|j                  d«      dk(  ro|j                  d«      r^| j!                  || j"                  «      rB| j%                  |j                  d«      |j                  d«      |j                  d«      ¬«      }n$|€"|� t&        j(                  j+                  d|«       |j-                  «       D ��ci c]  \  }}||
vsŒ||“Œ }}}|j-                  «       D ��ci c]  \  }}||
v sŒ||“Œ }}}|j                  dd«      }|�t/        |«      r| j1                  ||«      }|j                  dd«       |j3                  | j5                  |||«      «       t7        |«      }t        |«      }|�¹t        |t        «      r©t9        |«      r||d<   n˜|j                  d«      r‡t&        j:                  du r;t=        j>                  |d«      s%t&        j(                  j+                  t@        |«       n:|stC        ||¬«       |j                  d«      }|�| jE                  ||¬«       ||d<   ||||fS c c}}w c c}}w )z(Prepare and separate request parameters.rÙ   FrÌ  rÿ   r   r   NrÖ   Úformatrû   rŸ  r{   rR  r  r_  rÀ   rS  rž  u	  Bedrock Converse: dropping `output_config.format` for model=%s â€” model does not advertise `supports_native_structured_output` in model_prices_and_context_window.json. The schema will not be enforced; pass `response_format` to use the synthetic tool-call fallback.r€  rý   Tr¢   r×   rÓ   rØ   )#ÚboolrÜ   r   r   rˆ   rP   Ú__annotations__Úkeysrq   r}   r~   r°   r@   r  r   r—   r^  rh   rs  r©   r	   r…  r[   rA   rØ  rÚ   rÓ  r   rD   r  r   Ú_model_supports_effort_paramr   rF   rà   )rX   rs   r¥   r  Ú*anthropic_output_config_already_normalizedÚcleaned_paramsrÊ  Úsupported_converse_paramsÚsupported_tool_call_paramsÚsupported_config_paramsÚtotal_supported_paramsÚanthropic_output_configÚoutput_config_formatÚcandidate_output_config_formatÚrequest_metadatarÖ   r  r�   rž   rÔ  rÕ  rÓ   s                         ra   Ú_prepare_request_paramsz,AmazonConverseConfig._prepare_request_paramsø  sÈ  € ô 6:¸/×:MÑ:MÐNiÐkpÓ:qÓ5rÐ2ô !>¸oÓ NˆÜ)¨.Ó9ÐÜ+/Ô0D×0TÑ0T×0YÑ0YÓ0[Ó+\Ð`gÐ_hÑ+hÐ!Ø-4°mÐ,DÐ"Ü)-¨d×.DÑ.DÓ.F×.KÑ.KÓ.MÓ)NÐØ(AÐD^Ñ(^ÐaxÑ(xÐØ×Ñ˜[¨$Ô/ð #3×"6Ñ"6°ÈÓ"MÐØ#ÐÜÐ-¬tÔ4Ü&*Ð+BÓ&CÐ#Ø4K×4OÑ4OÐPXÐZ^Ó4_Ð*ÜÐ8¼$Ô?Ø'EÐ$Ù*Ø*.Ð'ð #3×"6Ñ"6Ð7HÈ$Ó"OÐØÐ'Ø×+Ñ+Ð,<Ô=à2B×2FÑ2FÀ~ÐW[Ó2\ˆÜ,×;Ñ;¸EÓBˆ
àÐ!Ø$Ð0Ø$×(Ñ(¨Ó0°MÒAØ×%Ñ% kÔ2Ø×8Ñ8¸À×@XÑ@XÔYà ×JÑJØ0×4Ñ4°XÓ>Ø)×-Ñ-¨fÓ5Ø0×4Ñ4°]ÓCð Kó ‰Mð
 Ð"Ð';Ð'GÜ×"Ñ"×*Ñ*ðð
 ôð 7G×6LÑ6LÓ6N×$r©d¨a°ÐRSÐ[qÒRq Q¨¡TÐ$rÐ!Ñ$rØ-=×-CÑ-CÓ-E×e¡T Q¨ÈÐNdÒId˜A˜q™DÐeÐÑeð +D×*GÑ*GÐHcÐeiÓ*jÐ Ø#Ð/Ô4fÐglÔ4mØ(,×(LÑ(LØ)Ð+Có)Ð%ð 	"×%Ñ%Ð&;¸TÔBð 	"×(Ñ(¨×)AÑ)AÀ%ÐIYÐ[fÓ)gÔhô %;Ð;TÓ$UÐ!ô
 %BÐB[Ó$\Ð!à"Ð.´:Ð>UÔW[Ô3\ô <¸EÔBØ=TÐ)¨/Ò:Ø×&Ñ& {Ô3Ü×&Ñ&¨$Ñ.´×7cÑ7cÐdiÐktÔ7uÜ×*Ñ*×2Ñ2Ü>Øõñ
 FÜCØ"'Ø*Aõð %<×$?Ñ$?ÀÓ$I�FØÐ)Ø×@Ñ@ÀuÐU[Ð@Ô\ØAXÐ-¨oÑ>ð Ø%ØØð	
ð 	
ùó_ %sùÛes   ÈM<ÈM<È+NÈ8NÚoriginal_toolsÚheadersc                 ó(  ‡— 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 s8d‰v s4d	‰v s0d
‰v s,d‰v s(d‰v s$d‰v s 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t        ˆfd„dD «       «      rd}nd}|j                  |«       | j                  |«      }||d<   nt        ||¬«      }|j                  |	«       t        j                  |«      }|j                  d«      ry|j                  d«      }t        |t        «      rB|j                  d«      �1t        j                   |d«      sd d!lm} ||vr|j                  |«       t&        j)                  ||«       |r|j                  d«      r||d"<   ||fS )#z0Process tools and collect anthropic_beta values.rÂ   r{   r  )Útool_search_tool_regex_20251119Útool_search_tool_bm25_20251119r´   zopus-4.7zopus_4.7zopus-4-7Úopus_4_7zopus-4.6zopus_4.6zopus-4-6Úopus_4_6z
sonnet-4.6z
sonnet_4.6z
sonnet-4-6Ú
sonnet_4_6zopus-4.5zopus_4.5zopus-4-5Úopus_4_5zcomputer-use-2025-11-24c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr>  rf   )r€   ÚpatternÚmodel_lowers     €ra   r‚   z?AmazonConverseConfig._process_tools_and_beta.<locals>.<genexpr>²  s   øè ø€ ò àð ˜{Ô*ñùs   ƒ)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  rÖ   rÓ   r¢   r   )ÚANTHROPIC_EFFORT_BETA_HEADERÚanthropic_beta)rB   Úextendr†   r   rC  rQ  r   rÃ   r‰   rN  r@   r  r—   r}   r~   r   rÝ   Úlitellm.types.llms.anthropicrþ  rP   Ú/_filter_context_management_for_bedrock_converse)rX   rì  r¥   rí  rÔ  Úbedrock_toolsÚanthropic_beta_listÚ
user_betasÚfiltered_toolsÚpre_formatted_toolsr  rA  rD  rP  Úcomputer_use_headerÚtransformed_computer_toolsr  rÖ   rþ  r÷  s                      @ra   Ú_process_tools_and_betaz,AmazonConverseConfig._process_tools_and_betal  s”  ø€ ð *,ˆð &(ÐÙÜ ?ÀÓ HˆJØ×&Ñ& zÔ2ð !#ˆØ68ÐÙØ&ò ,�à 4Ñ'Ø'×.Ñ.¨tÔ4ØØ ŸH™H V¨RÓ0�	Øð !ñ ð
 Ø×%Ñ% dÕ+ð,ñ ˜d×<Ñ<¸^ÈUÔSà04×0QÑ0QÐR`ÐbgÓ0hÑ-Ð ô .¨mÀ5ÔIˆMñ "ð
 &+§[¡[£]�à +Ñ-Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0Ø# {Ñ2Ø# {Ñ2Ø# {Ñ2Ø# {Ñ2à +Ñ-Ø! [Ñ0Ø! [Ñ0Ø! [Ñ0à*CÑ'Üó ð$ôô ð2 +DÑ'à*CÐ'à#×*Ñ*Ð+>Ô?à48×4VÑ4VÐWiÓ4jÐ*Ø5OÐ)¨'Ò2ô .¨nÀEÔJˆMð 	×ÑÐ0Ô1ô -×;Ñ;¸EÓBˆ
Ø× Ñ  Ô-Ø#<×#@Ñ#@ÀÓ#QˆMä˜=¬$Ô/Ø!×%Ñ% hÓ/Ð;Ü'×CÑCÀEÈ9ÔUõð 0Ð7JÑJØ'×.Ñ.Ð/KÔLô !×PÑPØ)Ð+>ôñ  :×#8Ñ#8¸Ô#EØ:MÐ%Ð&6Ñ7àÐ1Ð1Ð1rc   r  c                 óö  — ddl m} ddlm} | j	                  d«      }t        |t        «      s| j                  dd«       y|j	                  d«      }t        |t        «      s| j                  dd«       y|D �cg c]*  }t        |t        «      sŒ|j	                  d«      |k(  sŒ)|‘Œ, }}|r7|j                  j                  }||vr|j                  |«       i |¥d|i¥| d<   y| j                  dd«       yc c}w )zLKeep only compact_20260112 edits for Bedrock; add beta header or drop field.r   )ÚCOMPACT_EDIT_TYPE)ÚANTHROPIC_BETA_HEADER_VALUESr  NÚeditsr{   )ÚMlitellm.llms.anthropic.experimental_pass_through.context_management.constantsr  r  r  r   r}   r~   rÜ   rˆ   ÚCOMPACT_2026_01_12r`   r†   )	rÔ  r  r  r  Úcmr  ÚeÚcompact_editsÚcompact_betas	            ra   r  zDAmazonConverseConfig._filter_context_management_for_bedrock_converse÷  sø   € õ	
õ 	Nà-×1Ñ1Ð2FÓGˆÜ˜"œdÔ#Ø%×)Ñ)Ð*>ÀÔEØØ—v‘v˜g“ˆÜ˜%¤Ô&Ø%×)Ñ)Ð*>ÀÔEØà+0Öo a´J¸qÄ$Õ4GÈAÏEÉEÐRXËMÐ]nÓLn¢ÐoˆÐoÙØ">×"QÑ"Q×"WÑ"WˆLØÐ#6Ñ6Ø#×*Ñ*¨<Ô8ð?Øð?à˜ñ?Ð%Ð&:Ò;ð
 &×)Ñ)Ð*>ÀÕEùò  ps   Á9C6ÂC6Â$C6rÅ  Úlitellm_paramsc                 óà  — 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
«       t        j                  ||d¬«       | j                  |||«      \  }}	}
}|j                  dg «      }| j                  ||||	«      \  }}|	j                  dd«      }|r�t        |«      dkD  rs|D ]n  }|j                  d«      dk(  sŒ| j!                  |j                  d«      |«      }|j#                  t%        |¬«      «       |�ddlm} |j+                  |d«        n d}t        |«      dkD  r6|j                  dd«      }t-        |¬«      }|�||d<   | j/                  |	«       d| j1                  |¬«      i}|	r|	|d<   d	|	v rd|d<   |r||d<   | j3                  «       j5                  «       D ]%  \  }}|j                  |d«      }|€Œ |d i |¤Ž||<   Œ' |�||d<   |
�|
|d<   |�||d<   |S )!zX
        Bedrock doesn't support tool calling without `tools=` param specified.
        rÿ   Nre   )rh   zÍBedrock 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Õ   z™Dropping 'thinking' param because the last assistant message with tool_calls has no thinking_blocks. The model won't use extended thinking for this turn.)r¥   rs   rh   Úcache_control_injection_pointsr   ÚlocationÚtool_configr¹  r³  )ÚAnthropicCacheControlHookru   r   )rÿ   Ú
toolChoicerÐ  )rÊ  ÚadditionalModelRequestFields)z/usage/output_tokens_detailsÚ!additionalModelResponseFieldPathsrª  Ú
toolConfigrû   rŸ  rf   )r:   r©   Úmodify_paramsr8   r  r   r;   r9   rÜ   r	   r…  r   Úmaybe_drop_disabled_thinkingrë  r
  r…   rµ  r†   Ú	ToolBlockÚ1litellm.integrations.anthropic_cache_control_hookr  Úrecord_gateway_injectionÚToolConfigBlockrÚ  rÎ  rq   r[   )rX   r¥   rÅ  rs   rr   rí  r  r  rÊ  rÔ  rê  rÖ   rì  r  r  Úcache_injection_pointsÚpointr¸  r  Úbedrock_tool_configÚtool_choice_valuesÚdataÚconfig_nameÚconfig_classÚconfig_values                            ra   Ú_transform_request_helperz.AmazonConverseConfig._transform_request_helper  sð  € ð ˜/Ñ)¨hÐ.BÔG[Ð\dÔGeÜ×$Ò$Ü+9ÐN`Ô+a� Ò(ä×4Ñ4ð lØØ!*ôð ð ×Ñ 
Ó+Ð7ØÐ$ÜEÀhÔOÜ=¸hÔGä×$Ò$Ø×#Ñ# J°Ô5Ü×&Ñ&×.Ñ.ðcôô
 	×7Ñ7ØØ+Ø )õ	
ð ×(Ñ(¨¸%ÀÓMñ	
ØØ%ØØð !1× 4Ñ 4°W¸bÓ Aˆð .2×-IÑ-IØ˜E 7Ð,Eó.
Ñ*ˆÐ*ð
 )B×(EÑ(EÐFfÐhlÓ(mÐÙ!¤c¨-Ó&8¸1Ò&<Ø/ò �Ø—9‘9˜ZÓ(¨MÓ9Ø"&×"?Ñ"?ÀÇ	Á	È)Ó@TÐV[Ó"\�KØ!×(Ñ(¬¸kÔ)JÔKð
 &Ð1õð 2×JÑJÈ>Ð[\Ô]Ùðð  7;ÐÜˆ}Ó Ò!Ø?O×?SÑ?SÐTaÐcgÓ?hÐÜ"1Ø#ô#Ðð "Ð-Ø4FÐ# LÑ1Ø×HÑHÐIbÔcð ˜t×?Ñ?ÐQaÐ?Óbð,
ˆñ %Ø3LˆDÐ/Ñ0ØÐ6Ñ6Ø<]�Ð8Ñ9Ù Ø2ˆD�‰Nð *.×)?Ñ)?Ó)A×)GÑ)GÓ)Iò 	AÑ%ˆK˜Ø+×/Ñ/°¸TÓBˆLØÑ'Ù$0Ñ$@°<Ñ$@��[Ò!ð	Að Ð*Ø!4ˆD�Ñð Ð'Ø&6ˆDÐ"Ñ#àÐ$Ø#0ˆD�Ñ àˆrc   c           
   ƒ   ó   K  — | j                  ||¬«      \  }}| j                  ||«      }| j                  ||||||j                  d«      du |¬«      }t	        j
                  ||d|j                  dd «      ¬«      ƒ d {  –—† }t        ||j                  d«      ¬	«      }	t        «       r|j                  dd «       |	�|	|d<   d
|i|¥}
|
S 7 ŒK­w©Nr´   r  T)r¥   rÅ  rs   rr   rí  r  r  re   Úuser_continue_message)rr   r¥   r¦   r0  rû   )r  Úcaller_metadatarr   )	rÉ  r“   r-  r   r   Ú#_bedrock_converse_messages_pt_asyncrÜ   r    r   ©rX   r¥   rr   rs   r  rí  rÅ  Ú_dataÚbedrock_messagesrê  r)  s              ra   Ú_async_transform_requestz-AmazonConverseConfig._async_transform_request‘  s  è ø€ ð +/×*HÑ*HÈÐY^Ð*HÓ*_Ñ'ˆÐ'ð ×JÑJÈ8ÐUdÓeˆð -1×,JÑ,JØØ"7Ø+ØØØ&×*Ñ*¨=Ó9¸TÐAØ)ð -Kó -
ˆô )I×(lÑ(lØØØ+Ø"0×"4Ñ"4Ð5LÈdÓ"Sô	)
÷ #
Ðô #CØ)¸5¿9¹9ÐEVÓ;Wô#
Ðô -Ô.Ø�I‰IÐ'¨Ô.ØÐ+Ø+;�Ð'Ñ(Ø&0Ð2BÐ%LÀeÐ%Lˆàˆð!#
ús   ‚A>CÂ CÂACc           
      óJ   — t        t        | j                  |||||¬«      «      S )N)r¥   rr   rs   r  rí  )r   r~   Ú_transform_request)rX   r¥   rr   rs   r  rí  s         ra   Útransform_requestz&AmazonConverseConfig.transform_request»  s6   € ô ÜØ×#Ñ#ØØ!Ø /Ø-Øð $ó ó	
ð 		
rc   c           
      óp  — | j                  ||¬«      \  }}| j                  ||«      }| j                  ||||||j                  d«      du |¬«      }t	        ||d|j                  dd «      ¬«      }t        ||j                  d«      ¬	«      }	t        «       r|j                  dd «       |	�|	|d<   d
|i|¥}
|
S r/  )rÉ  r“   r-  r   r   rÜ   r    r   r3  s              ra   r8  z'AmazonConverseConfig._transform_requestÎ  sò   € ð +/×*HÑ*HÈÐY^Ð*HÓ*_Ñ'ˆÐ'ð ×JÑJÈ8ÐUdÓeˆà,0×,JÑ,JØØ"7Ø+ØØØ&×*Ñ*¨=Ó9¸TÐAØ)ð -Kó -
ˆô 7TØØØ+Ø"0×"4Ñ"4Ð5LÈdÓ"Sô	7
Ðô #CØ)¸5¿9¹9ÐEVÓ;Wô#
Ðô -Ô.Ø�I‰IÐ'¨Ô.ØÐ+Ø+;�Ð'Ñ(Ø&0Ð2BÐ%LÀeÐ%Lˆàˆrc   Úraw_responseÚmodel_responseÚlogging_objÚrequest_dataÚencodingztiktoken.Encoding | NoneÚapi_keyr   c                 óX   — | j                  ||||j                  dd«      |||
|||	¬«
      S )Nrõ   F)
r¥   Úresponser<  rõ   r=  rs   r@  r)  rr   r?  )Ú_transform_responser   )rX   r¥   r;  r<  r=  r>  rr   rs   r  r?  r@  r   s               ra   Útransform_responsez'AmazonConverseConfig.transform_responseø  sG   € ð ×'Ñ'ØØ!Ø)Ø"×&Ñ& x°Ó7Ø#Ø+ØØØØð (ó 
ð 	
rc   Ú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ƒ   rf   )rX   rE  Úreasoning_content_strÚblocks       ra   Ú_transform_reasoning_contentz1AmazonConverseConfig._transform_reasoning_content  s@   € ð !#ÐØ-ò 	HˆEØ %Ò'Ø%¨¨Ñ)?ÀÑ)GÑGÑ%ð	Hð %Ð$rc   Ú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.rG  rÕ   r»  rƒ   Ú	signatureÚredactedContentÚredacted_thinking)r{   r)  )r(   r   r†   r%   )rX   rK  Úthinking_blocks_listrI  Ú_thinking_blockÚ_textÚ
_signatureÚ_redacted_blocks           ra   Ú_transform_thinking_blocksz/AmazonConverseConfig._transform_thinking_blocks  sº   € ð prÐØ$ò 	=ˆEØ %Ñ'Ü"=À:Ô"N�Ø˜oÑ.×2Ñ2°6Ó:�Ø" ?Ñ3×7Ñ7¸ÓD�
ØÐ$Ø27�O JÑ/ØÐ)Ø3=�O KÑ0Ø$×+Ñ+¨OÕ<Ø" eÒ+Ü"EØ,°5Ð9JÑ3Kô#�ð %×+Ñ+¨OÕ<ð	=ð $Ð#rc   Úusagez CacheCreationTokenDetails | Nonec                 ó¾   — | j                  d«      }|syt        d„ |D «       «      }t        d„ |D «       «      }||z   | j                  dd«      k7  ryt        ||¬«      S )aA  Split ``cacheDetails`` into 5m/1h buckets, or ``None`` unless the split fully
        accounts for ``cacheWriteInputTokens``, since a partial or unrecognized-ttl
        breakdown would understate the cache-write cost.

        https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_CacheDetail.html
        ÚcacheDetailsNc              3   óP   K  — | ]  }|j                  d «      dk(  sŒ|d   –— Œ  y­w)r¼  r½  ÚinputTokensN©r   ©r€   Úds     ra   r‚   z<AmazonConverseConfig._parse_cache_details.<locals>.<genexpr>@  ó&   è ø€ Ò_°AÈ!Ï%É%ÐPUË,ÐZ^ÓJ^˜q Õ/Ñ_ùó   ‚&œ
&c              3   óP   K  — | ]  }|j                  d «      dk(  sŒ|d   –— Œ  y­w)r¼  r¾  rZ  Nr[  r\  s     ra   r‚   z<AmazonConverseConfig._parse_cache_details.<locals>.<genexpr>A  r^  r_  ÚcacheWriteInputTokensr   )Úephemeral_5m_input_tokensÚephemeral_1h_input_tokens)r   Úsumr0   )rV  Úcache_detailsÚ	tokens_5mÚ	tokens_1hs       ra   Ú_parse_cache_detailsz)AmazonConverseConfig._parse_cache_details5  sg   € ð  %Ÿy™y¨Ó8ˆÙØÜÑ_¸Ô_Ó_ˆ	ÜÑ_¸Ô_Ó_ˆ	Ø�yÑ  E§I¡IÐ.EÀqÓ$IÒIØÜ(Ø&/Ø&/ô
ð 	
rc   Úadditional_fieldsc                 ó’   — t        | t        «      sy| j                  d«      }t        |t        «      syt        j                  |«      S )z©Converse omits thinking tokens from its usage block; they only arrive under
        ``additionalModelResponseFields`` when ``/usage/output_tokens_details`` is requested.NrV  )r}   r   r   r   Úthinking_tokens_from_usage)ri  rV  s     ra   Ú&thinking_tokens_from_additional_fieldsz;AmazonConverseConfig.thinking_tokens_from_additional_fieldsI  s@   € ô Ð+¬WÔ5ØØ(×,Ñ,¨WÓ5ˆÜ˜%¤Ô)ØÜ×9Ñ9¸%Ó@Ð@rc   Úusage_objectc                 ó   — d| v xs d| v S )zQConverse-family models report camelCase token counts, not Anthropic's snake_case.rZ  ÚoutputTokensrf   )rm  s    ra   Úis_converse_usage_shapez,AmazonConverseConfig.is_converse_usage_shapeT  s   € ð  Ð,ÒN°À,Ð0NÐNrc   rß  c                 óœ   — |D ]G  }| j                  |«      }t        |t        t        f«      sŒ+t        |t        «      rŒ<t        |«      c S  y)Nr   )r   r}   rî   ÚfloatrÝ  )rm  rß  r_   r`   s       ra   Ú_usage_countz!AmazonConverseConfig._usage_countY  sG   € àò 	"ˆCØ ×$Ñ$ SÓ)ˆEÜ˜%¤#¤u Õ.´zÀ%ÌÕ7NÜ˜5“zÒ!ð	"ð rc   c                 ó  — | j                  |d«      }| j                  |d«      }| j                  |dd«      }| j                  |dd«      }| j                  t        ||| j                  |d«      xs ||z   ||||¬«      «      S )	a!  Read a Converse-shaped usage block out of a batch output line.

        Batch output omits fields the live API always sends, so the block is
        completed before going through the same transform, keeping a batch and an
        equivalent non-batch call in agreement on tokens.
        rZ  ro  ÚcacheReadInputTokensÚcacheReadInputTokenCountra  ÚcacheWriteInputTokenCountÚtotalTokens)rZ  ro  rx  rv  ru  rw  ra  )rs  Útransform_usageÚConverseTokenUsageBlock)rX   rm  Úinput_tokensÚoutput_tokensÚ
cache_readÚcache_writes         ra   Úusage_from_batch_outputz,AmazonConverseConfig.usage_from_batch_outputa  sœ   € ð #×/Ñ/°¸mÓLˆØ#×0Ñ0°¸~ÓNˆØ ×-Ñ-¨lÐ<RÐTnÓoˆ
Ø!×.Ñ.¨|Ð=TÐVqÓrˆØ×#Ñ#Ü#Ø(Ø*Ø ×-Ñ-¨l¸MÓJÒjÈlÐ]jÑNjØ)3Ø%/Ø*5Ø&1ôó

ð 
	
rc   Úreasoning_contentÚthinking_ranÚprovider_reasoning_tokensc           	      ór  — |d   }|d   }|d   }d}d}	|}
d|v r
|d   }	||	z  }d|v r
|d   }||z  }t        |	|| j                  |«      |
¬«      }|rt        |d¬	«      nd}|�t        t	        d|«      |«      n|}|dkD  rt        |||z
  ¬
«      nt        |rd nd|rd n|¬
«      }t        ||||||	|¬«      }|S )NrZ  ro  rx  r   ru  ra  )Úcached_tokensÚcache_creation_tokensÚcache_creation_token_detailsÚtext_tokensT)rƒ   Úcount_response_tokens)Úreasoning_tokensr‡  )Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚprompt_tokens_detailsÚcache_creation_input_tokensÚcache_read_input_tokensÚcompletion_tokens_details)r6   rh  r=   Úminrç   r2   r7   )rX   rV  r€  r�  r‚  r{  r|  rŒ  rŽ  r�  Úraw_input_tokensr�  Úestimated_reasoning_tokensr‰  r�  Úopenai_usages                   ra   ry  z$AmazonConverseConfig.transform_usagex  s7  € ð ˜]Ñ+ˆØ$ ^Ñ4ˆØ# MÑ2ˆØ+,Ð#Ø'(Ðà".ÐØ! UÑ*Ø&+Ð,BÑ&CÐ#ØÐ3Ñ3ˆLØ" eÑ+Ø*/Ð0GÑ*HÐ'ØÐ7Ñ7ˆLä'AØ1Ø"=Ø)-×)BÑ)BÀ5Ó)IØ(ô	(
Ðñ RcŒMÐ0ÈÕMÐhið 	#ð
 )Ð4ô ”�AÐ0Ó1°=ÔAà+ð 	ð   !Ò#ô	 +Ø!1Ø)Ð,<Ñ<õô
 0Ù)5¡¸1Ù$0™D°môð 	"ô $Ø&Ø+Ø%Ø"7Ø(CØ$;Ø&?ô
ˆð Ðrc   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~   r}   rŠ   Úaddrˆ   )rX   rÿ   Útool_setr  Ú	tool_specr  Ú_names          ra   Úget_tool_call_namesz(AmazonConverseConfig.get_tool_call_names±  s¼   € ð ˆ=ØˆIÜ$'£EˆØò 
	(ˆDØŸ™ Ó,ˆIØ—x‘x 
Ó+ˆHØÐ$ÜœT 9Ó-×1Ñ1°&Ó9�ØÐ$¬°E¼3Ô)?Ø—L‘L Ô'ØÑ#ÜœT 8Ó,×0Ñ0°Ó8�ØÑ$¬°E¼3Õ)?Ø—L‘L Õ'ð
	(ô �H‹~Ðrc   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_callsrf   )	ry   rœ  rm  Úloadsr   r1   r3   rŸ  Ú	Exception)rX   r¤   rÿ   r�  Úreturned_finish_reasonÚtool_call_namesÚjson_contentrŸ  s           ra   Ú(apply_tool_call_transformation_if_neededz=AmazonConverseConfig.apply_tool_call_transformation_if_neededÅ  s×   € ð "7ÐØˆ=ØÐ2Ð2Ð2à�?‰?Ð&ð
Ø)-×)AÑ)AÀ%Ó)H�Ü&*§j¡j°·±Ó&A�Ø×#Ñ# FÓ+¨zÒ9¸l×>NÑ>NÈvÓ>VÐZiÑ>iÜ)FÔPXÑPhÐ[gÑPhÔ)iÐ(j�Jà)3�GÔ&Ø&*�G”OØ-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  )Úidr{   r  ÚindexrÁ  )rG  ÚreasoningContentÚcitationsContent)
rÂ  r   rC   r*   rm  rn  r)   r†   Ú$BedrockConverseReasoningContentBlockÚ!BedrockConverseReasoningTextBlock)rX   r¦  Úcontent_strrÿ   ÚreasoningContentBlocksÚcitationsContentBlocksrÆ  ry   Úextracted_reasoning_content_strÚ_content_strÚ_response_tool_namer©  Ú_function_chunkÚ_tool_response_chunks                 ra   Ú_translate_message_contentz/AmazonConverseConfig._translate_message_contentå  s†  € ð" ˆØ:<ˆØTXÐØEIÐÜ% nÓ5ò .	K‰LˆC�ðð ;?Ð+Ø˜Ñ ô 1°¸±ÓAñØ3Ø àÐ+Ø <Ñ/�KØ˜GÑ#à&-¨iÑ&8¸Ñ&@Ð#Ü%:ÐNaÔ%bÐ"Ü"EØ+Ü"Ÿj™j¨°Ñ);¸GÑ)DÓEô#�ô
 (CØ˜yÑ)¨+Ñ6Ø#Ø,Øô	(Ð$ð —‘Ð1Ô2Ø.Ð:Ø)Ð1Ø-/Ð*Ø&×-Ñ-Ü8Ü&GØ!@ô'ôôð " WÑ,Ø)Ð1Ø-/Ð*Ø&×-Ñ-¨gÐ6HÑ.IÔJà! WÒ,Ø)Ð1Ø-/Ð*Ø&×-Ñ-¨gÐ6HÑ.IÕJð].	Kð` ˜EÐ#9Ð;QÐQÐQrc   Úcitations_content_blocksc                 óª  — | syg }g }d}| D �]¨  }d}|j                  d«      }t        |t        «      r?|D ]:  }t        |t        «      sŒ|j                  d«      }t        |t        «      sŒ6||z  }Œ< |}	|r|j                  |«       |t        |«      z  }|j                  d«      }
t        |
t        «      sŒ«|
D ]ù  }t        |t        «      sŒ|j                  d«      }t        |t        «      sŒ6|j                  d«      }t        |t        «      sŒX|j                  d	«      }|j                  d
«      }t        |t        «      rt        |t        «      sŒ›|j                  t        d|	|z   |	|z   t	        |j                  d«      xs d«      t	        |j                  d«      xs d«      dœ¬«      «       Œû �Œ« |rdj                  |«      nd}||xs dfS )zï
        Convert Bedrock citationsContent blocks into OpenAI-style annotations.

        Returns:
            citations_text: concatenated text from citationsContent.content
            annotations: OpenAI URL citation annotations
        ©NNr   r  ry   rƒ   Ú	citationsr  ÚsearchResultLocationÚstartÚendÚurl_citationÚtitleÚsource)Ústart_indexÚ	end_indexrÄ  Úurl)r{   rÃ  N)
r   r}   rˆ   r~   rŠ   r†   r…   rî   r#   Újoin)r¼  ÚannotationsÚcitations_text_partsÚcontent_offsetÚcitations_blockÚ
block_textÚraw_contentÚcontent_partrR  Úblock_offsetÚraw_citationsÚcitationr  Úsearch_locationrÁ  rÂ  Úcitations_texts                    ra   Ú#_transform_citations_to_annotationsz8AmazonConverseConfig._transform_citations_to_annotations,  sÔ  € ñ (Øà=?ˆØ13ÐØˆà7ó .	ˆOØˆJØ)×-Ñ-¨iÓ8ˆKÜ˜+¤tÔ,Ø$/ò 0�LÜ! ,´Õ5Ø ,× 0Ñ 0°Ó 8˜Ü% e¬SÕ1Ø&¨%Ñ/™Jð	0ð *ˆLÙØ$×+Ñ+¨JÔ7Ø¤# j£/Ñ1�à+×/Ñ/°Ó<ˆMÜ˜m¬TÔ2Øà)ò �Ü! (¬DÔ1Øà#Ÿ<™<¨
Ó3�Ü! (¬DÔ1Øà"*§,¡,Ð/EÓ"F�Ü! /´4Ô8Øà'×+Ñ+¨GÓ4�Ø%×)Ñ)¨%Ó0�Ü! %¬Ô-´ZÀÄSÔ5IØà×"Ñ"Ü,Ø+à+7¸%Ñ+?Ø)5¸Ñ);Ü%(¨¯©°gÓ)>Ò)DÀ"Ó%EÜ#& x§|¡|°HÓ'=Ò'CÀÓ#Dñ	&ôõ
ò#ð'.	ñ` BV §¡Ð(<Ô =Ð[_ˆØ˜{Ò2¨dÐ2Ð2rc   Ú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
        rW  ru   )rm  r   r}   r~   r…   rn  ÚJSONDecodeError)r×  Úresponse_datas     ra   Ú_unwrap_bedrock_propertiesz/AmazonConverseConfig._unwrap_bedrock_propertiesq  st   € ð	Ü ŸJ™J xÓ0ˆMÜ˜-¬Ô.°<À=Ñ3PÔUXÐYfÓUgÐklÒUlØ -¨lÑ ;�Ü—z‘z -Ó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(  sŒ"|‘Œ% }}}|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   r«  ry   r  )rÂ  r   r   r…   r	   rÄ   rP   rÛ  )r   rÿ   rÜ  rŒ   ÚtÚjson_tool_indicesÚjson_mode_content_strÚ	first_idxÚjson_mode_argsÚexistingÚ
real_toolss              ra   Ú_filter_json_mode_toolsz,AmazonConverseConfig._filter_json_mode_toolsˆ  sW  € ñ ¡Ù!�5Ð+ tÐ+ä+4°UÓ+;×v¡4 1 a¸qÀ¹}×?PÑ?PÐQWÓ?XÔ\uÓ?ušQÐvÐÑvá àˆLäÐ Ó!¤S¨£ZÒ/ä× Ñ Ð!YÔZØ05°a±¸Ñ0D×0HÑ0HÈÓ0UÐ!Ø$Ð0Ü(<×(WÑ(WÐXmÓ(nÐ%Ø5JÐ'¨	Ñ2Øð
 -¨QÑ/ˆ	Ø˜yÑ)¨*Ñ5×9Ñ9¸+ÓFˆØÐ%Ü1×LÑLÈ^Ó\ˆNØ5×9Ñ9¸)ÓDÒJÈˆHÙNV°¸NÒ1JÐ\jÐ# IÑ.ä+4°UÓ+;×Z¡4 1 a¸qÐHYÒ?YšQÐZˆ
ÑZÙ'ˆzÐ1¨TÐ1ùó5 wùó2 [s   ™#D$½D$Ä
D*ÄD*rB  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}|r0|j                  «       }|s|}d}nt        d„ |D «       «      s||z   }d}|r|r||d<   |�(| j                  |«      |d<   | j                  |«      |d<   ||d<   | j                  |||¬«      }|r||d<   | j                  |d   |j                  d«      |d u| j                  |j                  d«      «      ¬«      }t!        d&i |¤Ž}t#        |d   «      }|r|s|rd}| j%                  ||j                  d«      |¬«      \  }}t'        j(                  |d |¬!«      g|_        t-        t/        j.                  «       «      |_        ||_        t5        |d|«       d"|v rt5        |d"|d"   «       d#|v r)|d#   }t7        |t8        «      rd$|v rt5        |d%|d$   «       |S # t
        $ r}t        d|› d�d¬«      ‚d }~ww xY w)'NÚcomplete_input_dict)rª  r@  Úoriginal_responseÚadditional_argsr   z)Error converting to valid response block=zL. File an issue if litellm error - https://github.com/BerriAI/litellm/issuesi¦  r  Úoutputr¤   rw   Ú	assistantr  ry   r´  r°  Úprovider_specific_fieldsFTc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr>  )Úisalnum)r€   Úchars     ra   r‚   z;AmazonConverseConfig._transform_response.<locals>.<genexpr>	  s   è ø€ ÒE¨D˜Ÿ™ŸÑEùs   ‚rÊ  r€  rK  )r   rÿ   rÜ  rŸ  rV  ÚadditionalModelResponseFields)r€  r�  r‚  Ú
stopReasonr÷   rÿ   )r¤   rÿ   r�  r   )Úfinish_reasonr®  r¤   Útracerl   r{   rü   rf   )Ú	post_callrƒ   r   ÚConverseResponseBlockrm  r¡  r?   r»  rÖ  Ústripr‰   rJ  rU  rå  ry  rl  r4   r   r¥  r©   ÚChoicesÚchoicesrî   ÚtimeÚcreatedr¥   r\   r}   r~   ) rX   r¥   rB  r<  rõ   r=  rs   r@  r)  rr   r?  r   Úcompletion_responser  r¤   rÜ  r³  rÿ   r´  rµ  rì  rÕ  rÊ  Úcitations_included_in_contentÚstripped_contentr  rV  Ú_messager�  Úreturned_messager¢  Úservice_tier_blocks                                    ra   rC  z(AmazonConverseConfig._transform_responseµ  ss  € ð Ð"Ø×!Ñ!ØØØ"*§-¡-Ø!6¸Ð =ð	 "ô ð )8×(;Ñ(;¸KÈÓ(Nˆ	ð	Ü)>Ñ)QÀÇÁÃÑ)QÐð"	ðF /BÀ(Ñ.KÈIÑ.VˆØIOÐQ\ÐH]ÐØˆØ35ˆØTXÐØEIÐàÐð ×/Ñ/°¸	Ñ0BÓCñØØØ&Ø&ð 13Ð Ø!Ð-ØAWÐ$Ð%=Ñ>Ø!Ð-Ø;QÐ$Ð%7Ñ8á#ØBZÐ#Ð$>Ñ?à&*×&NÑ&NÐOeÓ&fÑ#ˆ˜Ø(-Ð%ÙØ&1×&7Ñ&7Ó&9ÐÙ#Ø,�Ø04Ñ-ÜÑEÐ4DÔEÔEð -¨{Ñ:�Ø04Ð-ÙÑ8Ø5@Ð# MÑ2à!Ð-Ø;?×;\Ñ;\Ð]sÓ;tÐ#Ð$7Ñ8Ø9=×9XÑ9XÐYoÓ9pÐ#Ð$5Ñ6Ø-8Ð 	Ñ*Ø $× <Ñ <ØØØ$;ð !=ó !
ˆñ
 Ø4BÐ# LÑ1ð ×+Ñ+Ø Ñ(Ø5×9Ñ9Ð:MÓNØ/°tÐ;Ø&*×&QÑ&QØ#×'Ñ'Ð(GÓHó'ð	 ,ó 
ˆô "Ñ<Ð$;Ñ<ˆÜ 1Ð2EÀlÑ2SÓ TÐñ
 ™^±Ø$*Ð!ð
 ×9Ñ9ØØ!×%Ñ% gÓ.Ø"7ð :ó 
ñ	
ØØ"ô �O‰OØ4ØØ(ôð"
ˆÔô "%¤T§Y¡Y£[Ó!1ˆÔØ$ˆÔä� ¨Ô/ð Ð)Ñ)Ü�N GÐ-@ÀÑ-IÔJð Ð/Ñ/Ø(;¸MÑ(JÐÜÐ,¬dÔ3¸ÐBTÑ8TÜ˜¨Ð8JÈ6Ñ8RÔSàÐøôc ò 	ÜØCÀAÀ3ð  GSð  TØôð ûð	ús   ·I É	I6É I1É1I6Úerror_messager  c                 ó   — t        |||¬«      S )N)r¤   r  rí  )r?   )rX   r  r  rí  s       ra   Úget_error_classz$AmazonConverseConfig.get_error_classb	  s   € ÜØ!Ø#Øô
ð 	
rc   Úapi_basec                 óN   — |rd|› �|d<   t        |«      \  }}	t        |d|	|«      S )NzBearer ÚAuthorizationrf   )r   r   )
rX   rí  r¥   rr   rs   r  r@  r  Úowned_namesÚmetadata_headerss
             ra   Úvalidate_environmentz)AmazonConverseConfig.validate_environmenti	  s:   € ñ Ø)0°°	Ð':ˆG�OÑ$Ü(HÈÓ(XÑ%ˆÐ%Ü+¨G°RÐ9IÈ;ÓWÐWrc   rw  c                 ó$   — |du ry|du r|�d|v ryy)zG
        Returns True if the model/provider should fake stream
        TÚai21Frf   )rX   r¥   rõ   rh   rw  s        ra   Úshould_fake_streamz'AmazonConverseConfig.should_fake_streamx	  s-   € ð ˜$ÑØð
 �T‰>ØÐ ð ˜U‘?ØØrc   )NNNNNr¾  r>  )NNN)F)NNFN)NFN)wÚ__name__Ú
__module__Ú__qualname__Ú__doc__rî   rÞ  rˆ   rŠ   rb   Úpropertyrh   r›   r~   rq   rœ   r"   r“   rŸ   r°   rÝ  rµ   r·   r¼   rÅ   rÆ   rÐ   rå   rà   rð   r  r  r  r%  r0  r<  r?  r.   rC  rN  ÚtuplerQ  r+   r[  r^  re  rs  ry  r’  ÚAnyr‡  r†  rˆ  r‚  r‰  r   r/   r-   r'   r$   r   r¶  r­  r·  r¿  rµ  rÉ  rÍ  rÎ  rÓ  rØ  rÚ  rh  rë  r!  r
  r  r   rU  ÚCommonRequestObjectr-  ÚRequestObjectr6  r9  r8  ÚhttpxÚResponser5   r   rD  r±  rJ  r(   r%   rU  rz  rh  rl  rp  rs  r7   r  ry  rœ  r4   r¥  r)   ÚCitationsContentBlockr»  r#   rÖ  rÛ  r&   rå  rC  ÚHeadersr   r  r	  r  rf   rc   ra   rP   rP   w   s¶  … ñð
 �T‰zÓØ˜‘9˜tÑ#Ó#Ø�t‘ÓØ
�‰*ÓØ
�‰*Óð !%Ø*.Ø"&ØØñ4à˜‘:ð4ð ˜C‘y 4Ñ'ð4ð ˜4‘Zð	4ð
 �D‰jð4ð �D‰jð4ð 
ó4ð ð" S¨4¡Zò "ó ð"ð ð
 $ò 
ó ð
ð ð1ØÐ'Ñ(ð1Ø;?ð1à	ÐÑ	ò1ó ð1ðf ñ
ó ð
ð"E°4ð E¸Dó EðN ðJ¨ð J°ò Jó ðJð ð?¨cð ?°dò ?ó ð?ð1o cð 1o¨dó 1oðfG¸$ð GÀsð GÐO_ÐbfÑOfó Gð:+
ÐPSð +
ÐX\ó +
ðZ1H¸ð 1HÈsð 1HÐeið 1HÐnró 1Hðf ð°3ð Àð Èò ó ðð* ðO°tð OÀò Oó ðOð"R °ð R ¸¸c¹ó R ðhØðØ'*¨T¡zðØ@Dðà	 Ñ	%óð6.¨4°©9ó .ðQ¨d°3©ió QðQ¨4°©9ó Qðy°°c±ó yð¨tÐ4QÑ/RÐUYÑ/Yð Ðbeð Ðjnó ð&!ÀÐEbÑ@cð &!ÐhlÐmqÑhró &!ðP1ØÐ7Ñ8ð1ØADð1à	ˆtÐ1Ñ2°DÐ9VÑ4WÐWÑ	Xó1ðF $(Ø"&ñ&à˜D‘[ð&ð ˜4‘Zð&ð 
!ó	&ðP ñ
g°3ð 
gÈSÐSWÉZð 
gÐcgò 
gó ð
gð ð!°Tð !¸dò !ó ð!ðF à#'ØØ"&ñ&
Ø˜D‘[ð&
à�D‰jð&
ð ˜4‘Zð&
ð 
ò	&
ó ð&
ðP
2àÐ1Ñ2ð
2ð ð
2ð !ð	
2ð
 ó
2ð}à ð}ð ð}ð ð	}ð
 ð}ð 
ó}ð~7°ð 7Àtð 7ÐPTó 7ð
;°4¸$±;ð ;ÐQUð ;ÐZ^ó ;ð"
D¨Sð 
DÀ4ð 
DÈDó 
DðCàðCð ðCð ð	Cð
 !ðCð "ðCð 
óCðJZÈdð ZÐeió Zð2 ð !ñ	à4Ø
#ñ$à
%ñ&ð )ñ)ð	ð ˜HÑ%ð	ð �T‰zð	ð 
˜dÑ	"ò	ó ð	ð ð !ñ	à4Ø
#ñ$à
%ñ&ð )ñ)ð	ð ˜OÑ,ð	ð �T‰zð	ð 
˜Ñ	ò	ó ð	ð$ !ñ8à4Ø
#ñ$à
%ñ&ð )ñ)ð8ð Ð5Ñ6ð8ð �T‰zð8ð 
˜lÑ	*¨TÑ	1ó8ð( ñ¨$°©+ð ¸cÀD¹jð ÐTcò ó ðð EIñ/ØÐ-Ñ.ð/Ø7:¸T±zð/à	ˆtÐ$Ñ% tÐ,>Ñ'?Ð?Ñ	@ó/ð23¸Dð 3À_ó 3ñ
¨ð Àð ÐSWð Ðdhó ð4 ð?À4ð ?Ðcgð ?Ðlpò ?ó ð?ð ð*ÐW[ð *Ð`dò *ó ð*ð FKñr
Ø#ðr
Ø,/ðr
Ø>Bðr
à	ˆt�T˜4Ð!2°TÑ!9Ð9Ñ	:ór
ðhI2àðI2ð ðI2ð ˜‘ð	I2ð
 $(ðI2ð 
ˆt�I‰ Ð$Ñ	%óI2ðV ðFØ#'ðFà!ðFð 
òFó ðFðH 37Ø#Ø!Ø6:ñxàðxð  $Ð$6Ñ7ðxð ð	xð
 Ð'Ñ(¨4Ñ/ðxð ˜‘ðxð ðxð    V Ñ,¨tÑ3ðxð 
óxð@  $ñ(àð(ð Ð'Ñ(ð(ð ð	(ð
 ð(ð ˜‘ð(ð 
ó(ðT
àð
ð Ð'Ñ(ð
ð ð	
ð
 ð
ð ð
ð 
ó
ð2  $ñ(àð(ð Ð'Ñ(ð(ð ð	(ð
 ð(ð ˜‘ð(ð 
ó(ðj #Ø!%ñ
àð
ð —n‘nð
ð &ð	
ð
 ð
ð ð
ð Ð'Ñ(ð
ð ð
ð ð
ð -ð
ð �t‘ð
ð ˜$‘;ð
ð 
ó
ð6
%ÀTÐJnÑEoð 
%Ðtwó 
%ð$Ø#Ð$HÑIð$à	Ð)Ð,OÑOÑ	Pó$ð, ð
Ð$;ð 
Ð@bò 
ó ð
ð& ðAÀ&ð AÈSÐSWÉZò Aó ðAð ðO¨g°c¸6°kÑ.Bð OÀtò Oó ðOð ð 7¨3°¨;Ñ#7ð Àð Èò ó ðð
°G¸CÀ¸KÑ4Hð 
ÈUó 
ð4 )-Ø"Ø04ñ7à&ð7ð  ™:ð7ð ð	7ð
 $'¨¡:ð7ð 
ó7ðv OSñà�I‰ Ð&CÑ!DÑDÀtÑKðð 
ˆc‰óð. )-Ø,0ñ	/àð/ð �I‰ Ñ%ð/ð  # T™zð	/ð
 
ˆw˜˜d™
Ð"Ñ	#ó/ð@ERØ" <Ñ0ðERà	ØØÐ(Ñ)ØÐ1Ñ2°TÑ9ØÐ"Ñ# dÑ*ð	,ñ
óERðN ðB3Ø"&Ð'<Ñ"=ÀÑ"DðB3à	ˆs�T‰z˜4Ð 8Ñ9¸DÑ@Ð@Ñ	AòB3ó ðB3ðH ð¨Sð °Sò ó ðð, ð*2Ø˜$‘;ð*2àÐ/Ñ0ð*2ð "?ð*2ð 
Ð)Ñ	*¨TÑ	1ò	*2ó ð*2ðXkàðkð —.‘.ðkð &ð	kð
 ðkð ˜t‘^ðkð ðkð �t‘ðkð �S‰jðkð ðkð 
ókðZ
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvó 
ð #Ø#ñXàðXð ðXð Ð'Ñ(ð	Xð
 ðXð ðXð �t‘ðXð ˜‘*ðXð 
óXð& +/Ø#'ñà�T‰zðð �t‘ðð ! 4™Zð	ð
 ˜D‘[ðð 
ôrc   rP   )ar  rZ   rm  r¨   rù  r˜   Úcollections.abcr   Útypingr   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   r   Ú*litellm.llms.anthropic.chat.transformationr   r   r   r   Ú#litellm.llms.anthropic.common_utilsr   Ú)litellm.llms.base_llm.chat.transformationr   r   Ú%litellm.llms.bedrock.request_metadatar   r   r   r    Úlitellm.types.llms.bedrockÚlitellm.types.llms.openair"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Úlitellm.types.utilsr0   r1   r2   r3   r4   r5   r6   r7   r  r8   r9   r:   r;   r<   r=   Úcommon_utilsr?   r@   rA   rB   rC   rD   rE   rF   ÚtiktokenrK   rÞ  rM   rN   rP   rf   rc   ra   ú<module>r*     sï   ðòó Û Û 	Û Û Ý #ß @Õ @ã ã Ý +÷÷ó õ ?õ÷ó ÷ó õ Cß R÷ó ô )÷÷ ÷ ÷ ÷ 	÷ 	ó 	÷÷ ÷	÷ 	ó 	ñ Ûò%Ð ˜Eó ð /1Ð $ eÓ 0ò5Ð *¨Eó ô[$˜:õ [$rc   