Ë
    uPêjáÖ ã            
       óv  — U d dl Z d dlZd dlZd dlmZmZm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mZ d dlZd dlmZmZmZmZmZmZmZmZmZmZ d dlmZ d dl m!Z! d d	l"m#Z# d d
l$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dlGmHZHmIZI d dlJmKZKmLZLmMZMmNZN d dlJmOZP d dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ddl[m\Z\m]Z]m^Z^m_Z_ e
rd dl`Z`d dlambZc ecZdneZd ejÊ                  d«      Zfeegd<   dZheegd<    ed„ d„ d„ d„ d„ d„ d„ dœ«      Zieeejeegekf   f      egd <   d!eejef   d"ekfd#„Zld$Zmeegd%<   d&ejd"ejfd'„Znd(eoej   d"epeqejejf   eqejejf   f   fd)„Zrd*d*d+d,d-d.d/œZseeqejejf      egd0<   d1Zteegd2<   d3Zueegd4<   d5Zveegd6<    G d7„ d8e]e%«      Zwd9ejd"ekfd:„Zxy);é    N)ÚCallableÚMappingÚSequence)ÚMappingProxyType)ÚTYPE_CHECKINGÚAnyÚFinalÚNoReturnÚcast)ÚValidationError)
Ú$ANTHROPIC_MIN_THINKING_BUDGET_TOKENSÚ"ANTHROPIC_WEB_SEARCH_TOOL_MAX_USESÚ!DEFAULT_ANTHROPIC_CHAT_MAX_TOKENSÚ-DEFAULT_REASONING_EFFORT_HIGH_THINKING_BUDGETÚ,DEFAULT_REASONING_EFFORT_LOW_THINKING_BUDGETÚ,DEFAULT_REASONING_EFFORT_MAX_THINKING_BUDGETÚ/DEFAULT_REASONING_EFFORT_MEDIUM_THINKING_BUDGETÚ0DEFAULT_REASONING_EFFORT_MINIMAL_THINKING_BUDGETÚ.DEFAULT_REASONING_EFFORT_XHIGH_THINKING_BUDGETÚRESPONSE_FORMAT_TOOL_NAME)Úmap_finish_reason)Ú#sanitize_input_schema_for_anthropic©Útype_to_response_format_param)Ú
BaseConfigÚBaseLLMException)ÚANTHROPIC_ADVISOR_TOOL_TYPEÚANTHROPIC_BETA_HEADER_VALUESÚANTHROPIC_HOSTED_TOOLSÚAllAnthropicMessageValuesÚAllAnthropicToolsValuesÚAnthropicCodeExecutionToolÚAnthropicComputerToolÚAnthropicHostedToolsÚAnthropicInputSchemaÚAnthropicMcpServerToolÚAnthropicMessagesToolÚAnthropicMessagesToolChoiceÚAnthropicOutputSchemaÚAnthropicOutputTokensDetailsÚAnthropicSystemMessageContentÚAnthropicThinkingParamÚAnthropicWebSearchToolÚAnthropicWebSearchUserLocation)ÚREASONING_EFFORTÚAllMessageValuesÚChatCompletionCachedContentÚ#ChatCompletionRedactedThinkingBlockÚChatCompletionSystemMessageÚChatCompletionThinkingBlockÚChatCompletionToolCallChunkÚ#ChatCompletionToolCallFunctionChunkÚChatCompletionToolParamÚ OpenAIChatCompletionFinishReasonÚOpenAIMcpServerToolÚOpenAIWebSearchOptions)ÚOutputCodeInterpreterCallÚ"build_code_interpreter_log_outputs)ÚCacheCreationTokenDetailsÚCompletionTokensDetailsWrapperÚPromptTokensDetailsWrapperÚServerToolUse)ÚMessage)	ÚModelResponseÚUsageÚadd_dummy_toolÚ)any_assistant_message_has_thinking_blocksÚget_max_tokensÚhas_tool_call_blocksÚ5last_assistant_with_tool_calls_has_no_thinking_blocksÚsupports_reasoningÚtoken_counteré   )ÚAnthropicErrorÚAnthropicModelInfoÚprocess_anthropic_headersÚ"strip_advisor_blocks_from_messages)ÚLoggingz[^a-zA-Z0-9_-]Ú"_ANTHROPIC_TOOL_NAME_INVALID_CHARSé€   Ú_ANTHROPIC_TOOL_NAME_MAX_LENc                 ó
   — | d u S ©N© ©Úvs    úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/anthropic/chat/transformation.pyú<lambda>rZ   ‚   s
   € ˜!˜t˜)€ ó    c                 ó"   — t        | t        «      S rU   )Ú
isinstanceÚboolrW   s    rY   rZ   rZ   ƒ   s   € œZ¨¬4Ó0€ r[   c                 óH   — t        | t        «      xr t        | t        «       S rU   )r]   Úintr^   rW   s    rY   rZ   rZ   „   s   € œZ¨¬3Ó/ÒK¼
À1ÄdÓ8KÐ4K€ r[   c                 óT   — t        | t        t        f«      xr t        | t        «       S rU   )r]   r`   Úfloatr^   rW   s    rY   rZ   rZ   …   s    € œJ q¬3´¨,Ó7ÒSÄ
È1ÌdÓ@SÐ<S€ r[   c                 ó"   — t        | t        «      S rU   ©r]   ÚstrrW   s    rY   rZ   rZ   †   s   € œJ q¬#Ó.€ r[   c                 ó"   — t        | t        «      S rU   )r]   ÚlistrW   s    rY   rZ   rZ   ‡   s   € œ: a¬Ó.€ r[   c                 ó"   — t        | t        «      S rU   )r]   ÚdictrW   s    rY   rZ   rZ   ˆ   s   € œJ q¬$Ó/€ r[   )ÚnullÚbooleanÚintegerÚnumberÚstringÚarrayÚobjectÚ_ENUM_TYPE_CHECKSÚschemaÚreturnc                 óð   ‡— | j                  d«      }| j                  d«      }t        |t        «      r|€yt        |t        «      ryt        j                  |«      Š‰duxr t	        ˆfd„|D «       «       S )zAWhether ``schema``'s ``enum`` cannot match its declared ``type``.ÚenumÚtypeNFTc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrU   rV   )Ú.0ÚvalueÚchecks     €rY   ú	<genexpr>z5_enum_conflicts_with_declared_type.<locals>.<genexpr>–   s   øè ø€ Ò(O¸%©¨u¯Ñ(Oùs   ƒ)Úgetr]   rg   rq   Úall)rr   Úenum_valuesÚdeclared_typerz   s      @rY   Ú"_enum_conflicts_with_declared_typer€   �   sl   ø€ àŸ™ FÓ+€KØ!Ÿ:™: fÓ-€MÜ�k¤4Ô(¨MÐ,AØÜ�-¤Ô&ØÜ$×(Ñ(¨Ó7€EØ˜ÐÒO¤SÓ(OÀ;Ô(OÓ%OÐ!OÐOr[   Ú_anthropic_tool_name_mapÚ#ANTHROPIC_TOOL_NAME_REVERSE_MAP_KEYÚnamec                 ód   — t        | t        «      r| s| S t        j                  d| «      dt         S )a  Lossy: replace [^a-zA-Z0-9_-] with '_' and truncate to 128.

    Used as a candidate generator for the per-request forward map.
    Callers should NOT use this directly for translation -- always go
    through the forward map so collisions are resolved.
    Ú_N)r]   re   rQ   ÚsubrS   )rƒ   s    rY   Ú#_basic_sanitize_anthropic_tool_namer‡   ¢   s1   € ô �dœCÔ ©ØˆÜ-×1Ñ1°#°tÓ<Ð=ZÔ>ZÐ[Ð[r[   Úoriginal_namesc                 óÜ  — i }t        «       }| D ]7  }t        |t        «      r|sŒt        |«      }||k(  sŒ'|j	                  |«       Œ9 | D ]s  }t        |t        «      r|sŒt        |«      }||k(  rŒ'||v rŒ,|}d}||v r*|dz  }d|› �}|dt
        t        |«      z
   }|› |› �}||v rŒ*|||<   |j	                  |«       Œu |j                  «       D �	�
ci c]  \  }	}
|
|	“Œ
 }}	}
||fS c c}
}	w )aÂ  Build (forward, reverse) tool-name maps for a single request.

    forward[original] = sanitized   -- only present when name was rewritten
    reverse[sanitized] = original   -- inverse of `forward`

    Properties:
    - All sanitized names satisfy ^[a-zA-Z0-9_-]{1,128}$.
    - Sanitized names are unique within the request (no two originals
      collide on the wire).
    - A name that's already valid AND doesn't collide with another tool's
      sanitized form passes through untouched and is absent from the maps.
      That's the key correctness property: response-side translation only
      runs on entries we actually rewrote, so a tool legitimately named
      `foo_bar` is never incorrectly retyped to `foo/bar` just because
      some *other* request had that pair.
    - Order-dependent: when two originals would clash, the *second* one
      seen gets the disambiguating suffix. Callers should preserve the
      caller's tool order (we do).
    é   r…   N)Úsetr]   re   r‡   ÚaddrS   ÚlenÚitems)rˆ   ÚforwardÚusedÚoriginalÚ	candidateÚuniqueÚnÚsuffixÚheadÚkrX   Úreverses               rY   Ú_build_anthropic_tool_name_mapsr™   ®   s.  € ð, &(€GÜ“u€Dð #ò  ˆÜ˜(¤CÔ(±ØÜ7¸ÓAˆ	Ø˜Ó Ø�H‰H�YÕð ð #ò ˆÜ˜(¤CÔ(±ØÜ7¸ÓAˆ	Ø˜Ò Øð �wÑØàˆØˆØ˜‰nØ�‰FˆAØ˜˜�WˆFàÐIÔ;¼cÀ&»kÑIÐJˆDØ�v˜f˜XÐ&ˆFð ˜Šnð #ˆ�ÑØ�‰�Õð/ð0 (/§}¡}£×7™t˜q !�a˜‘dÐ7€GÑ7Ø�GÐÐùó 8s   ÃC(ÚlowÚmediumÚhighÚxhighÚmax©rš   Úminimalr›   rœ   r�   rž   Ú(REASONING_EFFORT_TO_OUTPUT_CONFIG_EFFORTz�Dropping unsupported `output_config` for model=%s (drop_params=True). Effort is only supported on Opus 4.5+, Sonnet 4.6+, and Mythos Preview.Ú&DROP_UNSUPPORTED_OUTPUT_CONFIG_WARNINGzfDropping adaptive `thinking` for model=%s: max_tokens is too small to fit the minimum thinking budget.Ú*DROP_UNSUPPORTED_ADAPTIVE_THINKING_WARNINGzpDropping unsupported `speed` for model=%s (drop_params=True). Fast mode is only supported on select Opus models.ÚDROP_UNSUPPORTED_SPEED_WARNINGc                   ó  ‡ — e Zd ZU dZdZedz  ed<   dZedz  ed<   dZ	edz  ed<   dZ
edz  ed<   dZedz  ed<   dZedz  ed<   dZedz  ed	<   	 	 	 	 	 	 	 d†dedz  dedz  dedz  d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dœdedz  fˆ fd„«       Zed‡dedz  d
efd„«       Zedeeef   ded
efd„«       Zeded
efd„«       Zeded
efd„«       Zedededed
efd„«       Zedededz  ded
edz  fd„«       Zededed
efd„«       Z ed‡dededz  d
efd„«       Z!e	 d‡dededededz  d
df
d „«       Z"eded!ed"ed
e#fd#„«       Z$defd$„Z%ed%eeef   d
eeef   fd&„«       Z&d'eez  dz  d
edz  fd(„Z'd
efd)„Z(d*edz  d+edz  d
e)dz  fd,„Z*d-e+d
e,e-dz  e.dz  f   fd.„Z/d-e0d
e.fd/„Z1d0ed
e,ee-   ee.   f   fd1„Z2ed2ee3   d3eeef   d
ee3   fd4„«       Z4ed0ed
e,eeef   eeef   f   fd5„«       Z5edeeef   d
e,eeef   eeef   f   fd6„«       Z6d0edz  d
efd7„Z7d0ed
e,eef   fd8„Z8d9ed:ed
efd;„Z9d<eee   z  dz  d
ee   dz  fd=„Z:e	 dˆd>e;ez  dz  deded"ed
e<dz  f
d?„«       Z=ed@e<dedz  d
e<dz  fdA„«       Z>d!edz  d
edz  fdB„Z?d!edz  d
e@dz  fdC„ZAd!edz  dedDed
eBdz  fdE„ZCd!eDd
eEfdF„ZFedGeeeef      eeef   z  d
eeef   dz  fdH„«       ZGdIedededed
ef
dJ„ZH	 d‡dKedz  d
eBfdL„ZId
efdM„ZJd2ee3   d
eeK   fdN„ZLd2eeM   d0ee-ez     d
ee-ez     fdO„ZNdPedQed
dfdR„ZOdPedGePd
dfdS„ZQdPeded
efdT„ZRded2ee3   dedUedPed
efdV„ZSdWededed
dfdX„ZTdYedz  dZee   d
e,eUdz  ee   edz  f   fd[„ZVd\ed
e,eee   dz  eeWeXz     dz  edz  ee   ee   dz  ee   dz  ee   dz  f   fd]„ZYed^eZeePf   d
edz  fd_„«       Z[ed\eZeePf   dz  d
efd`„«       Z\d^eZeePf   dae]eP   dz  dbedcedz  d\eZeePf   dz  d
e^fdd„Z_dae]eP   d
edz  fde„Z`ed^ed
efdf„«       Zaedae]eZeef      d
ebdz  fdg„«       ZcedheZeef   d
ebdz  fdi„«       Zd	 	 d‰d^eZeef   dcedz  d\edz  djedz  d
eef
dk„ZfdZee   d
eeef   fdl„Zgdmee   dneeef   doedz  d
eeh   fdp„Zid\edqee   dz  dreeWeXz     dz  dsee   dz  dmee   dz  dtee   dz  dZee   d
eeef   fdu„Zj	 	 	 	 dŠd\edvekjØ                  dwemdYedz  dxedz  djedz  dyeeef   dz  fdz„Znd2ee3   d
edz  fd{„Zo	 	 d‰dedvekjØ                  dwemd|epd}ed2ee3   dedUed~dd€edz  dYedz  d
emfd�„ZqedZee   d
eUdz  fd‚„«       Zrdƒed„edPeekjæ                  z  d
etfd…„Zuˆ xZvS )‹ÚAnthropicConfigzŸ
    Reference: https://docs.anthropic.com/claude/reference/messages_post

    to pass metadata to anthropic, it's {"user_id": "any-relevant-information"}
    NÚ
max_tokensÚstop_sequencesÚtemperatureÚtop_pÚtop_kÚmetadataÚsystemrs   c                 ó¤   — t        «       j                  «       }|j                  «       D ]%  \  }	}
|	dk7  sŒ|
€Œt        | j                  |	|
«       Œ' y )NÚself)ÚlocalsÚcopyrŽ   ÚsetattrÚ	__class__)r¯   r§   r¨   r©   rª   r«   r¬   r­   Úlocals_Úkeyry   s              rY   Ú__init__zAnthropicConfig.__init__  sF   € ô  ›Ÿ™›ˆØ!Ÿ-™-›/ò 	4‰JˆC�Ø�f‹} Ñ!2Ü˜Ÿ™¨¨UÕ3ñ	4r[   c                  ó   — y©NÚ	anthropicrV   ©r¯   s    rY   Úcustom_llm_providerz#AnthropicConfig.custom_llm_provider#  s   € àr[   c                 ó"   — | j                   xs dS r¸   ©r»   rº   s    rY   Ú_resolved_providerz"AnthropicConfig._resolved_provider'  s   € à×'Ñ'Ò6¨;Ð6r[   ©ÚmodelrÀ   c                ón   •— t         ‰| �  «       }|j                  d«      €| j                  |«      |d<   |S )Nr§   )ÚsuperÚ
get_configr|   Úget_max_tokens_for_model)ÚclsrÀ   Úconfigr³   s      €rY   rÃ   zAnthropicConfig.get_config+  s;   ø€ ä™Ñ*Ó,ˆð �:‰:�lÓ#Ð+Ø#&×#?Ñ#?ÀÓ#FˆF�<Ñ àˆr[   c                 óh   — | €t         S 	 t        | «      }|€t         S |S # t        $ r	 t         cY S w xY w)z¨
        Get the max output tokens for a given model.
        Falls back to DEFAULT_ANTHROPIC_CHAT_MAX_TOKENS (configurable via env var) if model is not found.
        )r   rF   Ú	Exception)rÀ   r§   s     rY   rÄ   z(AnthropicConfig.get_max_tokens_for_model5  sE   € ð ˆ=Ü4Ð4ð	5Ü .¨uÓ 5ˆJØÐ!Ü8Ð8ØÐøÜò 	5Ü4Ò4ð	5ús   Š � Ÿ1°1Úanthropic_tool_contentÚindexc                 óÀ   — t        | d   dt        | d   t        j                  | d   «      ¬«      |¬«      }d| v r#t	        t
        t        t        f   | d   «      |d<   |S )a�  
        Convert Anthropic tool_use format to OpenAI ChatCompletionToolCallChunk format.

        Args:
            anthropic_tool_content: Anthropic tool_use content block with format:
                {"type": "tool_use", "id": "...", "name": "...", "input": {...}}
            index: The index of this tool call

        Returns:
            ChatCompletionToolCallChunk in OpenAI format
        ÚidÚfunctionrƒ   Úinput)rƒ   Ú	arguments)rÌ   rv   rÍ   rÊ   Úcaller)r5   r6   ÚjsonÚdumpsr   ri   re   r   )rÉ   rÊ   Ú	tool_calls      rY   Ú!convert_tool_use_to_openai_formatz1AnthropicConfig.convert_tool_use_to_openai_formatE  sp   € ô  7Ø% dÑ+ØÜ8Ø+¨FÑ3ÜŸ*™*Ð%;¸GÑ%DÓEôð ô
ˆ	ð Ð-Ñ-Ü"&¤t¬C´¨H¡~Ð7MÈhÑ7WÓ"XˆI�hÑØÐr[   c                 óL   ‡— | j                  «       Št        ˆfd„dD «       «      S )z3Check if the model is specifically Claude Opus 4.6.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrU   rV   ©rx   rX   Úmodel_lowers     €rY   r{   z5AnthropicConfig._is_opus_4_6_model.<locals>.<genexpr>g  ó   øè ø€ Ò^¨�1˜Ô#Ñ^ùó   ƒ)zopus-4-6Úopus_4_6zopus-4.6zopus_4.6©ÚlowerÚany©rÀ   rØ   s    @rY   Ú_is_opus_4_6_modelz"AnthropicConfig._is_opus_4_6_modelc  ó"   ø€ ð #Ÿ[™[›]ˆÜÓ^Ð-]Ô^Ó^Ð^r[   c                 óL   ‡— | j                  «       Št        ˆfd„dD «       «      S )z3Check if the model is specifically Claude Opus 4.7.c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrU   rV   r×   s     €rY   r{   z5AnthropicConfig._is_opus_4_7_model.<locals>.<genexpr>m  rÙ   rÚ   )zopus-4-7Úopus_4_7zopus-4.7zopus_4.7rÜ   rß   s    @rY   Ú_is_opus_4_7_modelz"AnthropicConfig._is_opus_4_7_modeli  rá   r[   Úlevelr»   c                 ó8   — t         j                  | d|› d�|«      S )z=Check ``supports_{level}_reasoning_effort`` in the model map.Ú	supports_Ú_reasoning_effort)r¦   Ú_supports_model_capability)rÀ   ræ   r»   s      rY   Ú_supports_effort_levelz&AnthropicConfig._supports_effort_levelo  s)   € ô ×9Ñ9Ø�Y˜u˜gÐ%6Ð7Ð9Ló
ð 	
r[   Úeffortc                 ó´   — |dk(  r2t         j                  | |«      st         j                  | d|«      sd| › �S |dk(  rt         j                  | d|«      sd| › �S y)zMReturn ``None`` if ``effort`` is allowed on ``model``, else an error message.rž   z8effort='max' is not supported by this model. Got model: r�   z:effort='xhigh' is not supported by this model. Got model: N)r¦   Ú_is_adaptive_thinking_modelrë   )rÀ   rì   r»   s      rY   Ú_validate_effort_for_modelz*AnthropicConfig._validate_effort_for_modelv  sh   € ð �UŠ?Ü×7Ñ7¸Ð?RÔSÜ×5Ñ5°e¸UÐDWÔXàMÈeÈWÐUÐUØ�WÒ¤_×%KÑ%KÈEÐSZÐ\oÔ%pØOÐPUÈwÐWÐWØr[   c                 ó`   ‡ ‡— t         j                  ‰ d‰«      ryt        ˆˆ fd„dD «       «      S )ag  Whether the model accepts ``output_config.effort`` at all.

        A model qualifies if its map entry advertises ``supports_output_config``
        or any ``supports_*_reasoning_effort`` flag. The two are independent
        signals: e.g. Claude Opus 4.5 supports ``output_config`` without
        advertising a non-default (max/xhigh) effort level.
        Úsupports_output_configTc              3   óL   •K  — | ]  }t         j                  ‰|‰«      –— Œ y ­wrU   )r¦   rë   )rx   ræ   r»   rÀ   s     €€rY   r{   z?AnthropicConfig._model_supports_effort_param.<locals>.<genexpr>�  s)   øè ø€ ò 
