Ë
    uPêjG  ã                   ó|   — U d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z	 dZ
eed<    G d„ d	e«      Z G d
„ de«      Zy)é    )ÚAnyÚFinalN)ÚAnthropicMessagesConfig)ÚSimpleProviderConfig)Úget_secret_strz
2023-06-01ÚDEFAULT_ANTHROPIC_API_VERSIONc                   óº   — e Zd ZdZ	 	 ddeeef   dedee   dedededz  d	edz  d
eeeef   edz  f   fd„Z	d
e
fd„Z	 dd	edz  dedz  dededede
dz  d
efd„Zy)Ú!OpenAILikeAnthropicMessagesConfiga]  
    Forwards Anthropic /v1/messages requests to an OpenAI-compatible server that
    also natively exposes the Anthropic Messages API, with no translation.

    Opted into per deployment via ``model_info.supported_endpoints`` containing
    ``"/v1/messages"``. The inbound Anthropic payload (system, cache_control,
    thinking, tools, ...) is forwarded essentially unchanged to
    ``{api_base}/v1/messages``, so Anthropic-only features that the
    Anthropic->OpenAI translation would otherwise drop are preserved. Response
    parsing and streaming are inherited from the native Anthropic config.
    NÚheadersÚmodelÚmessagesÚoptional_paramsÚlitellm_paramsÚapi_keyÚapi_baseÚreturnc                 ót  — |D �ch c]  }|j                  «       ’Œ }	}t        |«      xr
 d|	vxr d|	v}
i |
rdd|› �ini ¥d|	vrdt        ini ¥d|	vrddini ¥}i |¥|¥}|j                  «       D ��ci c]  \  }}|j                  «       dk(  rdn||“Œ }}}| j	                  ||¬«      }||fS c c}w c c}}w )	NÚauthorizationz	x-api-keyzBearer zanthropic-versionzcontent-typezapplication/jsonzanthropic-beta)r   r   )ÚlowerÚboolr   ÚitemsÚ#_update_headers_with_anthropic_beta)Úselfr   r   r   r   r   r   r   ÚkeyÚpresentÚ
needs_authÚdefaultsÚcombinedÚvalueÚ
normalizedÚmergeds                   úu/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai_like/messages/transformation.pyÚ'validate_anthropic_messages_environmentzIOpenAILikeAnthropicMessagesConfig.validate_anthropic_messages_environment   s  € ð 29Ö9¨#˜#Ÿ)™)�+Ð9ˆÐ9Ü  ›MÒk¨oÀWÐ.LÒkÐQ\ÐdkÐQkˆ
ð+
Ù9C� 7¨7¨)Ð!4Ñ5Èð+
àGZÐbiÑGiÐ#Ô%BÑCÐoqð+
ð 8FÈWÑ7T�Ð 2Ñ3ÐZ\ð+
ˆð
 2˜WÐ1¨Ð1ˆàdl×drÑdrÓdt÷
ÙV`ÐVYÐ[` §¡£Ð0@Ò!@ÑÀcÈEÑQð
ˆ
ñ 
ð ×@Ñ@ØØ+ð Aó 
ˆð �xÐÐùò :ùó
s   …B/Á3"B4c                  ó   — y)NF© ©r   s    r"   Ú$should_filter_anthropic_beta_headerszFOpenAILikeAnthropicMessagesConfig.should_filter_anthropic_beta_headers5   s   € Øó    Ústreamc                 ó�   — |st        d«      ‚|j                  d«      }|j                  d«      r|S |j                  d«      }|› d�S )NzKapi_base is required to forward Anthropic /v1/messages to a native endpointú/z/v1/messagesz/v1)Ú
ValueErrorÚrstripÚendswithÚremovesuffix)r   r   r   r   r   r   r)   Úbases           r"   Úget_complete_urlz2OpenAILikeAnthropicMessagesConfig.get_complete_url8   sO   € ñ ÜÐjÓkÐkØ�‰˜sÓ#ˆØ�=‰=˜Ô(ØˆKØ× Ñ  Ó'ˆØ��|Ð$Ð$r(   ©NN©N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdictÚstrÚlistr   Útupler#   r   r'   r1   r%   r(   r"   r
   r
      sò   „ ñ
ð& #Ø#ñ à�c˜3�h‘ð ð ð ð �s‘)ð	 ð
 ð ð ð ð �t‘ð ð ˜‘*ð ð 
ˆt�C˜�H‰~˜s T™zÐ)Ñ	*ó ð6°dó ð #ñ%à˜‘*ð%ð �t‘ð%ð ð	%ð
 ð%ð ð%ð �t‘ð%ð 
