Ë
    uPêjë  ã                   ó¦   — d Z ddlmZ ddlmZmZ ddl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d¬«      Z G d„ ded¬«      Z G d„ de«      Zy)zc
Translates from OpenAI's `/v1/chat/completions` to Tencent TokenHub's
OpenAI-compatible endpoint.
é    )ÚMapping)ÚFinalÚ	TypedDict)ÚReadOnlyN©Úget_secret_str)Úsupports_reasoningé   )ÚOpenAIGPTConfigc                   ó2   — e Zd ZU dZee   ed<   ee   ed<   y)ÚThinkingPayloada  Tencent TokenHub `thinking` object.

    `type` ("enabled"/"disabled"/"adaptive") is required by TokenHub when the
    object is passed; `budget_tokens` is auto-filled server-side when omitted.
    Ref: https://www.tencentcloud.com/document/product/1300/82345
    ÚtypeÚbudget_tokensN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__Úint© ó    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/tencent/chat/transformation.pyr   r      s   … ñð �3‰-ÓØ˜C‘=Ô r   r   F)Útotalc                   ó,   — e Zd ZU dZeeeef      ed<   y)ÚThinkingExtraBodyz;`extra_body` payload carrying TokenHub's `thinking` object.ÚthinkingN)	r   r   r   r   r   r   r   Úobjectr   r   r   r   r   r      s   … ÙEà�w˜s F˜{Ñ+Ñ,Ô,r   r   c                   ó6  ‡ — e Zd Zdedefˆ fd„Zdededededef
ˆ fd„Ze	dede
d	e
deee
f   d
z  fd„«       Zededeee
f   deee
f   fd„«       Zededefd„«       Zded
z  ded
z  deed
z  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ˆ xZS )ÚTencentChatConfigÚmodelÚreturnc                 óf   •— t         ‰| �  |«      }t        |d¬«      r|j                  ddg«       |S )NÚtencent)Úcustom_llm_providerr   Úreasoning_effort)ÚsuperÚget_supported_openai_paramsr	   Úextend)Úselfr!   ÚparamsÚ	__class__s      €r   r(   z-TencentChatConfig.get_supported_openai_params%   s3   ø€ Ü™Ñ;¸EÓBˆÜ˜e¸ÕCØ�M‰M˜:Ð'9Ð:Ô;Øˆr   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó²   •— t         ‰
| �  ||||«      }|j                  dd «      }|j                  dd «      }| j                  |||¬«      }|�	d|i}	|	|d<   |S )Nr   r&   )r!   Úthinking_valuer&   Ú
extra_body)r'   Úmap_openai_paramsÚpopÚ_resolve_thinking_payload)r*   r-   r.   r!   r/   Úmapped_paramsr1   r&   r   r2   r,   s             €r   r3   z#TencentChatConfig.map_openai_params+   s…   ø€ ô  %™wÑ8Ð9KÈ_Ð^cÐepÓqˆà -× 1Ñ 1°*¸dÓ CˆØ"/×"3Ñ"3Ð4FÈÓ"MÐà×8Ñ8ØØ)Ø-ð 9ó 
ˆð
 Ðð 5?ÀÐ3IˆJØ*4ˆM˜,Ñ'ØÐr   r1   r&   Nc                 ó¦   — t        |t        «      r| j                  ||¬«      S t        |t        «      rd|dk(  rdndi}| j                  ||¬«      S y )N)r!   r   r   ÚnoneÚdisabledÚenabled)Ú