àô ×2Ñ2°5¸%ÐAT×Uñ
ùs   ƒ!$rŸ   )r¦   rê   rÞ   ©rÀ   r»   s   ``rY   Ú_model_supports_effort_paramz,AnthropicConfig._model_supports_effort_param‚  s6   ù€ ô ×5Ñ5°eÐ=UÐWjÔkØÜô 
àMô
ó 
ð 	
r[   c                 óB   — |�|dk7  ryt        j                  | d«      du S )a‰  Whether the model accepts Anthropic's ``speed`` parameter (fast mode).

        Fast mode is direct Anthropic API-only (not Bedrock, Vertex, or Azure).
        Those providers strip their prefix before this shared transform runs, so a
        bare ``claude-opus-4-8`` would otherwise resolve to the direct-API entry;
        the routed provider is checked explicitly to keep them out.
        r¹   FÚsupports_speedT)rM   Ú_get_exact_model_capabilityró   s     rY   Ú_model_supports_speed_paramz+AnthropicConfig._model_supports_speed_param’  s/   € ð Ð*Ð/BÀkÒ/QØÜ!×=Ñ=¸eÐEUÓVÐZ^Ð^Ð^r[   Úoptional_paramsÚdrop_paramsc                 ó<  — d|vry t         j                  | |«      ry t        j                  s:|s8|j	                  d«      }t        j
                  j                  | › d|›d�d¬«      ‚t        j                  j                  t        | «       |j                  dd «       y )NÚspeedz does not support speed=z?. To drop unsupported params, set `litellm.drop_params = True`.é�  )ÚmessageÚstatus_code)r¦   rø   Úlitellmrú   r|   ÚutilsÚUnsupportedParamsErrorÚverbose_loggerÚwarningr¤   Úpop)rÀ   rù   rú   r»   Úspeed_values        rY   Ú_maybe_drop_speed_paramz'AnthropicConfig._maybe_drop_speed_paramŸ  s¤   € ð ˜/Ñ)ØÜ×6Ñ6°uÐ>QÔRØÜ×#Ò#¡{Ø!0×!4Ñ!4°WÓ!=ˆKÜ—-‘-×6Ñ6à�gÐ5°k°_ð E4ð 4ð  ð 7ó ð ô 	×Ñ×&Ñ&Ü*Øô	
ð 	×Ñ˜G TÕ*r[   ry   Úllm_providerc                 óN   — t         j                  j                  d|›d�| |¬«      ‚)aß  Raise a ``BadRequestError`` for an unrecognised ``reasoning_effort``.

        Args:
            model: The model id the request was routed to (surfaced in the error).
            value: The offending ``reasoning_effort`` value supplied by the caller.
            llm_provider: Provider tag for the raised exception (``"anthropic"``,
                ``"bedrock_converse"``, ``"databricks"``, ...).

        Raises:
            litellm.exceptions.BadRequestError: Always.
        zInvalid reasoning_effort: zL. Must be one of: 'minimal', 'low', 'medium', 'high', 'xhigh', 'max', 'none'©rþ   rÀ   r  )r   Ú
exceptionsÚBadRequestError©rÀ   ry   r  s      rY   Ú_raise_invalid_reasoning_effortz/AnthropicConfig._raise_invalid_reasoning_effortº  s;   € ô × Ñ ×0Ñ0à,¨U¨Ið 61ð 2ð Ø%ð 1ó 
ð 	
r[   c                 óÈ   — g d¢}d|v s7t         j                  || j                  «      st        || j                  ¬«      r"|j                  d«       |j                  d«       |S )N)ÚstreamÚstopr©   rª   r§   Úmax_completion_tokensÚtoolsÚtool_choiceÚextra_headersÚparallel_tool_callsÚresponse_formatÚuserÚweb_search_optionsrü   Úcontext_managementÚcache_controlzclaude-3-7-sonnetró   ÚthinkingÚreasoning_effort)r¦   rî   r¾   rI   r»   Úappend)r¯   rÀ   Úparamss      rY   Úget_supported_openai_paramsz+AnthropicConfig.get_supported_openai_paramsÑ  s]   € ò
ˆð(   5Ñ(Ü×:Ñ:¸5À$×BYÑBYÔZÜ!ØØ$(×$<Ñ$<õð
 �M‰M˜*Ô%Ø�M‰MÐ,Ô-àˆr[   rr   c           
      óˆ  — t        | t        «      s| S i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$d%d&d'd(d)d*d+œ¥}t        |«      }g }|j                  «       D ]o  \  }}|| vrŒ| |   }t        |t        «      r|sŒ#t        |t        t
        f«      rt        j                  |«      n|}|j                  |j                  |«      «       Œq i }|r<| j                  d,d-«      }	d.d/j                  |«      z   d0z   }
|	r|	d1z   |
z   |d,<   n|
|d,<   t        | «      }| j                  «       D �]Í  \  }}||v rŒ|d2k(  r|rŒ|d,k(  rd,|v rŒ|d3k(  rKt        |t        «      r;|j                  «       D ��ci c]  \  }}|t        j                  |«      “Œ c}}||<   Œn|d4k(  r)t        |t        «      rt        j                  |«      ||<   Œœ|d5k(  rKt        |t        «      r;|j                  «       D ��ci c]  \  }}|t        j                  |«      “Œ c}}||<   Œì|d6k(  rKt        |t
        «      r;|j                  d6g «      |D �cg c]  }t        j                  |«      ‘Œ c}z   |d6<   �Œ<|d7k(  r8t        |t
        «      r(|D �cg c]  }t        j                  |«      ‘Œ c}||<   �Œy|d8k(  rKt        |t
        «      r;|j                  d6g «      |D �cg c]  }t        j                  |«      ‘Œ c}z   |d6<   �ŒÉ|||<   �ŒÐ |j                  d2«      d9k(  rd:|d;<   |S c c}}w c c}}w c c}w c c}w c c}w )<aS  
        Filter out unsupported fields from JSON schema for Anthropic's output_format API.

        Anthropic's output_format doesn't support certain JSON schema properties.
        These are constraints that cannot be enforced by the constrained-decoding
        grammar Anthropic compiles the schema into, so the API rejects them with a
        400 ``invalid_request_error`` (e.g. "output_format.schema: For 'array' type,
        property 'uniqueItems' is not supported"):
        - maxItems/minItems/uniqueItems/contains/minContains/maxContains/prefixItems: array constraints
        - minimum/maximum/exclusiveMinimum/exclusiveMaximum/multipleOf: numeric constraints
        - minLength/maxLength: string constraints
        - minProperties/maxProperties/patternProperties/propertyNames: object constraints
        - dependentRequired/dependentSchemas/unevaluatedProperties: object constraints
        - if/then/else/not: conditional and negation keywords

        ``oneOf`` is also rejected ("Schema type 'oneOf' is not supported") and is
        rewritten to ``anyOf``, matching the Anthropic SDK. Unknown keywords are
        ignored by the API, so anything not listed here passes through untouched.

        This mirrors the transformation done by the Anthropic Python SDK.
        See: https://platform.claude.com/docs/en/build-with-claude/structured-outputs#how-sdk-transformation-works

        The SDK approach:
        1. Remove unsupported constraints from schema
        2. Add constraint info to description (e.g., "Must be at least 100")
        3. Validate responses against original schema
        Args:
            schema: The JSON schema dictionary to filter

        Returns:
            A new dictionary with unsupported fields removed and descriptions updated

        Related issues:
        - https://github.com/BerriAI/litellm/issues/19444
        ÚminItemszminimum number of items: {}ÚmaxItemszmaximum number of items: {}ÚuniqueItemszall array items must be uniqueÚcontainsz'array must contain an item matching: {}ÚminContainsz$minimum number of matching items: {}ÚmaxContainsz$maximum number of matching items: {}ÚprefixItemsz&leading items must match, in order: {}Úminimumzminimum value: {}Úmaximumzmaximum value: {}ÚexclusiveMinimumzexclusive minimum value: {}ÚexclusiveMaximumzexclusive maximum value: {}Ú
multipleOfzmust be a multiple of {}Ú	minLengthzminimum length: {}Ú	maxLengthzmaximum length: {}ÚminPropertiesz minimum number of properties: {}ÚmaxPropertiesz maximum number of properties: {}ÚpatternPropertiesz:properties whose names match each pattern must satisfy: {}zproperty names must satisfy: {}z!dependent required properties: {}zdependent schemas: {}z'unevaluated properties must satisfy: {}zconditional (if): {}zconditional (then): {}zconditional (else): {}zmust not match: {})ÚpropertyNamesÚdependentRequiredÚdependentSchemasÚunevaluatedPropertiesÚifÚthenÚelseÚnotÚdescriptionÚ zNote: ú, ú.ú rv   Ú
propertiesrŽ   ú$defsÚanyOfÚallOfÚoneOfrp   FÚadditionalProperties)r]   ri   r‹   rŽ   r^   rg   rÑ   rÒ   r  Úformatr|   Újoinr€   r¦   Úfilter_anthropic_output_schema)rr   Úconstraint_labelsÚunsupported_fieldsÚconstraint_descriptionsÚfieldÚlabelry   Ú
note_valueÚresultÚexisting_descÚconstraint_noteÚdrops_conflicting_typerµ   r—   rX   Úitems                   rY   rH  z.AnthropicConfig.filter_anthropic_output_schemaò  s  € ôJ ˜&¤$Ô'ØˆMð$
ØÐ5ð$
àÐ5ð$
ð Ð;ð$
ð ÐAð	$
ð
 ÐAð$