ô%r(   r
   c                   ó(  ‡ — e Zd ZdZdefˆ fd„Zededz  fd„«       Zde	fd„Z
dedz  dedz  fd	„Zd
edz  defd„Z	 	 ddeeef   dedee   dedededz  d
edz  deeeef   edz  f   fˆ fd„Z	 dd
edz  dedz  dededede	dz  defˆ fd„Zˆ xZS )Ú#JSONProviderAnthropicMessagesConfigas  
    Provider-level native Anthropic Messages passthrough for JSON-configured
    OpenAI-compatible providers whose ``supported_endpoints`` in providers.json
    includes ``"/v1/messages"``. Resolves the api key and api base from the
    provider's configured env vars, then forwards the Anthropic payload
    untranslated like ``OpenAILikeAnthropicMessagesConfig``.
    Úproviderc                 ó0   •— t         ‰| �  «        || _        y r3   )ÚsuperÚ__init__Ú	_provider)r   r>   Ú	__class__s     €r"   rA   z,JSONProviderAnthropicMessagesConfig.__init__S   s   ø€ Ü‰ÑÔØ!ˆ�r(   r   Nc                 ó.   — | j                   j                  S r3   )rB   Úslugr&   s    r"   Úcustom_llm_providerz7JSONProviderAnthropicMessagesConfig.custom_llm_providerW   s   € à�~‰~×"Ñ"Ð"r(   c                  ó   — y)NTr%   r&   s    r"   Úshould_strip_billing_metadatazAJSONProviderAnthropicMessagesConfig.should_strip_billing_metadata[   s   € Ør(   r   c                 ól   — |xs1 t        | j                  j                  «      xs t        j                  S r3   )r   rB   Úapi_key_envÚlitellmr   )r   r   s     r"   Ú_resolve_api_keyz4JSONProviderAnthropicMessagesConfig._resolve_api_key^   s%   € ØÒWœ.¨¯©×)CÑ)CÓDÒWÌÏÉÐWr(   r   c                 ó¬   — | j                   j                  rt        | j                   j                  «      nd }|xs |xs | j                   j                  S r3   )rB   Úapi_base_envr   Úbase_url)r   r   Úenv_api_bases      r"   Ú_resolve_api_basez5JSONProviderAnthropicMessagesConfig._resolve_api_basea   s?   € ØMQÏ^É^×MhÒMhœn¨T¯^©^×-HÑ-HÔIÐnrˆØÒB˜<ÒB¨4¯>©>×+BÑ+BÐBr(   r   r   r   r   r   c           
      óN   •— t         ‰| �  |||||| j                  |«      |¬«      S )N)r   r   r   r   r   r   r   )r@   r#   rL   )	r   r   r   r   r   r   r   r   rC   s	           €r"   r#   zKJSONProviderAnthropicMessagesConfig.validate_anthropic_messages_environmente   s<   ø€ ô ‰wÑ>ØØØØ+Ø)Ø×)Ñ)¨'Ó2Øð ?ó 
ð 	
r(   r)   c                 óL   •— t         ‰| �  | j                  |«      |||||¬«      S )N)r   r   r   r   r   r)   )r@   r1   rQ   )r   r   r   r   r   r   r)   rC   s          €r"   r1   z4JSONProviderAnthropicMessagesConfig.get_complete_urly   s9   ø€ ô ‰wÑ'Ø×+Ñ+¨HÓ5ØØØ+Ø)Øð (ó 
ð 	
r(   r2   r3   )r4   r5   r6   r7   r   rA   Úpropertyr9   rF   r   rH   rL   rQ   r8   r:   r   r;   r#   r1   Ú__classcell__)rC   s   @r"   r=   r=   J   s\  ø„ ñð"Ð!5õ "ð ð# S¨4¡Zò #ó ð#ð¨tó ðX¨¨d©
ð X°s¸T±zó XðC¨#°©*ð C¸ó Cð #Ø#ñ
à�c˜3�h‘ð
ð ð
ð �s‘)ð	
ð
 ð
ð ð
ð �t‘ð
ð ˜‘*ð
ð 
ˆt�C˜�H‰~˜s T™zÐ)Ñ	*õ
ð6 #ñ
à˜‘*ð
ð �t‘ð
ð ð	
ð
 ð
ð ð
ð �t‘ð
ð 
÷
ñ 
r(   r=   )Útypingr   r   rK   ÚHlitellm.llms.anthropic.experimental_pass_through.messages.transformationr   Ú$litellm.llms.openai_like.json_loaderr   Úlitellm.secret_managers.mainr   r   Ú__annotations__r
   r=   r%   r(   r"   ú<module>r[      sB   ðß Ð ã õõ FÝ 7à'3Ð ˜uÓ 3ô:%Ð(?ô :%ôz?
Ð*Kõ ?
r(   