isinstanceÚdictÚ_coerce_thinking_type_for_modelr   )Úclsr!   r1   r&   Úpayloads        r   r5   z+TencentChatConfig._resolve_thinking_payloadF   s`   € ô �n¤dÔ+Ø×6Ñ6¸UÈ^Ð6Ó\Ð\ÜÐ&¬Ô,ð 06ÐEUÐY_ÒE_±zÐenÐ.oˆGØ×6Ñ6¸UÈWÐ6ÓUÐUØr   r   c                 ó´   — |j                  d«      dk7  st        j                  | «      s|S |j                  d«      }t        |t        «      rd|dœ}|S ddi}|S )a
  Coerce `thinking.type` to a value the model accepts.

        MiniMax models on TokenHub only accept "adaptive"/"disabled" and reject
        "enabled" with a 400; "adaptive" (the model decides when to think) is
        the closest semantic, so "enabled" is coerced for them. The capability
        is read from the model map's `supports_adaptive_thinking` flag, so
        aliases and newly onboarded adaptive-only models need no code change.
        Ref: https://www.tencentcloud.com/document/product/1300/82345
        r   r:   r   Úadaptive)r   r   )Úgetr    Ú_is_adaptive_thinking_modelr;   r   )r!   r   ÚbudgetÚcoerced_with_budgetÚcoerceds        r   r=   z1TencentChatConfig._coerce_thinking_type_for_modelV   sb   € ð �<‰<˜Ó 9Ò,Ô4E×4aÑ4aÐbgÔ4hØˆOà (§¡¨_Ó =ˆÜ�fœcÔ"ØCMÐ`fÑ:gÐØ&Ð&Ø+1°:Ð*>ˆØˆr   c                 óv   — 	 t        j                  | d¬«      }|j                  d«      du S # t        $ r Y yw xY w)zCRead `supports_adaptive_thinking` from the model map under tencent.r$   )r!   r%   FÚsupports_adaptive_thinkingT)ÚlitellmÚget_model_infoÚ	ExceptionrB   )r!   Ú
model_infos     r   rC   z-TencentChatConfig._is_adaptive_thinking_modelk   sF   € ð	Ü6=×6LÑ6LÐSXÐnwÔ6xˆJð �~‰~Ð:Ó;¸tÐCÐCøô ò 	Ùð	ús   ‚, ¬	8·8Úapi_baseÚapi_keyc                 óN   — |xs t        d«      xs d}|xs t        d«      }||fS )NÚTENCENT_API_BASEú-https://tokenhub-intl.tencentcloudmaas.com/v1ÚTENCENT_API_KEYr   )r*   rM   rN   Údynamic_api_keys       r   Ú$_get_openai_compatible_provider_infoz6TencentChatConfig._get_openai_compatible_provider_infot   s5   € ð Òtœ~Ð.@ÓAÒtÐEtˆØ!(Ò!M¬NÐ;LÓ,MˆØ˜Ð(Ð(r   Úlitellm_paramsÚstreamc                 óˆ   — |sd}|j                  d«      }|j                  d«      r|S |j                  d«      s|› d�}|› d�S )NrQ   ú/z/chat/completionsz/v1)ÚrstripÚendswith)r*   rM   rN   r!   r.   rU   rV   s          r   Úget_complete_urlz"TencentChatConfig.get_complete_url{   sV   € ñ ØFˆHà—?‘? 3Ó'ˆà×ÑÐ0Ô1ØˆOà× Ñ  Ô'Ø"˜ 3Ð'ˆHà�Ð,Ð-Ð-r   )N)r   r   r   r   Úlistr(   r<   Úboolr3   Úclassmethodr   r   r5   Ústaticmethodr=   rC   ÚtuplerT   r[   Ú__classcell__)r,   s   @r   r    r    $   s‰  ø„ ð°ð ¸õ ðà ðð ðð ð	ð
 ðð 
õð6 ðàðð ðð !ð	ð
 
��f�Ñ	 Ñ	$òó ðð ð¨sð ¸gÀcÈ6ÀkÑ>Rð ÐW^Ð_bÐdjÐ_jÑWkò ó ðð( ðD¨3ð D°4ò Dó ðDð)Ø˜d™
ð)Ø-0°4©Zð)à	ˆs�T‰z˜3 ™:Ð%Ñ	&ó)ð #ñ.à˜‘*ð.ð �t‘ð.ð ð	.ð
 ð.ð ð.ð �t‘ð.ð 
÷.r   r    )r   Úcollections.abcr   Útypingr   r   Útyping_extensionsr   rI   Úlitellm.secret_managers.mainr   Úlitellm.utilsr	   Úopenai.chat.gpt_transformationr   r   r   r    r   r   r   ú<module>rh      sK   ðñõ
 $ß #å &ã Ý 7Ý ,å =ô	!�i uõ 	!ô-˜	¨õ -ôk.˜õ k.r   