ð ÐAð$
ð ÐCð$
ð Ð*ð$
ð Ð*ð$
ð Ð =ð$
ð Ð =ð$
ð Ð4ð$
ð Ð-ð$
ð Ð-ð$
ð Ð?ð$
ð  Ð?ð!$
ð"  Ð!]ð#$
ð$ ?Ø!DØ 7Ø%NØ(Ø,Ø,Ø'ò3$
Ðô6 %(Ð(9Ó$:Ðð 02ÐØ-×3Ñ3Ó5ò 	E‰LˆE�5Ø˜FÑ"ØØ˜5‘MˆEô ˜%¤Ô&©uØô /9¸ÄÄtÀÔ.MœŸ™ EÔ*ÐSXˆJØ#×*Ñ*¨5¯<©<¸
Ó+CÕDð	Eð )+ˆñ #Ø#)§:¡:¨m¸RÓ#@ˆMØ%-°·	±	Ð:QÓ0RÑ%RÐUXÑ%XˆOÙØ(5¸Ñ(;¸oÑ(M��}Ò%à(7��}Ñ%ä(JÈ6Ó(RÐà Ÿ,™,›.ó 	$‰JˆC�ØÐ(Ñ(ØØ�fŠ}Ñ!7ØØ�mÒ#¨¸Ñ(?àà�lÒ"¤z°%¼Ô'>Ø`e×`kÑ`kÓ`m×nÑX\ÐXYÐ[\˜q¤/×"PÑ"PÐQRÓ"SÑSÓn��s’Ø˜’¤J¨u´dÔ$;Ü-×LÑLÈUÓS��s’Ø˜’¤J¨u´dÔ$;Ø`e×`kÑ`kÓ`m×nÑX\ÐXYÐ[\˜q¤/×"PÑ"PÐQRÓ"SÑSÓn��s’Ø˜’¤J¨u´dÔ$;Ø"(§*¡*¨W°bÓ"9ØUZö=ØMQ”O×BÑBÀ4ÕHò=ñ #��w“ð ˜’¤J¨u´dÔ$;Ø`eÖfÐX\œ×MÑMÈdÕSÒf��s“Ø˜’¤J¨u´dÔ$;ð #)§*¡*¨W°bÓ"9ØUZö=ØMQ”O×BÑBÀ4ÕHò=ñ #��w“ð $��s“ð9	$ð@ �:‰:�fÓ Ò)Ø-2ˆFÐ)Ñ*àˆùó3 oùó oùò=ùò gùò=s   Æ L)È L/ÉL5ÊL:Ë L?r  c                 ó   — t        |d¬«      S )Nz/$defs/{model})Úref_templater   )r¯   r  s     rY   Ú$get_json_schema_from_pydantic_objectz4AnthropicConfig.get_json_schema_from_pydantic_object|  s   € Ü,ØÐ*:ô
ð 	
r[   c                 ó
   — ddiS )Nzanthropic-versionz
2023-06-01rV   rº   s    rY   Úget_cache_control_headersz)AnthropicConfig.get_cache_control_headers�  s   € ð
   ð
ð 	
r[   r  Úparallel_tool_usec                 óê  — d }|dk(  rt        d¬«      }n¼|dk(  rt        d¬«      }nª|dk(  rt        d¬«      }n˜t        |t        «      rˆd|v rPd|vrL|j                  d«      }|dk(  rt        d¬«      }n]|dk(  s|dk(  rt        d¬«      }nF|dk(  rAt        d¬«      }n4|j                  di «      j                  d«      }|�t        d	¬«      }||d<   |� |dk(  r	 |S |�| |d
<   |S t        d| ¬«      }|S )NÚauto©rv   ÚrequiredrÞ   Únonerv   rÍ   rƒ   ÚtoolÚdisable_parallel_tool_use)rv   r`  )r(   r]   ri   r|   )r¯   r  rY  Ú_tool_choiceÚ	tool_typeÚ
_tool_names         rY   Ú_map_tool_choicez AnthropicConfig._map_tool_choice‰  s4  € ð
 <@ˆØ˜&Ò Ü6Øô‰Lð ˜JÒ&Ü6¸EÔB‰LØ˜FÒ"Ü6¸FÔC‰LÜ˜¤TÔ*Ø˜Ñ$¨¸;Ñ)FØ#.§?¡?°6Ó#:�	Ø Ò&Ü#>ÀFÔ#K‘LØ *Ò,°	¸UÒ0BÜ#>ÀEÔ#J‘LØ &Ò(Ü#>ÀFÔ#K‘Là$/§O¡O°JÀÓ$C×$GÑ$GÈÓ$O�
ØÐ)Ü#>ÀFÔ#K�LØ+5�L Ñ(àÐ(ð ˜fÒ$Øð Ðð Ð)Ø@QÐ<Q�Ð8Ñ9ð Ðô	  ;ØØ2CÐ.Cô �ð Ðr[   r_  c                 óì
  ‡— d }d }‰d   dk(  s‰d   dk(  rV‰d   j                  ddi dœ«      }t        |«      }t        ‰d   d   |d¬«      }‰d   j                  d	«      }|�||d	<   |}�n¯‰d   j                  d
«      r–d‰d   vrt	        d«      ‚‰d   d   j                  d«      }‰d   d   j                  d«      }	|�|	€t	        d«      ‚t        ‰d   ‰d   j                  dd«      ||	¬«      }
‰d   d   j                  d«      }|�||
d<   |
}�nt        ˆfd„t        D «       «      rŽ‰j                  d‰j                  di «      j                  d«      «      }|�t        |t        «      st	        d«      ‚|}i }‰j                  «       D ]  \  }}|dk7  sŒ|dk7  sŒ|||<   Œ t        d2‰d   |dœ|¤Ž}�n_‰d   dk(  rt        d2i ‰¤Ž}�nJ‰d   dk(  r!| j                  t        t        ‰«      «      }�n!‰d   dk(  r@ddlm} ‰j                  dd«      }t        |t        «      st	        d«      ‚|} |d|¬«      }nÙ‰d   dk(  r@ddlm} ‰j                  dd«      }t        |t        «      st	        d«      ‚|} |d|¬«      }n‘‰d   t&        k(  r…ddlm} t        t*        ‰«      }|j                  d «      }t        |t        «      st	        d!«      ‚ |t&        d"|¬#«      }|j                  d$«      �|d$   |d$<   |j                  d%«      �|d%   |d%<   |}|€|€t	        d&‰d   › �«      ‚‰j                  d'd «      }‰j                  di «      j                  d'd «      }|�>|j                  dd(«      }|d)vr(|�||d'<   n |�t        |t*        «      rt-        d2i |¤Ž|d'<   ‰j                  d*d «      }‰j                  di «      j                  d*d «      }|�[|j                  dd(«      }|d+vrE|�!t        |t.        «      st	        d,«      ‚||d*<   n"|� t        |t.        «      st	        d,«      ‚||d*<   ‰j                  d-d «      }‰j                  di «      j                  d-d «      }|�|j                  dd(«      }|d+vri|�3t        |t0        «      rt3        d.„ |D «       «      st	        d/«      ‚||d-<   n4|�2t        |t0        «      rt3        d0„ |D «       «      st	        d/«      ‚||d-<   ‰j                  d1d «      } ‰j                  di «      j                  d1d «      }!|�R|j                  dd(«      }|dk(  s	|d(k(  r6d|v r2| �t        | t0        «      r	| |d1<   ||fS |!�t        |!t0        «      r|!|d1<   ||fS )3Nrv   rÍ   ÚcustomÚ
parametersrp   )rv   r@  rƒ   )rƒ   Úinput_schemarv   r;  Ú	computer_z&Missing required parameter: parametersÚdisplay_width_pxÚdisplay_height_pxzAMissing required parameter: display_width_px or display_height_pxÚcomputer)rv   rƒ   rj  rk  Údisplay_numberc              3   óF   •K  — | ]  }‰d    j                  |«      –— Œ y­w©rv   N)Ú
startswith)rx   Útr_  s     €rY   r{   z3AnthropicConfig._map_tool_helper.<locals>.<genexpr>è  s    øè ø€ ÒL°��f‘×(Ñ(¨×+ÑLùs   ƒ!z Missing required parameter: name©rv   rƒ   ÚurlÚmcpÚtool_search_tool_regex_20251119r   )ÚAnthropicToolSearchToolRegexÚtool_search_tool_regexz'Tool search tool must have a valid nameÚtool_search_tool_bm25_20251119)ÚAnthropicToolSearchToolBM25Útool_search_tool_bm25)ÚAnthropicAdvisorToolrÀ   z$Advisor tool must have a valid modelÚadvisor)rv   rƒ   rÀ   Úmax_usesÚcachingzUnsupported tool type: r  r<  ©ru  rx  Údefer_loading)ru  rx  Úcomputer_20241022Úcomputer_20250124zdefer_loading must be a booleanÚallowed_callersc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrU   rd   ©rx   rS  s     rY   r{   z3AnthropicConfig._map_tool_helper.<locals>.<genexpr>Y  s   è ø€ ò IØ26œ
 4¬×-ñIùó   ‚z)allowed_callers must be a list of stringsc              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wrU   rd   r…  s     rY   r{   z3AnthropicConfig._map_tool_helper.<locals>.<genexpr>_  s   è ø€ ò RØ26œ
 4¬×-ñRùr†  Úinput_examplesrV   )r|   r   r'   rp  Ú
ValueErrorr#   rÞ   r   r]   re   rŽ   r$   r&   Ú_map_openai_mcp_server_toolr   r9   Úlitellm.types.llms.anthropicrv  ry  r   r{  ri   r1   r^   rg   r}   )"r¯   r_  Úreturned_toolÚ
mcp_serverÚ_input_schemaÚinput_anthropic_schemaÚ_toolÚ_descriptionÚ_display_width_pxÚ_display_height_pxÚ_computer_toolÚ_display_numberÚfunction_name_objÚfunction_nameÚadditional_tool_paramsr—   rX   rv  Útool_name_objÚ	tool_namery  r{  Ú
_tool_dictÚadvisor_modelÚ_advisor_toolÚ_cache_controlÚ_cache_control_functionrb  Ú_defer_loadingÚ_defer_loading_functionÚ_allowed_callersÚ_allowed_callers_functionÚ_input_examplesÚ_input_examples_functions"    `                                rY   Ú_map_tool_helperz AnthropicConfig._map_tool_helper´  s�  ø€ ð 9=ˆØ48ˆ
à�‰<˜:Ò%¨¨f©¸Ò)AØ#'¨
Ñ#3×#7Ñ#7Øà$Ø"$ñó$ˆMô -PÐP]Ó,^Ð"ä0Ø˜*Ñ% fÑ-Ø3ØôˆEð #' zÑ"2×"6Ñ"6°}Ó"EˆLØÐ'Ø'3��mÑ$à!ŠMà�&‰\×$Ñ$ [Ô1à 4¨
Ñ#3Ñ3Ü Ð!IÓJÐJà37¸
Ñ3CÀLÑ3Q×3UÑ3UÐVhÓ3iÐØ48¸Ñ4DÀ\Ñ4R×4VÑ4VÐWjÓ4kÐØ Ð(Ð,>Ð,FÜ Ð!dÓeÐeä$9Ø˜&‘\Ø˜*Ñ%×)Ñ)¨&°*Ó=Ø!2Ø"4ô	%ˆNð &*¨*Ñ%5°lÑ%C×%GÑ%GÐHXÓ%YˆOØÐ*Ø3B�Ð/Ñ0à*ŠMÜÓLÔ5KÔLÔLØ'+§x¡x°¸¿¹ÀÈRÓ8P×8TÑ8TÐU[Ó8\Ó']ÐØ Ð(´
Ð;LÌcÔ0RÜ Ð!CÓDÐDØ#4ˆMà,.Ð"ØŸ
™
›ò 2‘��1Ø˜“; 1¨£;Ø01Ð*¨1Ò-ð2ô 1ð Ø˜&‘\Ø"ñð )ñŠMð
 �&‰\˜UÒ"Ü/Ñ7°$Ñ7ŠJØ�&‰\˜UÒ"Ø×9Ñ9¼$Ô?RÐTXÓ:YÓZŠJØ�&‰\Ð>Ò>åQà ŸH™H VÐ-EÓFˆMÜ˜m¬SÔ1Ü Ð!JÓKÐKØ%ˆIÙ8Ø6Øô‰Mð �&‰\Ð=Ò=åPà ŸH™H VÐ-DÓEˆMÜ˜m¬SÔ1Ü Ð!JÓKÐKØ%ˆIÙ7Ø5Øô‰Mð �&‰\Ô8Ò8ÝIä $¤T¨4Ó 0ˆJØ#-§>¡>°'Ó#:ˆMÜ˜m¬SÔ1Ü Ð!GÓHÐHÙ#7Ü0ØØ#ô$ˆMð
 �~‰~˜jÓ)Ð5Ø,6°zÑ,B�˜jÑ)Ø�~‰~˜iÓ(Ð4Ø+5°iÑ+@�˜iÑ(Ø)ˆMØÐ  ZÐ%7ÜÐ6°t¸F±|°nÐEÓFÐFð !%§¡¨¸$Ó ?ˆØ)-¯©°*¸bÓ)A×)EÑ)EÀoÐW[Ó)\ÐØÐ$à%×)Ñ)¨&°"Ó5ˆIØð !ñ ð "Ð-Ø5C�M /Ò2Ø,Ð8¼ZÐH_ÔaeÔ=fÜ5PÑ5kÐSjÑ5k�M /Ñ2ð !%§¡¨¸$Ó ?ˆØ)-¯©°*¸bÓ)A×)EÑ)EÀoÐW[Ó)\ÐØÐ$à%×)Ñ)¨&°"Ó5ˆIØð !ñ ð "Ð-Ü% n´dÔ;Ü(Ð)JÓKÐKØ5C�M /Ò2Ø,Ð8Ü%Ð&=¼tÔDÜ(Ð)JÓKÐKØ5L�M /Ñ2ð #'§(¡(Ð+<¸dÓ"CÐØ+/¯8©8°JÀÓ+C×+GÑ+GÐHYÐ[_Ó+`Ð!ØÐ$à%×)Ñ)¨&°"Ó5ˆIØð !ñ ð $Ð/Ü%Ð&6¼Ô=ÄSñ IØ:JôIô Fô )Ð)TÓUÐUØ7G�MÐ"3Ò4Ø.Ð:Ü%Ð&?ÄÔFÌcñ RØ:SôRô Oô )Ð)TÓUÐUØ7P�MÐ"3Ñ4ð "&§¡Ð*:¸DÓ!AˆØ*.¯(©(°:¸rÓ*B×*FÑ*FÐGWÐY]Ó*^Ð ØÐ$à%×)Ñ)¨&°"Ó5ˆIØ˜HÒ$¨°bª¸VÀ}Ñ=TØ"Ð.´:¸oÌtÔ3TØ6E�MÐ"2Ñ3ð ˜jÐ(Ð(ð .Ð9¼jÐIaÔcgÔ>hØ6N�MÐ"2Ñ3à˜jÐ(Ð(r[   c                 ó,  — ddl m} |j                  dd «      }d }|� ||j                  dd «      ¬«      }|j                  di «      }d }|�&|j                  dd «      }|�|j                  dd«      }t	        d	|d
   |d   ¬«      }|�||d<   |�||d<   |S )Nr   )Ú#AnthropicMcpServerToolConfigurationÚallowed_tools)r©  ÚheadersÚAuthorizationzBearer r<  rs  Ú
server_urlÚserver_label)rv   rs  rƒ   Útool_configurationÚauthorization_token)r‹  r¨  r|   Úreplacer&   )	r¯   r_  r¨  r©  r®  rª  r¯  Úbearer_tokenÚinitial_tools	            rY   rŠ  z+AnthropicConfig._map_openai_mcp_server_tools  sÈ   € ÝTà#Ÿx™x¨¸Ó>ˆØIMÐØÐ$Ù!DØ"Ÿh™h ¸Ó=ô"Ðð Ÿ™ )¨RÓ0ˆØ*.ÐØÐØ")§+¡+¨o¸tÓ"DˆLØÐ'Ø&2×&:Ñ&:¸9ÀbÓ&IÐ#ä4ØØ�\Ñ"Ø�nÑ%ô
ˆð Ð)Ø1CˆLÐ-Ñ.ØÐ*Ø2EˆLÐ.Ñ/ØÐr[   r  c                 ó  — g }g }|D �]z  }|j                  d«      dk(  �r|j                  d«      xs g D ]õ  }d|v r|j                  |«       Œd|vr‹d|v r‡t        t        |j                  dd«      |j	                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ c}}dœ«      }| j                  |«      \  }	}
|	�|j                  |	«       |
€Œ–|j                  |
«       Œ¨d|v sŒ­| j                  t        t        |«      «      \  }	}
|	�|j                  |	«       |
€Œå|j                  |
«       Œ÷ �Œ(d|v r|j                  |«       �Œ?| j                  |«      \  }}|�|j                  |«       |€�Œj|j                  |«       �Œ} ||fS c c}}w )Nrv   Ú	namespacer  rh  rÍ   rƒ   )rv   rÍ   )r|   r  r   r7   rŽ   r¦  )r¯   r  Úanthropic_toolsÚmcp_serversr_  Únestedr—   rX   ÚwrappedÚnested_toolÚ
nested_mcpÚnew_toolÚmcp_server_tools                rY   Ú
_map_toolszAnthropicConfig._map_tools�  s°  € ð "$ˆØˆØó %	8ˆDØ�x‰x˜Ó ;Ó.ð #Ÿh™h wÓ/Ò5°2ò ;�FØ%¨Ñ/à'×.Ñ.¨vÕ6Ø#¨6Ñ1°fÀÑ6Fô #'Ü3à(.¯
©
°6¸:Ó(FØ>D¿l¹l»n×,\±d°a¸ÐPQÐU[ÓP[¨Q°©TÓ,\ñó#˜ð 37×2GÑ2GÈÓ2PÑ/˜ ZØ&Ð2Ø+×2Ñ2°;Ô?Ø%Ñ1Ø'×.Ñ.¨zÕ:Ø# vÒ-Ø26×2GÑ2GÌÔMdÐflÓHmÓ2nÑ/˜ ZØ&Ð2Ø+×2Ñ2°;Ô?Ø%Ñ1Ø'×.Ñ.¨zÕ:ò1;ð2   4Ñ'Ø×&Ñ& tÖ,à,0×,AÑ,AÀ$Ó,GÑ)�˜/àÐ'Ø#×*Ñ*¨8Ô4Ø"Ò.Ø×&Ñ& Ö7ðK%	8ðL  Ð+Ð+ùó/ -]s   ÂF	ÂF	ÚmessagesÚname_forward_mapc                 ó¦  — |s| S g }| D �]Ä  }t        |t        «      s|j                  |«       Œ&|j                  d«      }|j                  d«      }|s|s|j                  |«       Œ^t        |«      }t        |t        «      rÎg }|D ]Â  }t        |t        «      s|j                  |«       Œ%|j                  d«      }	t        |	t        «      r|	j                  d«      nd}
t        |	t        «      rIt        |
t
        «      r9|
|v r5t        |	«      }||
   |d<   t        |«      }||d<   |j                  |«       Œ²|j                  |«       ŒÄ ||d<   t        |t        «      r|j                  d«      nd}t        |t        «      r,t        |t
        «      r||v rt        |«      }||   |d<   ||d<   |j                  t        t        |«      «       �ŒÇ |S )aª  Return a copy of `messages` with tool_call/function_call names
        rewritten using the per-request forward map.

        Only mutates messages whose tool_call/function_call name is *in* the
        forward map. Names absent from the map (already valid, no collision)
        round-trip untouched. We only deep-copy the entries we actually
        change to keep this O(turns-with-rewritten-tools), not O(history).
        Ú
