Ë
    uPêj  ã                   óZ   — d Z 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
  G d„ de«      Zy)	z?
DeepSeek Anthropic-compatible messages transformation config.
é    )ÚAnyÚFinalN)ÚAnthropicMessagesConfig©Úget_secret_str)ÚGenericLiteLLMParamsc                   óX  ‡ — e Zd ZdZededz  fd„«       Zdefd„Ze	ddedz  dedz  fd„«       Z
e	ddedz  defd	„«       Z	 	 dd
ededee   dedededz  dedz  deeedz  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d„Ze	dedefd„«       Zdedee   deded
edefˆ fd„Zˆ xZS )ÚDeepSeekAnthropicMessagesConfiga7  
    DeepSeek exposes an Anthropic-compatible Messages API at
    https://api.deepseek.com/anthropic.

    It accepts the native Anthropic Messages conversation shape, including
    thinking blocks in assistant history, but rejects Anthropic's explicit
    custom-tool discriminator (`{"type": "custom"}`).
    ÚreturnNc                  ó   — y)NÚdeepseek© ©Úselfs    úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/deepseek/messages/transformation.pyÚcustom_llm_providerz3DeepSeekAnthropicMessagesConfig.custom_llm_provider   s   € àó    c                  ó   — y)NTr   r   s    r   Úshould_strip_billing_metadataz=DeepSeekAnthropicMessagesConfig.should_strip_billing_metadata   s   € Ør   Úapi_keyc                 óD   — | xs t        d«      xs t        j                  S )NÚDEEPSEEK_API_KEY)r   Úlitellmr   ©r   s    r   Úget_api_keyz+DeepSeekAnthropicMessagesConfig.get_api_key    s   € àÒOœ.Ð);Ó<ÒOÄÇÁÐOr   Úapi_basec                 óB   — | xs t        d«      xs t        d«      xs dS )NÚDEEPSEEK_ANTHROPIC_API_BASEÚDEEPSEEK_API_BASEz"https://api.deepseek.com/anthropicr   ©r   s    r   Úget_api_basez,DeepSeekAnthropicMessagesConfig.get_api_base$   s2   € ð ò 4ÜÐ;Ó<ò4äÐ1Ó2ò4ð 4ð		
r   ÚheadersÚmodelÚmessagesÚoptional_paramsÚlitellm_paramsc                 ó´   — | j                  |¬«      }d|vrd|vr|�||d<   d|vrd|d<   d|vrd|d<   | j                  ||| j                  xs d¬	«      }||fS )
Nr   z	x-api-keyÚauthorizationzanthropic-versionz
2023-06-01zcontent-typezapplication/jsonr   )r"   r%   r   )r   Ú#_update_headers_with_anthropic_betar   )	r   r"   r#   r$   r%   r&   r   r   Údynamic_api_keys	            r   Ú'validate_anthropic_messages_environmentzGDeepSeekAnthropicMessagesConfig.validate_anthropic_messages_environment-   s�   € ð "&×!1Ñ!1¸'Ð!1Ó!Bˆà˜gÑ%¨/ÀÑ*HÈ_ÐMhØ#2ˆG�KÑ à gÑ-Ø+7ˆGÐ'Ñ(Ø Ñ(Ø&8ˆG�NÑ#à×:Ñ:ØØ+Ø $× 8Ñ 8Ò F¸Jð ;ó 
ˆð ˜Ð Ð r   Ústreamc                 ó  — | j                  |¬«      j                  d«      }|j                  d«      rd|v r|S |j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      s	d|vr|› d�}|› d�S )Nr    ú/z/v1/messagesz/anthropic/z/v1z/betaz
/anthropic)r!   ÚrstripÚendswithÚremovesuffix)r   r   r   r#   r%   r&   r,   Úbase_urls           r   Úget_complete_urlz0DeepSeekAnthropicMessagesConfig.get_complete_urlI   sš   € ð ×$Ñ$¨hÐ$Ó7×>Ñ>¸sÓCˆà×Ñ˜^Ô,°À(Ñ1JØˆOØ×(Ñ(¨Ó8ˆØ×(Ñ(¨Ó/ˆØ×(Ñ(¨Ó1ˆà× Ñ  Ô.°=ÈÑ3PØ"˜ :Ð.ˆHà�˜<Ð(Ð(r   Útoolsc                 ó  — t        | t        «      s| S g }| D ]f  }t        |t        «      rC|j                  d«      dk(  r/t        |«      }|j	                  dd «       |j                  |«       ŒV|j                  |«       Œh |S )NÚtypeÚcustom)Ú
isinstanceÚlistÚdictÚgetÚpopÚappend)r4   Úsanitized_toolsÚtoolÚsanitized_tools       r   Ú_sanitize_tools_for_deepseekz<DeepSeekAnthropicMessagesConfig._sanitize_tools_for_deepseek_   s|   € ä˜%¤Ô&ØˆLà!#ˆØò 	-ˆDÜ˜$¤Ô%¨$¯(©(°6Ó*:¸hÒ*FÜ!% d£�Ø×"Ñ" 6¨4Ô0Ø×&Ñ& ~Õ6à×&Ñ& tÕ,ð	-ð Ðr   Ú*anthropic_messages_optional_request_paramsc                 óf   •— t         ‰| �  |||||¬«      }d|v r| j                  |d   «      |d<   |S )N)r#   r$   rB   r&   r"   r4   )ÚsuperÚ$transform_anthropic_messages_requestrA   )r   r#   r$   rB   r&   r"   Úanthropic_messages_requestÚ	__class__s          €r   rE   zDDeepSeekAnthropicMessagesConfig.transform_anthropic_messages_requestn   sX   ø€ ô -2©GÑ,XØØØ7aØ)Øð -Yó -
Ð"ð Ð0Ñ0Ø26×2SÑ2SÐTnÐovÑTwÓ2xÐ& wÑ/Ø)Ð)r   )N)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚstrr   Úboolr   Ústaticmethodr   r!   r:   r9   r   Útupler+   r3   rA   r   rE   Ú__classcell__)rG   s   @r   r
   r
      sÁ  ø„ ñð ð S¨4¡Zò ó ðð¨tó ð ñP˜S 4™Zð P°3¸±:ò Pó ðPð ñ
˜s T™zð 
°Sò 
ó ð
ð #Ø#ñ!àð!ð ð!ð �s‘)ð	!ð
 ð!ð ð!ð �t‘ð!ð ˜‘*ð!ð 
ˆt�S˜4‘ZÐÑ	 ó!ðF #ñ)à˜‘*ð)ð �t‘ð)ð ð	)ð
 ð)ð ð)ð �t‘ð)ð 
ó)ð, ð¨Cð °Cò ó ðð*àð*ð �t‘*ð*ð 59ð	*ð
 -ð*ð ð*ð 
÷*ñ *r   r
   )rK   Útypingr   r   r   ÚHlitellm.llms.anthropic.experimental_pass_through.messages.transformationr   Úlitellm.secret_managers.mainr   Úlitellm.types.routerr   r
   r   r   r   ú<module>rV      s.   ðñ÷ ã õõ 8Ý 5ôp*Ð&=õ p*r   