tool_callsÚfunction_callrÍ   rƒ   N)r]   ri   r  r|   rg   re   r   r0   )r¾  r¿  Únew_messagesÚmsgrÁ  rÂ  Únew_msgÚ	new_callsÚtcÚfnÚfn_nameÚnew_fnÚnew_tcÚfc_nameÚnew_fcs                  rY   Ú_rewrite_tool_names_in_messagesz/AnthropicConfig._rewrite_tool_names_in_messages¾  s¾  € ñ  ØˆOØ68ˆØó  	AˆCÜ˜c¤4Ô(Ø×#Ñ# CÔ(ØØŸ™ Ó.ˆJØŸG™G OÓ4ˆMÙ¡mØ×#Ñ# CÔ(ØÜ˜3“iˆGÜ˜*¤dÔ+Ø�	Ø$ò -�BÜ% b¬$Ô/Ø!×(Ñ(¨Ô,Ø ØŸ™ 
Ó+�BÜ0:¸2¼tÔ0D˜bŸf™f VœnÈ$�GÜ! "¤dÔ+´
¸7ÄCÔ0HÈWÐXhÑMhÜ!% b£˜Ø)9¸'Ñ)B˜˜v™Ü!% b£˜Ø-3˜˜zÑ*Ø!×(Ñ(¨Õ0à!×(Ñ(¨Õ,ð-ð )2�˜Ñ%Ü3=¸mÌTÔ3R�m×'Ñ'¨Ô/ÐX\ˆGÜ˜-¬Ô.´:¸gÄsÔ3KÐPWÐ[kÑPkÜ˜mÓ,�Ø!1°'Ñ!:��v‘Ø+1�˜Ñ(Ø×Ñ¤Ô%5°wÓ ?Ö@ðA 	AðB Ðr[   c                 óH  — g }| xs g D ]�  }t        |t        «      sŒt        |j                  d«      t        «      r!|j                  di «      j                  d«      nd}|€|j                  d«      }t        |t        «      sŒz|sŒ}|j	                  |«       Œ� t        |«      S )aÜ  Build the (forward, reverse) tool-name maps for an OpenAI tools list.

        Operates on **OpenAI-format** tool dicts (pre-``_map_tools``). The
        production sanitization path uses ``_sanitize_tool_names_in_request``
        instead, which operates on **Anthropic-format** tools (post-
        ``_map_tools``, where ``type == "custom"``). This helper exists for
        callers that need to compute the maps from the raw OpenAI shape --
        e.g. test setup or future pre-mapping consumers.

        See _build_anthropic_tool_name_maps for the collision rules. Pulls
        the original name out of either ``{"function": {"name": ...}}``
        (legacy OpenAI shape) or ``{"name": ...}`` (rare top-level shape).
        rÍ   rƒ   N)r]   ri   r|   re   r  r™   )r  rˆ   r_  r‘   s       rY   Ú_build_request_tool_name_mapsz-AnthropicConfig._build_request_tool_name_mapsñ  s–   € ð" ,.ˆØ’K˜Rò 	0ˆDÜ˜d¤DÔ)ØÜ?IÈ$Ï(É(ÐS]ÓJ^Ô`dÔ?e�t—x‘x 
¨BÓ/×3Ñ3°FÔ;ÐkoˆHØÐØŸ8™8 FÓ+�Ü˜(¤CÕ(ªXØ×%Ñ% hÕ/ð	0ô /¨~Ó>Ð>r[   c                 ó4  — | j                  d«      }t        |t        «      r|si i fS g }|D ]^  }t        |t        «      sŒ|j                  d«      dk7  rŒ)|j                  d«      }t        |t        «      sŒK|sŒN|j                  |«       Œ` |si i fS t        |«      \  }}|s||fS g }|D ]{  }t        |t        «      rX|j                  d«      dk(  rDt        |j                  d«      t        «      r%|d   |v r|j                  i |¥d||d      i¥«       Œk|j                  |«       Œ} || d<   | j                  d«      }t        |t        «      rG|j                  d«      dk(  r3|j                  d«      }	t        |	t        «      r|	|v ri |¥d||	   i¥| d<   ||fS )aD  Sanitize ``optional_params['tools']`` and ``optional_params['tool_choice']``
        in place so every name matches Anthropic's ``^[a-zA-Z0-9_-]{1,128}$``.

        Returns ``(forward, reverse)`` for use by message-history rewriting
        and response translation. ``forward[original] = sanitized`` is only
        populated for names that were actually rewritten -- i.e. either
        contained an invalid character or collided with another tool's
        sanitized form. Names already valid AND unique pass through and are
        absent from both maps.

        Only ``type == "custom"`` tools (the OpenAI function-tool shape) are
        considered. Hosted tools (``web_search``, ``bash``, ``code_execution``,
        ``computer_*``, ``mcp``, ...) own reserved names defined by Anthropic
        and must not be touched.
        r  rv   rf  rƒ   r  r_  )r|   r]   rg   ri   re   r  r™   )
rù   r  rˆ   rq  rƒ   r�   r˜   Ú	new_toolsr  Útc_names
             rY   Ú_sanitize_tool_names_in_requestz/AnthropicConfig._sanitize_tool_names_in_request  s¸  € ð& '×*Ñ*¨7Ó3ˆÜ˜%¤Ô&©eØ�r�6ˆMð ,.ˆØò 	,ˆAÜ˜a¤Ô&ØØ�u‰u�V‹} Ò(ØØ—5‘5˜“=ˆDÜ˜$¤Õ$ªØ×%Ñ% dÕ+ð	,ñ Ø�r�6ˆMä:¸>ÓJÑˆ�Ùà˜GÐ#Ð#ð ')ˆ	Øò 		$ˆAä˜1œdÔ#Ø—E‘E˜&“M XÒ-Ü˜qŸu™u V›}¬cÔ2Ø�f‘I Ñ(à× Ñ Ð!B AÐ!B v¨w°q¸±yÑ/AÑ!BÕCà× Ñ  Õ#ð		$ð $-ˆ˜Ñ ð -×0Ñ0°Ó?ˆÜ�k¤4Ô(¨[¯_©_¸VÓ-DÈÒ-NØ(Ÿ_™_¨VÓ4ˆGÜ˜'¤3Ô'¨G°wÑ,>ð2Ø!ð2à˜G GÑ,ñ2� Ñ.ð
 ˜ÐÐr[   c                 óH   — |sy|D ]  }|j                  dd«      }|dv sŒ y y)z9Check if tool search tools are present in the tools list.Frv   r<  r  T©r|   )r¯   r  r_  rb  s       rY   Ú_detect_tool_search_toolsz)AnthropicConfig._detect_tool_search_toolsX  s>   € áØàò 	ˆDØŸ™ ¨Ó,ˆIØð ò ñ ð	ð r[   c                 óŠ   — g }g }|D ]7  }|j                  dd«      r|j                  |«       Œ'|j                  |«       Œ9 ||fS )z’
        Separate tools into deferred and non-deferred lists.

        Returns:
            Tuple of (non_deferred_tools, deferred_tools)
        r€  F)r|   r  )r¯   r  Únon_deferredÚdeferredr_  s        rY   Ú_separate_deferred_toolsz(AnthropicConfig._separate_deferred_toolsf  sR   € ð !ˆØˆàò 	*ˆDØ�x‰x˜¨Ô/Ø—‘ Õ%à×#Ñ# DÕ)ð		*ð ˜XÐ%Ð%r[   ÚcontentÚdeferred_toolsc                 ó�  — |s|S i }|D ]>  }|j                  d«      xs! |j                  di «      j                  d«      }|sŒ:|||<   Œ@ g }|D ]u  }t        |t        «      rR|j                  d«      dk(  r>|j                  d«      }|r||v r|j                  ||   «       ŒS|j                  |«       Œe|j                  |«       Œw |S )a7  
        Expand tool_reference blocks to full tool definitions.

        When Anthropic's tool search returns results, it includes tool_reference blocks
        that reference tools by name. This method expands those references to full
        tool definitions from the deferred_tools catalog.

        Args:
            content: Response content that may contain tool_reference blocks
            deferred_tools: List of deferred tools that can be referenced

        Returns:
            Content with tool_reference blocks expanded to full tool definitions
        rƒ   rÍ   rv   Útool_referencerš  )r|   r]   ri   r  )r¯   rÜ  rÝ  Útool_mapr_  rš  Úexpanded_contentrS  s           rY   Ú_expand_tool_referencesz'AnthropicConfig._expand_tool_referencesx  sÛ   € ñ& ØˆNð ˆØ"ò 	+ˆDØŸ™ Ó(ÒP¨D¯H©H°ZÀÓ,D×,HÑ,HÈÓ,PˆIÚØ&*�˜Ò#ð	+ð #%ÐØò 
	.ˆDÜ˜$¤Ô%¨$¯(©(°6Ó*:Ð>NÒ*NØ ŸH™H [Ó1�	Ù ¨hÑ!6à$×+Ñ+¨H°YÑ,?Õ@ð %×+Ñ+¨DÕ1à ×'Ñ'¨Õ-ð
	.ð  Ðr[   r  c                 ó6  — d }t        |t        «      r)|j                  «       rt        j                  du r|S |g}|S t        |t
        «      rMg }|D ]6  }|j                  «       rt        j                  du rŒ&|j                  |«       Œ8 t        |«      dkD  r|}|S )NTr   )r]   re   Úisspacer   rú   rg   r  r�   )r¯   r  Únew_stopÚnew_vrX   s        rY   Ú_map_stop_sequencesz#AnthropicConfig._map_stop_sequences¥  s•   € Ø%)ˆÜ�dœCÔ à—‘”¤7×#6Ñ#6¸$Ñ#>à�Ø�vˆHð ˆô ˜œdÔ#ØˆEØò  �à—I‘I”K¤G×$7Ñ$7¸4Ñ$?àØ—‘˜Q•ð ô �5‹z˜AŠ~Ø �Øˆr[   r  c                 óÈ  — | �| dk(  ryt         j                  ||«      rt        dd¬«      S | dk(  rt        dt        ¬«      S | d	k(  rt        dt        ¬«      S | d
k(  rt        dt
        ¬«      S | dk(  rt        dt        ¬«      S | dk(  rt        dt        ¬«      S | dk(  rt        dt        t        t        «      ¬«      S t        j                  j                  d| ›d�||¬«      ‚)zpCapability probes read the cost map under ``custom_llm_provider``; ``llm_provider`` only tags raised exceptions.Nr^  ÚadaptiveÚ
summarized)rv   Údisplayrš   Úenabled©rv   Úbudget_tokensr›   rœ   r�   rž   r    zUnmapped reasoning effort: zM. Must be one of: 'minimal', 'low', 'medium', 'high', 'xhigh', 'max', 'none'.r
  )r¦   rî   r,   r   r   r   r   r   rž   r   r   r   r  r  ©r  rÀ   r»   r  s       rY   Ú_map_reasoning_effortz%AnthropicConfig._map_reasoning_effort¹  s0  € ð Ð#Ð'7¸6Ò'AØÜ×6Ñ6°uÐ>QÔRô *ØØ$ôð ð  Ò&Ü)ØÜJôð ð  Ò)Ü)ØÜMôð ð  Ò'Ü)ØÜKôð ð  Ò(Ü)ØÜLôð ð  Ò&Ü)ØÜJôð ð  Ò*Ü)ØÜ!ÜDÜ8óôð ô ×$Ñ$×4Ñ4à1Ð2BÐ1Eð F.ð /ð Ø)ð 5ó ð r[   r  c                 ó®   — | j                  d«      }|�t        |t        «      s| S |t        k  ry||k  r| S t	        | j                  dd«      |dz
  ¬«      S )a+  Cap a legacy ``thinking.budget_tokens`` below ``max_tokens`` (Anthropic
        requires ``max_tokens > budget_tokens``). Returns the (possibly capped)
        thinking dict, or ``None`` when ``max_tokens`` is too small to fit even the
        minimum thinking budget and thinking should be dropped.rî  Nrv   rì  rŠ   rí  )r|   r]   r`   r   r,   )r  r§   Úbudgets      rY   Ú!cap_thinking_budget_to_max_tokensz1AnthropicConfig.cap_thinking_budget_to_max_tokensö  s^   € ð !Ÿ™ _Ó5ˆØÐ¤Z°¼Ô%<ØˆOØÔ=Ò=ØØ�JÒØˆOÜ%¨8¯<©<¸À	Ó+JÐZdÐghÑZhÔiÐir[   c                 ó>   — |€y d }d|v r|d   }|S d|v r|d   d   }|S )NÚresponse_schemaÚjson_schemarr   rV   )r¯   ry   rö  s      rY   Ú)_extract_json_schema_from_response_formatz9AnthropicConfig._extract_json_schema_from_response_format  sI   € Øˆ=ØØ#'ˆØ Ñ%ØÐ 1Ñ2ˆKð Ðð ˜eÑ#Ø Ñ.¨xÑ8ˆKàÐr[   c                 óþ   — | j                  |«      }|€y dd l}ddlm}m} |j                  |«      }|j                  d|j                  di «      «      }|r ||||¬«       | j                  |«      }t        d|¬«      S )Nr   )ÚDEFS_MAX_INLINED_BYTESÚunpack_defsrA  Údefinitions)Úmax_inlined_bytesrö  )rv   rr   )	r÷  r±   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsrù  rú  Údeepcopyr  rH  r)   )r¯   ry   rö  r±   rù  rú  ÚdefsÚfiltered_schemas           rY   Ú.map_response_format_to_anthropic_output_formatz>AnthropicConfig.map_response_format_to_anthropic_output_format  s†   € Ø#'×#QÑ#QÐRWÓ#XˆØÐØó 	÷	
ð
 —m‘m KÓ0ˆØ!—o‘o g¨{¯©¸}ÈbÓ/QÓRˆÙÙ˜ TÐ=SÕTð "&×!DÑ!DÀ[Ó!Qˆä$ØØ"ô
ð 	
r[   Úis_thinking_enabledc                 ón   — dg}|�|d   |v ry | j                  |«      }|€y 	 | j                  |¬«      }|S )NÚtextrv   )rö  )r÷  Ú*_create_json_tool_call_for_response_format)r¯   ry   rù   r  Úignore_response_format_typesrö  r�  s          rY   Ú%map_response_format_to_anthropic_toolz5AnthropicConfig.map_response_format_to_anthropic_tool-  sa   € ð 06¨hÐ$Øˆ=˜E &™MÐ-IÑIØà*.×*XÑ*XÐY^Ó*_ˆØÐØð	ð ×FÑFØ#ð Gó 
ˆð ˆr[   c                 óx  — t        t        |«      }t        dd¬«      }|j                  d«      }|�jt	        d¬«      }t        j
                  j                  «       }|j                  d«      }|�-|j                  «       D ]  \  }}	||v sŒ|dk7  sŒ|	||<   Œ ||d<   |j                  d«      }
|
�t        |
   |d	<   |S )
NÚweb_search_20250305Ú
web_searchrr  Úuser_locationÚapproximater\  rv   Úsearch_context_sizer}  )	r   r:   r-   r|   r.   Ú__annotations__ÚkeysrŽ   r   )r¯   ry   Úvalue_typedÚhosted_web_search_toolr  Úanthropic_user_locationÚanthropic_user_location_keysÚuser_location_approximaterµ   Úuser_location_valuer  s              rY   Úmap_web_search_toolz#AnthropicConfig.map_web_search_toolD  sç   € ô "Ô"8¸%Ó@ˆÜ(>Ø&Øô)
Ðð  +Ÿ™¨Ó?ˆØÐ$Ü-KÐQ^Ô-_Ð#Ü2P×2`Ñ2`×2eÑ2eÓ2gÐ(Ø/<×/@Ñ/@ÀÓ/OÐ%Ø(Ð4Ø0I×0OÑ0OÓ0Qò KÑ,�CÐ,ØÐ:Ò:¸sÀf»}Ø7JÐ/°Ò4ðKð ;RÐ& Ñ7ð &1§_¡_Ð5JÓ%KÐØÐ*Ü1SÐTgÑ1hÐ" :Ñ.à%Ð%r[   r  c                 ó„  — t        | t        «      rd| v r| S t        | t        «      ršg }| D ]�  }t        |t        «      sŒ|j                  d«      }|dk(  sŒ+ddi}|j                  d«      }|�'t        |t        t
        f«      rdt	        |«      dœ|d	<   |D ]  }|d
vsŒ||   ||<   Œ |j                  |«       Œ� |rd|iS y)aü  
        OpenAI format: [{"type": "compaction", "compact_threshold": 200000}]
        Anthropic format: {
            "edits": [
                {
                    "type": "compact_20260112",
                    "trigger": {"type": "input_tokens", "value": 150000}
                }
            ]
        }

        Args:
            context_management: OpenAI or Anthropic context_management parameter

        Returns:
            Anthropic-formatted context_management dict, or None if invalid
        Úeditsrv   Ú
compactionÚcompact_20260112Úcompact_thresholdNÚinput_tokens)rv   ry   Útrigger>   rv   r  )r]   ri   rg   r|   r`   rb   r  )r  Úanthropic_editsÚentryÚ
entry_typeÚanthropic_editr  r—   s          rY   Ú*map_openai_context_management_to_anthropicz:AnthropicConfig.map_openai_context_management_to_anthropic_  sü   € ô, Ð(¬$Ô/°GÐ?QÑ4QØ%Ð%ô Ð(¬$Ô/Ø%'ˆOØ+ò ;�Ü! %¬Ô.Øà"ŸY™Y vÓ.�
Ø Ó-Ø6<Ð>PÐ5Q�NØ(-¯	©	Ð2EÓ(FÐ%à(Ð4¼ÐDUÔX[Ô]bÐWcÔ9dà$2Ü%(Ð):Ó%;ñ5˜ yÑ1ð
 #ò 9˜Øð %ò ð 16°a±˜N¨1Ò-ð9ð $×*Ñ*¨>Õ:ð-;ñ0 Ø Ð1Ð1àr[   Únon_default_paramsc           	      ó
  — | j                  |¬«      }|j                  «       D �]Ð  \  }}|dk(  s|dk(  r4t        |t        «      r|nt	        dt        t        |«      «      «      |d<   ŒE|dk(  r0| j                  |«      \  }}	| j                  ||¬«      }|	sŒt|	|d<   Œz|dk(  s|d	k(  r:| j                  |j                  d«      |j                  d	«      ¬
«      }
|
€Œ¸|
|d<   Œ¾|dk(  r
|du r||d<   ŒÍ|dk(  r<t        |t        «      st        |t        «      r| j                  |«      }|€�Œ||d<   �Œ|dk(  s|dk(  rt        j                  ||||||¬«       �Œ5|dk(  rŒt        |t        «      r|t        j!                  |d| j"                  «      r| j%                  |«      }|�A||d<   n;| j'                  |||«      }|€�Œ›|st(        ddœ}
|
|d<   | j                  ||g¬«      }d|d<   �ŒÆ|dk(  r&|�$t        |t        «      rt+        |«      r	d|i|d<   �Œñ|dk(  r÷t        |t        «      rà|j                  d«      dk(  rÌt        j-                  || j"                  «      s¬|j                  d«      xs |j                  d«      }t        j/                  d|| j"                  | j"                  ¬«      }|�t        j1                  ||«      nd }|�||d<   �Œ®t2        j4                  j7                  t8        |«       |j;                  dd «       �Œæ||d<   �Œí|d k(  ró|}t        |t        «      r|j                  d!«      }t        |t        «      s�Œ't        j/                  ||| j"                  | j"                  ¬«      }|€&|j;                  dd «       |j;                  d"d «       �Œ|||d<   t        j-                  || j"                  «      s�Œ£t<        j                  |«      }|€"t        j?                  ||| j"                  ¬#«       d!|i|d"<   �Œå|d$k(  rEt        |t        «      r5| jA                  tC        tD        |«      «      }| j                  ||g¬«       �Œ/|d%k(  r||d%<   �Œ;|d&k(  r4t        |t        t        f«      s�ŒX| jG                  |«      }|€�Œm||d&<   �Œt|d'k(  r:t        |t        «      r*||d'<   t        jI                  |||| jJ                  ¬(«       �Œ³|d)k(  s�Œºt        |t        «      s�ŒÌ||d)<   �ŒÓ | jM                  ||¬*«       |S )+N)r#  r§   r  rŠ   r  )rù   r  r¶  r  r  )r  rY  r  Tr  r¨   r©   rª   ©rù   rÀ   Úparamry   rú   Ú
output_keyr  Ú!supports_native_structured_outputÚoutput_formatr_  ©rƒ   rv   Ú	json_moder  Úuser_idr¬   r  rv   ré  r›   rï  r  rì   Úoutput_configr  r  r  r  rü   ©rÀ   rù   rú   r»   r  )r#  rù   )'r  rŽ   r]   r`   rž   Úroundr½  Ú_add_tools_to_optional_paramsrd  r|   re   rg   rç  r¦   Ú_apply_sampling_paramri   rê   r¾   r  r  r   Ú_valid_user_idrî   rð  ró  r   r  r  r£   r  r¡   r  r  r   r:   r"  r  r»   Ú+update_optional_params_with_thinking_tokens)r¯   r#  rù   rÀ   rú   r  r&  ry   rµ  r¶  ra  Ú_valueÚ_output_formatr�  r§   Úlegacy_thinkingÚcapped_thinkingÚeffort_valueÚmapped_thinkingÚmapped_effortr  Úanthropic_context_managements                         rY   Úmap_openai_paramsz!AnthropicConfig.map_openai_params˜  sw  € ð &*×%=Ñ%=ÐQcÐ%=Ó%dÐð /×4Ñ4Ó6ó U	9‰LˆE�5Ø˜Ò$¨Ð1HÒ(HÜ9CÀEÌ3Ô9O±ÔUXÐYZÔ\_Ô`eÐfkÓ`lÓ\mÓUn� Ò-Ø˜'Ò!Ø/3¯©¸uÓ/EÑ,� Ø"&×"DÑ"DØ$3¸?ð #Eó #�ò Ø5@�O MÒ2Ø˜-Ò'¨5Ð4IÒ+IØCG×CXÑCXØ 2× 6Ñ 6°}Ó EØ&8×&<Ñ&<Ð=RÓ&Sð DYó D�ð
  Ñ+Ø5A�O MÒ2Ø˜(Ò" u°¡}Ø,1� Ò)Ø˜&’¤j°¼Ô&<Ä
È5ÔRVÔ@WØ×1Ñ1°%Ó8�ØÒ%Ø8>�OÐ$4Ó5Ø˜-Ò'¨5°GÒ+;Ü×5Ñ5Ø$3ØØØØ +Ø$ð 6ö ð Ð+Ò+´
¸5Ä$Ô0GÜ"×=Ñ=ØØ7Ø×+Ñ+ôð
 &*×%XÑ%XÐY^Ó%_�NØ%Ð1Ø;I˜¨Ò8à ×FÑFÀuÈoÐ_rÓs�EØ�}Ù Ù.ä$=Ø$*ñ(˜ð :F˜¨Ñ6à&*×&HÑ&HÐYhÐqvÐpwÐ&HÓ&x�OØ/3� Ó,à˜’ØÐ%Ü˜u¤cÔ*Ü" 5Ô)à/8¸%Ð.@� 
Ó+Ø˜*Ò$ä˜u¤dÔ+ØŸ	™	 &Ó)¨ZÒ7Ü+×GÑGÈÈt×OfÑOfÔgð "4×!7Ñ!7Ð8OÓ!PÒ!xÐTf×TjÑTjÐkwÓTx�JÜ&5×&KÑ&KØ)1Ø#Ø,0×,CÑ,CØ%)×%<Ñ%<ð	 'Ló '�Oð +Ð6ô (×IÑIÈ/Ð[eÔfà!ð $ð
 'Ð2Ø6E˜¨
Ó3ä×.Ñ.×6Ñ6ÜFØ!ôð (×+Ñ+¨J¸Ö=à27�O JÓ/ØÐ,Ò,ð  %�Ü˜l¬DÔ1Ø#/×#3Ñ#3°HÓ#=�LÜ! ,´Ô4ÙÜ"1×"GÑ"GØ%1ØØ(,×(?Ñ(?Ø!%×!8Ñ!8ð	 #Hó #�ð #Ð*Ø#×'Ñ'¨
°DÔ9Ø#×'Ñ'¨¸Ö>à2A�O JÑ/Ü&×BÑBÀ5È$×JaÑJaÖbÜ(P×(TÑ(TÐUaÓ(b˜Ø(Ð0Ü+×KÑKØ&+Ø&2Ø-1×-DÑ-Dð Lô ð
 =EÀmÐ;T˜¨Ó8ØÐ.Ò.´:¸eÄTÔ3JØ)-×)AÑ)AÄ$ÔG]Ð_dÓBeÓ)fÐ&Ø×2Ñ2À?Ð[qÐZrÐ2ÖsØ˜/Ò)Ø38� Ó0ØÐ.Ò.ä˜e¤d¬D \Ö2Ø37×3bÑ3bÐchÓ3iÐ0Ø3Ò?Ø@\˜Ð(<Ó=Ø˜'Ò!¤j°¼Ô&<Ø+0� Ñ(Ü×7Ñ7ØØ$3Ø +Ø(,×(@Ñ(@ð	 8ö ð ˜/Ô)¬j¸ÄÖ.Eà38� Ó0ðkU	9ðp 	×8Ñ8Ø1À?ð 	9ô 	
ð Ðr[   rö  c                 ó˜   — t        d¬«      }|€d|d<   i |d<   n|j                  t        t         |«      «       t        t        |¬«      }|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
        rp   r\  TrE  r@  )rƒ   rh  )r%   Úupdater   r'   r   )r¯   rö  rŽ  r�  s       rY   r  z:AnthropicConfig._create_json_tool_call_for_response_formatJ  sZ   € ô 6JØô6
ˆð Ðð 59ˆMÐ0Ñ1Ø*,ˆM˜,Ò'à× Ñ ¤Ô&:¸KÓ!HÔIä,Ô2KÐZgÔhˆØˆr[   c                  ó   — y)a!  
        Whether to drop x-anthropic-billing-header system blocks before sending upstream.

        The first-party Anthropic API uses these blocks for Claude Code attribution, so the
        base config keeps them. Providers that reject them (e.g. Bedrock) override this to True.
        FrV   rº   s    rY   Úshould_strip_billing_metadataz-AnthropicConfig.should_strip_billing_metadataf  s   € ð r[   c                 ó&  — g }g }t        |«      D �]N  \  }}|d   dk(  sŒ|j                  |«       t        d
i |¤Ž}t        |d   t        «      rY|d   sŒE| j                  «       r|d   j                  d«      rŒjt        d|d   ¬«      }d|v r|d   |d<   |j                  |«       Œ˜t        |d   t        «      sŒ¬|d   D ]›  }|j                  d«      }	|j                  d«      dk(  r|	sŒ+| j                  «       r(|j                  d«      dk(  r|	r|	j                  d«      rŒct        |j                  d«      |	¬«      }d|v r|d   |d<   |j                  |«       Œ� �ŒQ t        |«      d	kD  r!t        |«      D ]  }|j                  |«       Œ |S )a  
        Translate system message to anthropic format.

        Removes system message from the original list and returns a new list of anthropic system message content.
        When should_strip_billing_metadata() is True, x-anthropic-billing-header system blocks are dropped.
        Úroler­   rÜ  zx-anthropic-billing-header:r  )rv   r  r  rv   r   rV   )Ú	enumerater  r3   r]   re   r@  rp  r+   rg   r|   r�   Úreversedr  )
r¯   r¾  Úsystem_prompt_indicesÚanthropic_system_message_listÚidxrþ   Úsystem_message_blockÚ anthropic_system_message_contentÚ_contentÚ
text_values
             rY   Útranslate_system_messagez(AnthropicConfig.translate_system_messageo  sÐ  € ð (*ÐØTVÐ%Ü% hÓ/ó '	_‰LˆC�Ø�v‰ (Ó*Ø%×,Ñ,¨SÔ1Ü'BÑ'MÀWÑ'MÐ$ÜÐ2°9Ñ=¼sÔCà/°	Ò:Ø Ø×9Ñ9Ô;Ð@TÐU^Ñ@_×@jÑ@jØ5ôAð !Ü7TØ#Ø1°)Ñ<ô8Ð4ð 'Ð*>Ñ>ØL`ÐapÑLqÐ8¸ÑIØ1×8Ñ8Ð9YÕZÜ ¨	Ñ 2´DÕ9Ø$+¨IÑ$6ò _˜à%-§\¡\°&Ó%9˜
Ø#Ÿ<™<¨Ó/°6Ò9Á*Ø$à ×>Ñ>Ô@Ø (§¡¨VÓ 4¸Ò >Ù *Ø *× 5Ñ 5Ð6SÔ Tà$Ü;XØ!)§¡¨fÓ!5Ø!+ô<Ð8ð +¨hÑ6ØPXÐYhÑPiÐ<¸_ÑMà5×<Ñ<Ð=]Õ^ò'_ð)'	_ôR Ð$Ó%¨Ò)ÜÐ 5Ó6ò "�Ø—‘˜SÕ!ð"ð -Ð,r[   c                 óh  — d}|D ]J  }|j                  dd«      }|sŒt        |t        «      sŒ)|D ]  }|j                  dd«      }|dk(  sŒd} ŒJ ŒL |r^|D ]=  }|j                  dd«      }	|	sŒt        |	t        «      sŒ)|	j	                  d«      sŒ;|c S  |j                  t        dd¬	«      «       |S )
z:if 'container_upload' in messages, add code_execution toolFrÜ  Nrv   Úcontainer_uploadTÚcode_executionÚcode_execution_20250522r*  )r|   r]   rg   re   rp  r  r"   )
r¯   r¾  r  Úadd_code_execution_toolrþ   Úmessage_contentrÜ  Úcontent_typer_  rb  s
             rY   rQ  z'AnthropicConfig.add_code_execution_tool§  sÌ   € ð #(ÐØò 	ˆGØ%Ÿk™k¨)°TÓ:ˆOÚ¤:¨o¼tÕ#DØ.ò �GØ#*§;¡;¨v°tÓ#<�LØ#Ð'9Ó9Ø26Ð/Ùñ	ð	ñ #àò !�Ø ŸH™H V¨TÓ2�	Ú¤¨I´sÕ!;À	×@TÑ@TÐUeÕ@fØ ’Lð!ð �L‰LÜ*Ø)Ø2ôôð ˆr[   rª  Ú
beta_valuec                 ó¶   — |j                  d«      }|€||d<   y|j                  d«      D �cg c]  }|j                  «       ‘Œ }}||vr|› d|› �|d<   yyc c}w )a  
        Ensure a beta header value is present in the anthropic-beta header.
        Merges with existing values instead of overriding them.

        Args:
            headers: Dictionary of headers to update
            beta_value: The beta header value to add
        zanthropic-betaNú,r=  )r|   ÚsplitÚstrip)r¯   rª  rT  Úexisting_betaÚbetaÚexisting_valuess         rY   Ú_ensure_beta_headerz#AnthropicConfig._ensure_beta_headerÅ  st   € ð  'Ÿ{™{Ð+;Ó<ˆØÐ Ø(2ˆGÐ$Ñ%ØØ;H×;NÑ;NÈsÓ;SÖ!T°4 $§*¡*¥,Ð!TˆÐ!TØ˜_Ñ,Ø+8¨/¸¸J¸<Ð(HˆGÐ$Ò%ð -ùò "Us   ­Ac                 óˆ  — g }t        |t        «      rd|v r|j                  dg «      }nt        |t        «      r|}nyd}d}|D ]#  }|j                  dd«      }|dk(  s|dk(  rd}Œ"d}Œ% |r*| j	                  |t
        j                  j                  «       |r+| j	                  |t
        j                  j                  «       yy)	zQ
        Add appropriate beta headers based on context_management edits.
        r  NFrv   r<  r  r  T)	r]   ri   r|   rg   r\  r   ÚCOMPACT_2026_01_12ry   ÚCONTEXT_MANAGEMENT_2025_06_27)r¯   rª  r  r  Úhas_compactÚ	has_otherÚeditÚ	edit_types           rY   Ú&_ensure_context_management_beta_headerz6AnthropicConfig._ensure_context_management_beta_headerÖ  sÒ   € ð ˆäÐ(¬$Ô/°GÐ?QÑ4QØ&×*Ñ*¨7°BÓ7‰EäÐ*¬DÔ1Ø&‰Eð àˆØˆ	àò 	!ˆDØŸ™ ¨Ó,ˆIØÐ.Ò.°)¸|Ò2KØ"‘à ‘	ð	!ñ Ø×$Ñ$ WÔ.J×.]Ñ.]×.cÑ.cÔdñ Ø×$Ñ$ØÜ,×JÑJ×PÑPõð r[   c                 ót  — |j                  dd«      }|r|S |j                  dg «      }|D ]í  }|j                  dd«      rc|j                  d«      j                  t        j                  j                  «      r+| j                  |t        j                  j                  «       Œx|j                  dd«      sŒ‹|j                  d«      j                  t        j                  j                  «      sŒÄ| j                  |t        j                  j                  «       Œï |j                  d«      �| j                  ||d   «       |j                  d«      }|j                  d«      €!t        |t        «      r;|j                  d	«      �*| j                  |t        j                  j                  «       |j                  d
«      dk(  r*| j                  |t        j                  j                  «       |D ]G  }|j                  d«      t        k(  sŒ| j                  |t        j                   j                  «        |S  |S )z,Update headers with optional anthropic beta.Úis_vertex_requestFr  rv   Nr  r-  r)  rF  rü   Úfast)r|   rp  r   Ú	WEB_FETCHry   r\  r   ÚWEB_FETCH_2025_09_10ÚMEMORYr_  rd  r]   ri   ÚSTRUCTURED_OUTPUT_2025_09_25ÚFAST_MODE_2026_02_01r   ÚADVISOR_TOOL_2026_03_01)r¯   rª  rù   rf  Ú_toolsr_  r-  s          rY   Ú+update_headers_with_optional_anthropic_betaz;AnthropicConfig.update_headers_with_optional_anthropic_betaú  sß  € ð
 $3×#6Ñ#6Ð7JÈEÓ#RÐÙØˆNà'×+Ñ+¨G°RÓ8ˆØò 	ˆDØ�x‰x˜ Ô%¨$¯(©(°6Ó*:×*EÑ*EÔF\×FfÑFf×FlÑFlÔ*mØ×(Ñ(¨Ô2N×2cÑ2c×2iÑ2iÕjØ—‘˜& $Õ'¨D¯H©H°VÓ,<×,GÑ,GÔH^×HeÑHe×HkÑHkÕ,lØ×(Ñ(ØÜ0×NÑN×TÑTõð		ð ×ÑÐ3Ó4Ð@Ø×7Ñ7¸ÀÐQeÑAfÔgØ.×2Ñ2°?ÓCˆØ×Ñ˜Ó/Ð;Ü�}¤dÔ+°×0AÑ0AÀ(Ó0KÐ0Wà×$Ñ$ WÔ.J×.gÑ.g×.mÑ.mÔnØ×Ñ˜wÓ'¨6Ò1Ø×$Ñ$ WÔ.J×._Ñ._×.eÑ.eÔfØò 	ˆDØ�x‰x˜ÓÔ#>Ó>Ø×(Ñ(¨Ô2N×2fÑ2f×2lÑ2lÔmØØˆð		ð ˆr[   Úlitellm_paramsc           	      ó:  — 	 ddl m} d|vr.|�,t        |«      r!| j                  t	        d¬«      «      \  |d<   }|j                  d«      �Y|�Wt        |«      rLt        |«      sAt        j                  r1|j                  dd«       t        j                  j                  d«       t        j                  ||t        j                  xs |j                  d	«      d
u | j                   ¬«       t#        j$                  ||| j&                  ¬«       | j)                  ||¬«      }| j+                  |¬«      \  }}	|r| j-                  ||«      }|	rt/        |t0        «      r	|	|t2        <   | j5                  |¬«      }
t7        |
«      dkD  r|
|d<   	  |||| j&                  ¬«      }|j                  d«      xs g }t=        d„ |D «       «      }|st?        |«      }tA        tB        tD        t0        z     dz  |j                  d«      «      xs g }| jG                  ||¬«      }t7        |«      dkD  r||d<   t        j                  jI                  |¬«      }|jK                  «       D ]  \  }}||vsŒ|||<   Œ |j                  dd«      }|r1t/        |t0        «      r!d|v r|d   �tM        |d   «      r
d|d   i|d<   d|v rBt/        |d   t0        «      r/|d   j                  d«      }|�d|i|d<   n|j                  d«       |j                  dd«       |j                  dd«       |j                  dd«      }|�,t        jO                  ||d||j                  d	«      d
u d¬«       ||dœ|¥}| jQ                  |||¬ «       |S # t8        $ r}t;        d|› d|› �¬«      ‚d}~ww xY w)!z9
        Translate messages to anthropic format.
        r   )Úanthropic_messages_ptr  Nr¹   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ú   Tr.  )rÀ   rù   r»   )rª  rù   )rù   ©r¾  r­   )rÀ   r¾  r  rý   z
Received Messages=)rÿ   rþ   c              3   óp   K  — | ].  }t        |t        «      xr |j                  d «      t        k(  –— Œ0 y­wro  )r]   ri   r|   r   )rx   rq  s     rY   r{   z4AnthropicConfig.transform_request.<locals>.<genexpr>ƒ  s.   è ø€ ÒtÐdeœ: a¬Ó.Ò_°1·5±5¸³=ÔD_Ñ3_Ó_Ñtùs   ‚46)r¾  r  rŠ   r¿   r¬   r,  rf  Úclient_metadatar«   r%  )rÀ   r¾  )ÚdatarÀ   rù   ))Ú3litellm.litellm_core_utils.prompt_templates.factoryrr  rG   r½  rD   r|   rH   rE   r   Úmodify_paramsr  r  r  r¦   r  rú   r»   rM   Úmaybe_drop_disabled_thinkingr¾   ro  rÔ  rÎ  r]   ri   r‚   rL  r�   rÈ   rL   rÞ   rO   r   rg   r!   rQ  rÃ   rŽ   r2  r1  Ú_apply_output_config)r¯   rÀ   r¾  rù   rp  rª  rr  r…   Ú_name_forward_mapÚ_name_reverse_maprF  Úanthropic_messagesÚeÚ
_all_toolsÚ_has_advisorrn  r  rÆ   r—   rX   Ú_litellm_metadataÚ_user_idr«   rv  s                           rY   Útransform_requestz!AnthropicConfig.transform_request  s"  € ð 	Uõ	
ð ˜/Ñ)¨hÐ.BÔG[Ð\dÔGeØ*.¯/©/¼.Ð]hÔ:iÓ*jÑ'ˆO˜GÑ$ að ×Ñ 
Ó+Ð7ØÐ$ÜEÀhÔOÜ=¸hÔGä×$Ò$Ø×#Ñ# J°Ô5Ü×&Ñ&×.Ñ.ðcôô
 	×/Ñ/ØØ+Ü×+Ñ+ÒX¨~×/AÑ/AÀ-Ó/PÐTXÐ/XØ $× 8Ñ 8ð	 	0ô 	
ô 	×7Ñ7ØØ+Ø $× 7Ñ 7õ	
ð ×BÑBÈ7ÐdsÐBÓtˆð, 04×/SÑ/SØ+ð 0Tó 0
Ñ,ÐÐ,ñ Ø×;Ñ;¸HÐFWÓXˆHÙ¤¨N¼DÔ!AØBSˆNÔ>Ñ?ð 04×/LÑ/LÐV^Ð/LÓ/_Ð%äÐ,Ó-°Ò1Ø(EˆO˜HÑ%ð
	Ù!6ØØ!Ø!×4Ñ4ô"Ðð ,×/Ñ/°Ó8Ò>¸Bˆ
ÜÑtÐisÔtÓtˆÙÜ!CÐDVÓ!WÐô ÜÔ,¬tÑ3Ñ4°tÑ;Ø×#Ñ# GÓ,óò ð ð 	ð ×3Ñ3Ð=OÐW]Ð3Ó^ˆÜˆu‹:˜Š>Ø',ˆO˜GÑ$ô  ×/Ñ/×:Ñ:ÀÐ:ÓGˆØ—L‘L“Nò 	'‰DˆAˆqà˜Ò(à%&� Ò"ð		'ð $2×#5Ñ#5°jÀ$Ó#GÐáÜÐ,¬dÔ3ØÐ.Ñ.Ø! )Ñ,Ð8ÜÐ0°Ñ;Ô<à+4Ð6GÈ	Ñ6RÐ*SˆO˜JÑ'ð ˜Ñ(¬Z¸È
Ñ8SÔUYÔ-ZØ-¨jÑ9×=Ñ=¸iÓHˆHØÐ#Ø/8¸(Ð.C� 
Ò+à×#Ñ# JÔ/ð 	×ÑÐ/°Ô6Ø×ÑÐ-¨tÔ4ð
 '×*Ñ*¨7°DÓ9ˆØÐÜ×1Ñ1Ø /ØØØØ*×.Ñ.¨}Ó=ÀÐEØ"ð 2ô ð Ø*ñ
ð ð
ˆð 	×!Ñ! t°5È/Ð!ÔZàˆøô] ò 	Ü ØØ˜#Ð1°(°Ð<ôð ûð	ús   Æ	M: Í:	NÎNÎNrv  c                 óz  — d|vry|j                  d«      }|rt        |t        «      syt        j                  du re| j                  || j                  «      sIt        j                  j                  t        |«       |j                  dd«       |j                  dd«       y|j                  d«      }g d¢}|�4||vr0t        j                  j                  d|›d�|| j                  ¬«      ‚| j                  ||| j                  «      }|�,t        j                  j                  ||| j                  ¬«      ‚||d<   y)	z5Validate and apply output_config to the request data.r-  NTrì   )rœ   r›   rš   r�   rž   zInvalid effort value: z9. Must be one of: 'high', 'medium', 'low', 'xhigh', 'max'r
  )r|   r]   ri   r   rú   rô   r¾   r  r  r¢   r  r  r  rï   )r¯   rv  rÀ   rù   r-  rì   Úvalid_effortsÚ
gate_errors           rY   rz  z$AnthropicConfig._apply_output_configÊ  sB  € à /Ñ1ØØ.×2Ñ2°?ÓCˆÙ¤J¨}¼dÔ$CØÜ×Ñ $Ñ&¨t×/PÑ/PÐQVÐX\×XoÑXoÔ/pÜ×"Ñ"×*Ñ*Ü6Øôð ×Ñ °Ô6Ø�H‰H�_ dÔ+ØØ%×)Ñ)¨(Ó3ˆÚHˆØÐ &°Ñ"=Ü×$Ñ$×4Ñ4Ø1°&°Ð;tÐuØØ!×4Ñ4ð 5ó ð ð
 !×;Ñ;¸EÀ6È4×KbÑKbÓcˆ
ØÐ!Ü×$Ñ$×4Ñ4Ø"ØØ!×4Ñ4ð 5ó ð ð
 !.ˆˆ_Òr[   r+  rÁ  c                 ó6  — |dus|sd|dfS t        |«      D ��cg c]0  \  }}|j                  di «      j                  d«      t        k(  sŒ/|‘Œ2 }}}|sd|dfS t        |«      t        |«      k(  rJ||d      }|j                  di «      j                  d«      €d|dfS t        j                  |g¬«      }|g dfS ||d      }t        j                  |g«      }	|	�|	j                  nd}
t        |«      D ��cg c]  \  }}||vsŒ|‘Œ }}}d||
fS c c}}w c c}}w )zaStrip internal response_format tool calls; merge payload into content when mixed with user tools.TNrÍ   rƒ   r   rÏ   )rÁ  )rC  r|   r   r�   r¦   Ú!_convert_tool_response_to_messagerÜ  )r¯   r+  rÁ  Úirq  Újson_indicesÚ	json_toolÚ_messageÚ
first_jsonÚjson_msgÚextra_contentÚfiltered_toolss               rY   Ú _resolve_json_mode_non_streamingz0AnthropicConfig._resolve_json_mode_non_streamingê  sK  € ð ˜DÑ ©
Ø˜ TÐ)Ð)ô $ JÓ/÷
Ù�!�Q°1·5±5¸ÀRÓ3H×3LÑ3LÈVÓ3TÔXqÓ3qŠAð
ˆñ 
ñ Ø˜ TÐ)Ð)äˆ|Ó¤ J£Ò/Ø)¨,°q©/Ñ:ˆIØ�}‰}˜Z¨Ó,×0Ñ0°Ó=ÐEØ˜Z¨Ð-Ð-Ü-×OÑOÐ\eÐ[fÐOÓgˆHØ˜R Ð%Ð%à& |°A¡Ñ7ˆ
Ü)×KÑKÈZÈLÓYˆØ?GÐ?S¨8×+;Ò+;ÐY]ˆÜ/8¸Ó/D× ^¡t q¨!ÈÐQ]ÒH]¢Ð ^ˆÑ ^Ø�^ ]Ð2Ð2ùó#
ùó  !_s   š0DÁDÃ6DÄDÚcompletion_responsec                 óÂ  — d}d }d }d }g }d }d }d }	t        |d   «      D �]z  \  }
}|d   dk(  r
||d   z  }�n|d   dk(  s|d   dk(  r)t        j                  ||
¬«      }|j                  |«       nÚ|d   j	                  d«      rE|d   d	k(  rŒo|d   d
k(  s|d   dk(  r|€g }|j                  |«       n—|€g }|j                  |«       n�|j                  d«      dk(  r$|€g }|j                  t        t        |«      «       nI|d   dk(  r$|€g }|j                  t        t        |«      «       n|d   dk(  r|	€g }	|	j                  |«       |j                  d«      €�Œ?|€g }|j                  |d   D �cg c]  }i |¥d|j                  dd«      i¥‘Œ c}«       �Œ} |�3d}|D ],  }t        t        d z  |j                  d«      «      }|€Œ(||z  }Œ. ||||||||	fS c c}w )Nr<  rÜ  rv   r  Útool_useÚserver_tool_use)rÉ   rÊ   Ú_tool_resultÚtool_search_tool_resultÚweb_search_tool_resultÚweb_fetch_tool_resultr  Úredacted_thinkingr  Ú	citationsÚsupported_text)
rC  r¦   rÔ   r  Úendswithr|   r   r4   r2   re   )r¯   r’  Útext_contentr›  Úthinking_blocksÚreasoning_contentrÁ  Úweb_search_resultsÚtool_resultsÚcompaction_blocksrG  rÜ  rÓ   ÚcitationÚblockÚthinking_contents                   rY   Úextract_response_contentz(AnthropicConfig.extract_response_content
  s€  € ð ˆØ&*ˆ	ØjnˆØ(,ÐØ?Aˆ
Ø/3ÐØ)-ˆØ.2ÐÜ%Ð&9¸)Ñ&DÓEó 6	‰LˆC�Ø�v‰ &Ò(Ø ¨¡Ñ/’à˜‘ JÒ.°'¸&±/ÐEVÒ2VÜ+×MÑMØ+2Øð Nó �	ð ×!Ñ! )Õ,ð ˜‘×)Ñ)¨.Ô9à˜6‘?Ð&?Ò?Øà˜6‘?Ð&>Ò>À'È&Á/ÐUlÒBlØ)Ð1Ø-/Ð*Ø&×-Ñ-¨gÕ6ð $Ð+Ø')˜Ø ×'Ñ'¨Õ0à—‘˜VÓ$¨
Ò2Ø"Ð*Ø&(�OØ×&Ñ&¤tÔ,GÈÓ'QÕRØ˜‘Ð$7Ò7Ø"Ð*Ø&(�OØ×&Ñ&¤tÔ,OÐQXÓ'YÕZð ˜‘ LÒ0Ø$Ð,Ø(*Ð%Ø!×(Ñ(¨Ô1ð �{‰{˜;Ó'Ò3ØÐ$Ø "�IØ× Ñ ð )0°Ñ(<öð
 %ð	Ø&ðà,¨g¯k©k¸&À"Ó.Eóòöð]6	ðn Ð&Ø "ÐØ(ò :�Ü#'¬¨d©
°E·I±I¸jÓ4IÓ#JÐ Ø#Ñ/Ø%Ð)9Ñ9Ñ%ð:ð ØØØØØØØð	
ð 		
ùòs   Å4G
Úusage_objectc                 ó¤   — | j                  d«      }t        |t        «      sy 	 t        j                  |«      j
                  S # t        $ r Y y w xY w)NÚoutput_tokens_details)r|   r]   r   r*   Úmodel_validateÚthinking_tokensr   )r¨  Údetailss     rY   Úthinking_tokens_from_usagez*AnthropicConfig.thinking_tokens_from_usageg  sN   € à%×)Ñ)Ð*AÓBˆÜ˜'¤7Ô+Øð	Ü/×>Ñ>¸wÓG×WÑWÐWøÜò 	Ùð	ús   ¤A Á	AÁAc                 óp   — | €y| j                  d«      }t        |t        «      syt        d„ |D «       «      S )NFrÜ  c              3   óf   K  — | ])  }t        |t        «      xr |j                  d «      dv –— Œ+ y­w)rv   )r  rš  N)r]   r   r|   )rx   r¥  s     rY   r{   z?AnthropicConfig._response_has_thinking_block.<locals>.<genexpr>x  s3   è ø€ ò 
ØfkŒJ�uœgÓ&Òa¨5¯9©9°VÓ+<Ð@aÐ+aÓañ
ùs   ‚/1)r|   r]   rg   rÞ   )r’  rÜ  s     rY   Ú_response_has_thinking_blockz,AnthropicConfig._response_has_thinking_blockq  sB   € àÐ&ØØ,×0Ñ0°Ó;ˆÜ˜'¤4Ô(ØÜñ 
Øovô
ó 
ð 	
r[   Ú
iterationsÚcompletion_tokensr   c                 óv  — |r| j                  |«      nd }|�|n| j                  |«      }|�&t        t        d|«      |«      }t	        |||z
  ¬«      S |r;t        t        |d¬«      |«      }	t	        t        d|	«      |t        d|	«      z
  ¬«      S | j                  |«      rt	        d d ¬«      S t	        d|¬«      S )Nr   )Úreasoning_tokensÚtext_tokensT)r  Úcount_response_tokens)Ú_sum_iteration_thinking_tokensr®  Úminrž   r>   rJ   r±  )
r¯   r¨  r²  r³  r   r’  Úiteration_thinking_tokensÚreported_thinking_tokensÚcapped_reportedÚ	estimateds
             rY   Ú_build_completion_token_detailsz/AnthropicConfig._build_completion_token_details|  sã   € ñ _i¨4×+NÑ+NÈzÔ+ZÐnrÐ!ð )Ð4ñ &à×0Ñ0°Ó>ð 	!ð
 $Ð/Ü%(¬¨QÐ0HÓ)IÐK\Ó%]ˆOÜ1Ø!0Ø-°Ñ?ôð ñ Ü"ÜÐ#4ÈDÔQØ!ó ˆIô 2Ü!$ Q¨	Ó!2Ø-´°A°yÓ0AÑAôð ð ×,Ñ,Ð-@ÔAÜ1À4ÐUYÔZÐZÜ-¸qÐN_Ô`Ð`r[   c                 ó˜   ‡ — t        ˆ fd„|D «       «      }t        d„ |D «       «      }t        |«      t        |«      k(  rt        |«      S d S )Nc              3   ód   •K  — | ]'  }t        |t        «      r‰j                  |«      nd –— Œ) y ­wrU   )r]   r   r®  )rx   Ú	iterationr¯   s     €rY   r{   zAAnthropicConfig._sum_iteration_thinking_tokens.<locals>.<genexpr>ž  s5   øè ø€ ò %
àô ;EÀYÔPWÔ:XˆD×+Ñ+¨IÔ6Ð^bÓbñ%
ùs   ƒ-0c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wrU   rV   )rx   Útokenss     rY   r{   zAAnthropicConfig._sum_iteration_thinking_tokens.<locals>.<genexpr>¢  s   è ø€ ÒY¨6ÀfÑFX¤ÑYùs   ‚Š)Útupler�   Úsum)r¯   r²  Úper_iterationÚreporteds   `   rY   r¸  z.AnthropicConfig._sum_iteration_thinking_tokens�  sK   ø€ Ü$ó %
à'ô%
ó  
ˆô  ÑY°]ÔYÓYˆÜ # H£´°]Ó1CÒ CŒs�8‹}ÐMÈÐMr[   c                 ó>   ‡ — d‰ v sd‰ vryt        ˆ fd„dD «       «      S )aJ  Anthropic reports prompt cache tokens as top-level ``cache_read_input_tokens`` /
        ``cache_creation_input_tokens``; no other API surface uses those keys, and the
        Responses API mapping would silently drop them.

        Requiring a cache key is deliberate: Responses API usage also carries top-level
        ``input_tokens``, so the cache keys are the only shape discriminator between the
        two. A cache-free Anthropic payload falls through to the Responses API mapping,
        which is safe because both mappings agree whenever no cache tokens are present.
        Úprompt_tokensr  Fc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrU   rV   )rx   rµ   r¨  s     €rY   r{   z<AnthropicConfig.is_anthropic_usage_object.<locals>.<genexpr>²  s   øè ø€ Òm¨3�3˜,Ô&ÑmùrÚ   )Úcache_read_input_tokensÚcache_creation_input_tokens)rÞ   )r¨  s   `rY   Úis_anthropic_usage_objectz)AnthropicConfig.is_anthropic_usage_object¥  s)   ø€ ð ˜lÑ*¨nÀLÑ.PØÜÓmÐ2lÔmÓmÐmr[   c                 óê   — t        d„ d„ | D «       D «       «      }|sy t        d„ |D «       «      }t        d„ |D «       «      }t        d„ | D «       «      }t        ||z
  |z
  d«      }t        ||z   |¬«      S )Nc              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wrU   )r]   r   ©rx   Úcs     rY   r{   zJAnthropicConfig._aggregate_cache_creation_token_details.<locals>.<genexpr>¸  s   è ø€ Ò!w¨Ô`jÐklÔnuÕ`v¤!Ñ!wùs   ‚˜c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)Úcache_creationNrÖ  ©rx   Úits     rY   r{   zJAnthropicConfig._aggregate_cache_creation_token_details.<locals>.<genexpr>¸  s   è ø€ Ò-\È2¨b¯f©fÐ5E×.FÑ-\ùs   ‚c              3   óX   K  — | ]"  }t        |j                  d «      xs d«      –— Œ$ y­w)Úephemeral_5m_input_tokensr   N©r`   r|   rÐ  s     rY   r{   zJAnthropicConfig._aggregate_cache_creation_token_details.<locals>.<genexpr>»  ó%   è ø€ Ò bÐRS¤ Q§U¡UÐ+FÓ%GÒ%LÈ1×!MÑ bùó   ‚(*c              3   óX   K  — | ]"  }t        |j                  d «      xs d«      –— Œ$ y­w)Úephemeral_1h_input_tokensr   NrØ  rÐ  s     rY   r{   zJAnthropicConfig._aggregate_cache_creation_token_details.<locals>.<genexpr>¼  rÙ  rÚ  c              3   óX   K  — | ]"  }t        |j                  d «      xs d«      –— Œ$ y­w©rÌ  r   NrØ  rÔ  s     rY   r{   zJAnthropicConfig._aggregate_cache_creation_token_details.<locals>.<genexpr>½  s$   è ø€ Ò`Èrœ3˜rŸv™vÐ&CÓDÒIÈ×JÑ`ùrÚ  r   ©r×  rÜ  )rÄ  rÅ  rž   r=   )r²  Ú
breakdownsÚdetailed_5mÚdetailed_1hÚtotalÚ
undetaileds         rY   Ú'_aggregate_cache_creation_token_detailsz7AnthropicConfig._aggregate_cache_creation_token_details´  s‚   € ô "Ñ!wÑ-\ÐQ[Ô-\Ô!wÓwˆ
ÙØÜ Ñ bÐWaÔ bÓbˆÜ Ñ bÐWaÔ bÓbˆÜÑ`ÐU_Ô`Ó`ˆÜ ¨Ñ 3°kÑ AÀ1ÓEˆ
Ü(Ø&1°JÑ&>Ø&1ô
ð 	
r[   Úusagec                 óô   — | j                  d«      }|rt        j                  |«      }|�|S | j                  d«      }t        |t        «      sy t        |j                  d«      |j                  d«      ¬«      S )Nr²  rÓ  r×  rÜ  rß  )r|   r¦   rå  r]   r   r=   )ræ  r²  Ú
aggregatedrÓ  s       rY   Ú%_resolve_cache_creation_token_detailsz5AnthropicConfig._resolve_cache_creation_token_detailsÄ  sw   € à!ŸI™I lÓ3ˆ
ÙÜ /× WÑ WÐXbÓ cˆJØÐ%Ø!Ð!Ø %§	¡	Ð*:Ó ;ˆÜ˜.¬'Ô2ØÜ(Ø&4×&8Ñ&8Ð9TÓ&UØ&4×&8Ñ&8Ð9TÓ&Uô
ð 	
r[   rü   c                 óè  — |j                  dd«      xs d}t        |t        t        f«      rt        |«      nd}|j                  dd«      xs d}t        |t        t        f«      rt        |«      nd}|}	d}
d}| j	                  |	«      }d }d }d }d|	v r
|	d   �|	d   }t        t        d z  |	j                  d«      «      }|	j                  d«      }t        |t        «      r|n|}|	j                  d«      }|rPt        d„ |D «       «      }t        d	„ |D «       «      }t        d
„ |D «       «      }
t        d„ |D «       «      }||
|z   z  }|s&d|	v r|	d   �
|	d   }
||
z  }d|	v r|	d   �
|	d   }||z  }d|	v rO|	d   �Jd|	d   v r|	d   d   �t        t        |	d   d   «      }d|	d   v r|	d   d   �t        t        |	d   d   «      }|€S|�Qd}|j                  dg «      D ]3  }|j                  d«      dk(  sŒ|j                  dd«      }d|v sŒ/|dz  }Œ5 |dkD  r|}||z
  |
z
  }t        ||
||¬«      }| j                  |	||||¬«      }||z   }t        |||||
||||€|�t        ||¬«      nd |||¬«      }|S )Nr  r   Úoutput_tokensÚinference_geoÚservice_tierrü   r²  c              3   óH   K  — | ]  }|j                  d d«      xs d–— Œ y­w)r  r   NrÖ  rÔ  s     rY   r{   z2AnthropicConfig.calculate_usage.<locals>.<genexpr>ñ  s#   è ø€ ÒTÀ2 §¡ ~°qÓ 9Ò >¸QÓ >ÑTùó   ‚ "c              3   óH   K  — | ]  }|j                  d d«      xs d–— Œ y­w)rë  r   NrÖ  rÔ  s     rY   r{   z2AnthropicConfig.calculate_usage.<locals>.<genexpr>ò  s#   è ø€ Ò#YÈ B§F¡F¨?¸AÓ$>Ò$CÀ!Ó$CÑ#Yùrï  c              3   óH   K  — | ]  }|j                  d d«      xs d–— Œ y­wrÞ  rÖ  rÔ  s     rY   r{   z2AnthropicConfig.calculate_usage.<locals>.<genexpr>ó  s'   è ø€ Ò-qÐ`b¨b¯f©fÐ5RÐTUÓ.VÒ.[ÐZ[Ó.[Ñ-qùrï  c              3   óH   K  — | ]  }|j                  d d«      xs d–— Œ y­w)rË  r   NrÖ  rÔ  s     rY   r{   z2AnthropicConfig.calculate_usage.<locals>.<genexpr>ô  s&   è ø€ Ò)iÐXZ¨"¯&©&Ð1JÈAÓ*NÒ*SÐRSÓ*SÑ)iùrï  rÌ  rË  r•  Úweb_search_requestsÚtool_search_requestsrÜ  rv   rƒ   r<  Útool_searchrŠ   )Úcached_tokensÚcache_creation_tokensÚcache_creation_token_detailsr¶  )r¨  r²  r³  r   r’  )ró  rô  )rÉ  r³  Útotal_tokensÚprompt_tokens_detailsrÌ  rË  Úcompletion_tokens_detailsr²  r•  rì  rü   rí  )r|   r]   r`   rb   ré  r   re   rÅ  r?   r¾  rC   r@   )r¯   r¨  r   r’  rü   Úraw_prompt_tokensrÉ  Úraw_completion_tokensr³  Ú_usagerÌ  rË  rø  ró  rô  rì  rí  Ú	raw_speedÚresolved_speedr²  Útool_search_countrÜ  rš  Úraw_input_tokensrú  Úcompletion_token_detailsrù  ræ  s                               rY   Úcalculate_usagezAnthropicConfig.calculate_usageÓ  sk  € ð $0×#3Ñ#3°NÀAÓ#FÒ#KÈ!ÐÜ7AÐBSÔVYÔ[`ÐUaÔ7bœSÐ!2Ô3ÐhiˆØ'3×'7Ñ'7¸ÈÓ'KÒ'PÈqÐÜ?IÐJ_ÔbeÔglÐamÔ?n¤Ð%:Ô!;ÐtuÐØ$ˆØ+,Ð#Ø'(ÐØ.2×.XÑ.XÐY_Ó.`Ð$Ø*.ÐØ+/ÐØ$(ˆØ˜fÑ$¨°Ñ)@Ð)LØ" ?Ñ3ˆMÜ"Ü�$‰JØ�J‰J�~Ó&ó
ˆð "Ÿ:™: gÓ.ˆ	Ü-7¸	Ä3Ô-G¡	ÈUˆà.4¯j©j¸Ó.Fˆ
ÙÜÑTÈÔTÓTˆMÜ #Ñ#YÈjÔ#YÓ YÐÜ*-Ñ-qÐfpÔ-qÓ*qÐ'Ü&)Ñ)iÐ^hÔ)iÓ&iÐ#ØÐ8Ð;RÑRÑRˆMáØ,°Ñ6¸6ÐB_Ñ;`Ð;lØ.4Ð5RÑ.SÐ+ØÐ!<Ñ<�Ø(¨FÑ2°vÐ>WÑ7XÐ7dØ*0Ð1JÑ*KÐ'ØÐ!8Ñ8�Ø Ñ&¨6Ð2CÑ+DÐ+Pà%¨Ð0AÑ)BÑBØÐ,Ñ-Ð.CÑDÐPä&*¬3°Ð7HÑ0IÐJ_Ñ0`Ó&aÐ#à&¨&Ð1BÑ*CÑCØÐ,Ñ-Ð.DÑEÐQä'+¬C°Ð8IÑ1JÐKaÑ1bÓ'cÐ$ð  Ð'Ð,?Ð,KØ !ÐØ.×2Ñ2°9¸bÓAò /�Ø—;‘;˜vÓ&Ð*;Ó;Ø '§¡¨F°BÓ 7�IØ$¨	Ò1Ø)¨QÑ.Ñ)ð	/ð
 ! 1Ò$Ø'8Ð$à"/Ð2IÑ"IÐLgÑ"gÐÜ'AØ1Ø"=Ø)EØ(ô	(
Ðð +/×*NÑ*NØØ!Ø/Ø/Ø 3ð +Oó +
Ð ð ,Ð.?Ñ?ˆäØ'Ø/Ø%Ø"7Ø(CØ$;Ø&>Ø!ð (Ð3Ð7KÐ7Wô	 Ø(;Ø)=õð
 à'Ø Ø%ô'
ˆð* ˆr[   c                 ó6  — i }|D ]‚  }	 t        j                  |j                  di «      j                  dd«      «      }|j                  d«      }|j                  dd«      }t        |t        «      rt        |t        «      r|nd||<   Œ„ |S # t
        $ r Y Œ’w xY w)NrÍ   rÏ   z{}rÌ   Úcommandr<  )rÑ   Úloadsr|   r]   re   rÈ   )r¯   rÁ  Ú
code_by_idrÇ  ÚargsÚcall_idr  s          rY   Ú_build_code_by_id_mapz%AnthropicConfig._build_code_by_id_map=	  s›   € Ø,.ˆ
Øò 	ˆBðÜ—z‘z "§&¡&¨°RÓ"8×"<Ñ"<¸[È$Ó"OÓP�ØŸ&™& ›,�ØŸ(™( 9¨bÓ1�Ü˜g¤sÔ+Ü5?ÀÌÔ5M©'ÐSU�J˜wÑ'øð	ð Ðøô ò Ùðús   ‰A?BÂ	BÂBr¢  r  Úcontainer_idc                 ó   — g }|D ]v  }|j                  d«      dk7  rŒ|j                  dd«      }|j                  di «      }t        |«      }|j                  t        d||j                  |d«      |d|¬«      «       Œx |S )	Nrv   Úbash_code_execution_tool_resultÚtool_use_idr<  rÜ  Úcode_interpreter_callÚ	completed)rv   rÌ   Úcoder  ÚstatusÚoutputs)r|   r<   r  r;   )	r¯   r¢  r  r  Úcode_interpreter_resultsÚtrr
  rÜ  Úlog_outputss	            rY   Ú_build_code_interpreter_resultsz/AnthropicConfig._build_code_interpreter_resultsJ	  s’   € ð +-Ð Øò 	ˆBØ�v‰v�f‹~Ð!BÒBØØ—f‘f˜]¨BÓ/ˆGØ—f‘f˜Y¨Ó+ˆGÜ<¸WÓEˆKØ$×+Ñ+Ü)Ø0ØØ#Ÿ™¨°Ó4Ø!-Ø&Ø'ôõ	ð	ð  (Ð'r[   r›  rŸ  r¡  r£  c                 óp  — ||dœ}|j                  d«      }	|	�|	|d<   |�||d<   |�p||d<   t        |j                  d«      t        «      r!|j                  di «      j                  d«      nd }
| j                  |«      }| j	                  |||
«      }||d<   |j                  d«      }|�||d<   |�||d<   |S )	N)r›  rŸ  r  r¡  r¢  Ú	containerrÌ   r  r£  )r|   r]   ri   r  r  )r¯   r’  r›  rŸ  r¡  r¢  r£  rÁ  Úprovider_specific_fieldsr  r  r  r  r  s                 rY   Ú_build_provider_specific_fieldsz/AnthropicConfig._build_provider_specific_fieldsc	  s  € ð #Ø.ñ;
Ð ð
 %8×$;Ñ$;Ð<PÓ$QÐØÐ)Ø=OÐ$Ð%9Ñ:àÐ)Ø=OÐ$Ð%9Ñ:àÐ#Ø7CÐ$ ^Ñ4ô Ð1×5Ñ5°kÓBÄDÔIð $×'Ñ'¨°RÓ8×<Ñ<¸TÔBàð ð
 !%× :Ñ :¸:Ó FˆJØ'+×'KÑ'KÈLÐZdÐfrÓ'sÐ$ØC[Ð$Ð%?Ñ@à.×2Ñ2°;Ó?ˆ	ØÐ Ø4=Ð$ [Ñ1àÐ(Ø<MÐ$Ð%8Ñ9à'Ð'r[   Úraw_responseÚmodel_responseÚprefix_promptÚtool_name_reverse_mapc           	      ó8  — i }t        t        |j                  «      «      |d<   d|v r1t        |dd «      }	t	        t        |d   «      |j                  |	¬«      ‚| j                  |¬«      \  }
}}}}}}}|r^|r\|D ]W  }t        |t        «      r|j                  d«      nd }|€Œ)|j                  d«      }t        |t
        «      sŒK||v sŒP||   |d<   ŒY |�&|
j                  |«      st        j                  s||
z   }
| j                  |||||||«      }| j                  ||¬«      \  }}}|
xs d	}|r	|r||z   n|}t        j                  ||xs d |||¬
«      }||_        |�d|d<   |}||j"                  d   _        |d   |j&                  d<   t)        t*        t-        |d   «      «      |j"                  d   _        | j1                  |d   |||¬«      }t3        |d|«       t5        t7        j6                  «       «      |_        |d   |_        ||d<   ||_        |S )NÚadditional_headersÚerrorrª  ©rþ   rÿ   rª  )r’  rÍ   rƒ   )r+  rÁ  r<  )rÁ  rÜ  r  rŸ  r   r  Ústop_reasonr   rÜ  Úoriginal_responseræ  )r¨  r   r’  rü   rÀ   r  )rN   ri   rª  ÚgetattrrL   re   rÿ   r§  r]   r|   rp  r   Údisable_add_prefix_to_promptr  r‘  rA   r  Úchoicesrþ   Ú_hidden_paramsr   r8   r   Úfinish_reasonr  r²   r`   ÚtimeÚcreatedrÀ   )r¯   r’  r  r  r+  r  rü   r   r*  Úresponse_headersrž  r›  rŸ  r   rÁ  r¡  r¢  r£  rÇ  rÈ  Ú_namer  Újson_mode_messageÚtool_calls_for_messageÚjson_extra_contentÚmerged_textrŒ  ræ  s                               rY   Útransform_parsed_responsez)AnthropicConfig.transform_parsed_response�	  s—  € ð ')ˆÜ/HÌÈl×NbÑNbÓIcÓ/dˆÐ+Ñ,ØÐ)Ñ)Ü&-¨l¸IÀtÓ&LÐÜ ÜÐ/°Ñ8Ó9Ø(×4Ñ4Ø(ôð ð ×)Ñ)Ð>QÐ)ÓRñ		
ØØØØØØØØñ !¡ZØ ò >�Ü+5°b¼$Ô+?�R—V‘V˜JÔ'ÀT�Ø�:ØØŸ™˜v›�Ü˜e¤SÕ)¨eÐ7LÒ.LØ!6°uÑ!=�B�v’Jð>ð Ð%Ø ×+Ñ+¨MÔ:Ü×8Ò8à(¨<Ñ7ˆLà*.×*NÑ*NØØØØØØØó+
Ð ð IM×HmÑHmØØ!ð Inó I
ÑEÐÐ1Ð3Eð #Ò( bˆÙÙ>I˜+Ð(:Ò:ÐOaˆKä—?‘?Ø-ØÒ' 4Ø%=Ø+Ø/ô
ˆð -EˆÔ)àÐ(Ø17Ð Ñ.Ø(ˆHà,4ˆ×Ñ˜qÑ!Ô)Ø=PÐQZÑ=[ˆ×%Ñ%Ð&9Ñ:Ü26Ü,ÜÐ1°-Ñ@ÓAó3
ˆ×Ñ˜qÑ!Ô/ð
 ×+Ñ+Ø,¨WÑ5Ø/Ø 3Øð	 ,ó 
ˆô 	� ¨Ô/ä!$¤T§Y¡Y£[Ó!1ˆÔØ2°7Ñ;ˆÔà5MˆÐ1Ñ2Ø(6ˆÔ%ØÐr[   c                 ó¦   — t        |«      dk(  ry|d   }|j                  d«      }|d   dk(  r$|j                  dd«      rt        |t        «      r|S y)	zô
        Get the prefix prompt from the messages.

        Check last message
        - if it's assistant message, with 'prefix': true, return the content

        E.g. :    {"role": "assistant", "content": "Argentina", "prefix": True}
        r   NéÿÿÿÿrÜ  rB  Ú	assistantÚprefixF)r�   r|   r]   re   )r¯   r¾  rþ   rR  s       rY   Úget_prefix_promptz!AnthropicConfig.get_prefix_prompt÷	  sW   € ô ˆx‹=˜AÒØà! "™ˆØ!(§¡¨YÓ!7ˆØ�6‰?˜kÒ)¨g¯k©k¸(ÀEÔ.JÌzÐZiÔknÔOoØ"Ð"àr[   Úlogging_objÚrequest_dataÚencodingztiktoken.Encoding | NoneÚapi_keyc           	      óÞ  — |j                  ||
|j                  d|i¬«       	 |j                  «       }| j                  |¬«      }|j                  d«      }d }t        |t        «      r'|j                  t        «      }t        |t        «      r|}| j                  |||||||¬	«      }|S # t        $ r:}t	        |dd «      }t        d|› d|j                  › �|j                  |¬«      ‚d }~ww xY w)
NÚcomplete_input_dict)rÎ   r=  r&  Úadditional_argsrª  zUnable to get json response - z, Original Response: r$  rs  rü   )r’  r  r  r+  r  rü   r   )Ú	post_callr  rÑ   rÈ   r'  rL   rÿ   r9  r|   r]   ri   r‚   r4  )r¯   rÀ   r  r  r:  r;  r¾  rù   rp  r<  r=  r+  r’  r~  r.  r  rü   r   Ú
_candidates                      rY   Útransform_responsez"AnthropicConfig.transform_response

  s  € ð 	×ÑØØØ*×/Ñ/Ø2°LÐAð	 	ô 	
ð	Ø)5×):Ñ):Ó)<Ðð  $×5Ñ5¸xÐ5ÓHˆØ&×*Ñ*¨7Ó3ˆØ7;ÐÜ�n¤dÔ+Ø .× 2Ñ 2Ô3VÓ WˆJÜ˜*¤dÔ+Ø(2Ð%à×7Ñ7Ø 3Ø%Ø)ØØ'ØØ"7ð 8ó 
ˆð Ðøô3 ò 	Ü&-¨l¸IÀtÓ&LÐÜ Ø8¸¸Ð;PÐQ]×QbÑQbÐPcÐdØ(×4Ñ4Ø(ôð ûð	ús   £B) Â)	C,Â25C'Ã'C,c                 ó´  — | d   d   j                  d«      }	 |�Žt        j                  |«      }t        |t        «      r>|j                  d«      x}�+t        j                  t        j                  |«      ¬«      }|S t        j                  t        j                  |«      ¬«      }|S 	 y# t        j                  $ r t        j                  |¬«      cY S w xY w)z‘
        In JSON mode, Anthropic API returns JSON schema as a tool call, we need to convert it to a message to follow the OpenAI format

        r   rÍ   rÏ   NÚvalues)rÜ  )	r|   rÑ   r  r]   ri   r   rA   rÒ   ÚJSONDecodeError)rÁ  Újson_mode_content_strr	  rE  rŒ  s        rY   rˆ  z1AnthropicConfig._convert_tool_response_to_message>
  sÄ   € ð 4>¸a±=ÀÑ3L×3PÑ3PÐQ\Ó3]Ðð	BØ$Ð0Ü"Ÿj™jÐ)>Ó?�Ü˜d¤DÔ)¸¿¹À(Ó9KÐ/K¨vÐ.XÜ&Ÿ™´t·z±zÀ&Ó7IÔJ�HØ#�Oô  'Ÿ™´t·z±zÀ$Ó7GÔH�HØ#�Oð 1ð øô ×#Ñ#ò 	Bä—?‘?Ð+@ÔAÒAð	Bús   ™A$B+ Á>*B+ Â+)CÃCÚerror_messagerÿ   c                 óN   — t        ||t        t        j                  |«      ¬«      S )N)rÿ   rþ   rª  )rL   r   ÚhttpxÚHeaders)r¯   rH  rÿ   rª  s       rY   Úget_error_classzAnthropicConfig.get_error_classX
  s#   € ÜØ#Ø!ÜœŸ™¨Ó0ô
ð 	
r[   )NNNNNNNrU   )r¹   )NN)NNNN)wÚ__name__Ú
__module__Ú__qualname__Ú__doc__r§   r`   r  r¨   rg   r©   rª   r«   r¬   ri   r­   re   r¶   Úpropertyr»   r¾   ÚclassmethodrÃ   ÚstaticmethodrÄ   r   r5   rÔ   r^   rà   rå   rë   rï   rô   rø   r  r
   r  r   rH  rV  rX  r(   rd  r7   rÄ  r!   r&   r¦  r9   rŠ  r½  r0   rÎ  rÐ  rÔ  r×  rÛ  râ  rç  r/   r,   rð  ró  r÷  r)   r  r'   r  r:   r-   r  r"  r<  r  r@  r+   rL  r    rQ  r\  rp   rd  ro  rƒ  rz  ÚLitellmMessager‘  r4   r2   r§  r   r®  r±  r   r>   r¾  r¸  rÍ  r=   rå  ré  rC   r  r  r;   r  r  rJ  ÚResponserB   r4  r9  ÚLoggingClassrC  rˆ  rK  r   rL  Ú__classcell__)r³   s   @rY   r¦   r¦     s°  ø… ñð "€J��d‘
Ó!Ø"&€N�D˜4‘KÓ&Ø"€K��t‘Ó"Ø€Eˆ3�‰:ÓØ€Eˆ3�‰:ÓØ €Hˆd�T‰kÓ Ø€FˆC�$‰JÓð "&Ø&*Ø"&Ø Ø Ø $Ø!ñ4à˜$‘Jð4ð ˜t™ð4ð ˜4‘Zð	4ð
 �T‰zð4ð �T‰zð4ð ˜‘+ð4ð �d‘
ð4ð 
ó4ð ð S¨4¡Zò ó ðð ð7 Cò 7ó ð7ð Ø/3ò  #¨¡*ô ó ðð ñ5¨¨d©
ð 5¸cò 5ó ð5ð ðØ $ S¨# X¡ðàðð 
%òó ðð: ð_ #ð _¨$ò _ó ð_ð
 ð_ #ð _¨$ò _ó ð_ð
 ð
 cð 
°#ð 
ÈCð 
ÐTXò 
ó ð
ð ð	¨#ð 	°s¸T±zð 	ÐX[ð 	Ð`cÐfjÑ`jò 	ó ð	ð ð
¨Cð 
Àcð 
Èdò 
ó ð
ð ñ
_¨3ð 
_ÀSÈ4ÁZð 
_Ð[_ò 
_ó ð
_ð ð
 +/ñ	+Øð+àð+ð ð+ð ! 4™Zð	+ð
 
ò+ó ð+ð4 ð
¨sð 
¸3ð 
Ècð 
ÐV^ò 
ó ð
ð,°ó ðB ðG¨t°C¸°H©~ð GÀ$ÀsÈCÀxÁ.ò Gó ðGðR
ÀCÈ$ÁJÐQUÑDUð 
ÐZ^ÐaeÑZeó 
ð

¨4ó 
ð)à˜4‘Zð)ð   $™;ð)ð 
% tÑ	+ó	)ðV})à%ð})ð 
Ð&¨Ñ-Ð/EÈÑ/LÐLÑ	Mó})ð~Ð0Cð ÐH^ó ð:,,àð,,ð 
ˆtÐ+Ñ,¨dÐ3IÑ.JÐJÑ	Kó,,ð\ ð0ØÐ'Ñ(ð0à˜s C˜x™.ð0ð 
ÐÑ	ò0ó ð0ðd ð?Øð?à	ˆt�C˜�H‰~˜t C¨ H™~Ð-Ñ	.ò?ó ð?ð6 ðH Ø˜c 3˜h™ðH à	ˆt�C˜�H‰~˜t C¨ H™~Ð-Ñ	.òH ó ðH ðT¨t°d©{ð ¸tó ð&¨dð &°u¸TÀ4¸ZÑ7Hó &ð$+ àð+ ð ð+ ð 
ó	+ ðZ¨¨d°3©i©¸$Ñ(>ð À4ÈÁ9ÈtÑCSó ð( ð
 (ñ	:Ø*¨SÑ0°4Ñ7ð:àð:ð !ð:ð ð	:ð
 
  $Ñ	&ò:ó ð:ðx ðjØ(ðjØ69¸D±jðjà	 $Ñ	&òjó ðjð 	¸tÀd¹{ð 	ÈtÐVZÉ{ó 	ð
ÀDÈ4ÁKð 
ÐTiÐlpÑTpó 
ð6Ø˜D‘[ðØ37ðØNRðà	 Ñ	%óð.&à%ð&ð 
 ó&ð6 ð6Ø   c¨3 h¡Ñ0°4¸¸S¸±>ÑAð6à	ˆc�3ˆh‰˜$Ñ	ò6ó ð6ðppà ðpð ðpð ð	pð
 ðpð 
ópðh $(ñà˜D‘[ðð 
óð8¨tó ð6-°Ð6FÑ1Gð 6-ÈDÐQnÑLoó 6-ðpàÐ0Ñ1ðð Ð+¨dÑ2Ñ3ðð 
Ð%¨Ñ,Ñ	-ó	ð<I¨4ð I¸Sð IÀTó Ið""¸dð "ÐX^ð "Ðcgó "ðHÀ4ð ÐZ^ð Ðcgó ðBmàðmð Ð'Ñ(ðmð ð	mð
 ðmð ðmð 
ómð^.¨ð .°cð .ÈDð .ÐUYó .ð@3à˜$‘;ð3ð Ð4Ñ5ð3ð 
Ø˜ÑØÐ(Ñ)Øˆd‰
ð	ñ
ó	3ð@[
Ø#'ð[
à	ØØˆS‰	�DÑØÐ(Ð+NÑNÑOÐRVÑVØˆd‰
ØÐ(Ñ)ØˆS‰	�DÑØˆS‰	�DÑØˆS‰	�DÑð	ñ	
ó[
ðz ð°¸¸f¸Ñ1Eð È#ÐPTÉ*ò ó ðð ð
¸'À#ÀvÀ+Ñ:NÐQUÑ:Uð 
ÐZ^ò 
ó ð
ðaà˜c 6˜kÑ*ðað ˜VÑ$ tÑ+ðað ð	að
  ™:ðað % S¨& [Ñ1°DÑ8ðað 
(óaðBN¸À&Ñ9Ið NÈcÐTXÉjó Nð ðn°ð n¸ò nó ðnð ð
Ø˜W S¨# XÑ.Ñ/ð
à	" TÑ	)ò
ó ð
ð ð
°W¸SÀ#¸XÑ5Fð 
ÐKdÐgkÑKkò 
ó ð
ð$ ,0Ø ñhà˜c 3˜hÑ'ðhð  ™:ðhð " D™[ð	hð
 �T‰zðhð 
óhðT°Ð5PÑ0Qð ÐVZÐ[^Ð`cÐ[cÑVdó ð(à˜3‘ið(ð ˜˜c˜‘Nð(ð ˜D‘jð	(ð
 
Ð'Ñ	(ó(ð2((à!ð((ð ˜‘9˜tÑ#ð((ð Ð9Ð<_Ñ_Ñ`ÐcgÑgð	((ð
 ! ™I¨Ñ,ð((ð ˜3‘i $Ñ&ð((ð   ™9 tÑ+ð((ð Ð4Ñ5ð((ð 
ˆc�3ˆh‰ó((ð^ "&Ø$(Ø Ø7;ñhà!ðhð —n‘nðhð &ð	hð
 ˜$‘;ðhð ˜T‘zðhð �T‰zðhð  $ C¨ H™~°Ñ4óhðT¨$Ð/?Ñ*@ð ÀSÈ4ÁZó ð< #Ø!%ñ2àð2ð —n‘nð2ð &ð	2ð
 "ð2ð ð2ð Ð'Ñ(ð2ð ð2ð ð2ð -ð2ð �t‘ð2ð ˜$‘;ð2ð 
ó2ðh ðØÐ4Ñ5ðà	˜$Ñ	òó ðð2
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfv÷ 
r[   r¦   r,  c                 óh   — d}d}t        j                  || «      ryt        j                  || «      ryy)z‡
    Validate that user_id is not an email or phone number.
    Returns: bool: True if valid (not email or phone), False otherwise
    z0^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$z^\+?[\d\s\(\)-]{7,}$FT)ÚreÚmatch)r,  Úemail_patternÚphone_patterns      rY   r2  r2  `
  s4   € ð
 O€MØ2€Mä	‡x�x�˜wÔ'ØÜ	‡x�x�˜wÔ'Øàr[   )yrÑ   rY  r,  Úcollections.abcr   r   r   Útypesr   Útypingr   r   r	   r
   r   rJ  Úpydanticr   r   Úlitellm.constantsr   r   r   r   r   r   r   r   r   r   Ú'litellm.litellm_core_utils.core_helpersr   rý  r   Ú litellm.llms.base_llm.base_utilsr   Ú)litellm.llms.base_llm.chat.transformationr   r   r‹  r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   Úlitellm.types.llms.openair/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   Úlitellm.types.responses.mainr;   r<   Úlitellm.types.utilsr=   r>   r?   r@   rA   rT  Úlitellm.utilsrB   rC   rD   rE   rF   rG   rH   rI   rJ   Úcommon_utilsrL   rM   rN   rO   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingrP   ÚLiteLLMLoggingObjrV  ÚcompilerQ   r  rS   rq   re   r^   r€   r‚   r‡   rg   rÄ  ri   r™   r¡   r¢   r£   r¤   r¦   r2  rV   r[   rY   ú<module>rn     s&  ðÜ Û 	Û ß 7Ñ 7Ý "ß <Õ <ã Ý $ã ÷÷ ÷ õ Fõõ Kß R÷÷ ÷ ÷ ÷ ÷(÷ ÷ ó ÷÷ó õ :÷
÷ 
õ 
÷ó ñ ÛåWà$�Là€Lð0 -7¨B¯J©JÐ7HÓ,IÐ " EÓ IØ&)Ð ˜eÓ )á@Pá#Ù0ÙKÙSÙ.Ù.Ù/ñó
AÐ �5˜  h°¨u°d¨{Ñ&;Ð!;Ñ<Ñ=ó 
ð	P¨w°s¸C°xÑ/@ð 	PÀTó 	Pð$ .HÐ # UÓ Gð	\¨cð 	\°có 	\ð<Ø˜‘Ið<à
ˆ4��S�‰>˜4  S ™>Ð)Ñ*ó<ð@ ØØØØØñCÐ (¨%°°S¸#°X±Ñ*?ó ð'ð '¨ó ð mð +¨Eó ð
 wð  ó ô
X%
Ð(¨*ô X%
ðvJ˜Cð  Dô r[   