Ë
    uPêjÌ'  ã            
       ó   — U d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZ ddlZddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZmZ ddlmZ dZe	e d<    e!ddh«      Z"e	e d<   dZ#e	e d<   dZ$e	e d<   de%de%dee%ge&f   de&dz  fd„Z' e!ddh«      Z(e	e d<    e!h d£«      Z)e	e d <   d!Z*e	e d"<    ed#d$d$d%œ«      Z+e	e d&<    ed$d$d$d'd(œ«      Z,e	e d)<    G d*„ d+e«      Z-de%de&dz  fd,„Z.de%de&dz  fd-„Z/d.ee%   de%d/e&de0e%d0f   fd1„Z1de%de&fd2„Z2d3e%de%de%fd4„Z3d3e%de%dee%e4f   fd5„Z5d.ee%   de%d/e&de&fd6„Z6d7edefd8„Z7 G d9„ d:e«      Z8y);z�
Translates from OpenAI's `/v1/chat/completions` to Together AI's `/v1/chat/completions`.

Docs: https://docs.together.ai/docs/chat-overview
é    )ÚCallableÚ	ContainerÚ	CoroutineÚMapping)ÚMappingProxyType)ÚFinalÚLiteralÚcastÚoverload)ÚReadOnlyÚ	TypedDictN)Úverbose_logger)ÚUnsupportedParamsError)Ú$declared_reasoning_efforts_for_model)ÚAllMessageValues)Úsupports_function_callingÚsupports_reasoningÚsupports_response_schemaé   )ÚOpenAIGPTConfig)ÚtoolsÚtool_choiceÚfunction_callÚTOOL_CALLING_PARAMSÚthinking_blocksÚprovider_specific_fieldsÚ!LITELLM_INTERNAL_ASSISTANT_FIELDSz.https://docs.together.ai/docs/function-callingÚFUNCTION_CALLING_DOCS_URLz?https://docs.together.ai/docs/inference/chat/structured-outputsÚSTRUCTURED_OUTPUTS_DOCS_URLÚmodelÚflagÚcheckÚreturnc                 ó  — 	  || «      ry	 t        j                  j                  d| › �«      }t        |t        «      r|j                  |«      du ryy # t         $ r"}t        j                  d|| |«       Y d }~Œmd }~ww xY w)NTz(Error checking together_ai %s for %s: %sztogether_ai/F)Ú	Exceptionr   ÚdebugÚlitellmÚ
model_costÚgetÚ
isinstanceÚdict)r    r!   r"   ÚeÚregistry_entrys        úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/together_ai/chat/transformation.pyÚ_registry_verdictr/   !   s…   € ðYÙ�Œ<Øð ô $×.Ñ.×2Ñ2°\À%ÀÐ3IÓJ€NÜ�.¤$Ô'¨N×,>Ñ,>¸tÓ,DÈÑ,MØØøô ò YÜ×ÑÐGÈÈuÐVW×XÑXûðYús   ‚A Á	A>ÁA9Á9A>zopenai/gpt-oss-120bzopenai/gpt-oss-20bÚ"ADJUSTABLE_EFFORT_REASONING_MODELS>   úQwen/Qwen3.5-9Búzai-org/GLM-5.2úQwen/Qwen3.6-Plusúmoonshotai/Kimi-K3úMiniMaxAI/MiniMax-M3ú!nvidia/nemotron-3-ultra-550b-a55búdeepseek-ai/DeepSeek-V4-ProÚHYBRID_REASONING_MODELSr7   ÚHIGH_MAX_EFFORT_MODEL_PREFIXÚlowÚhigh)ÚminimalÚxhighÚmaxÚEFFORT_TRANSLATIONr>   )r<   r:   Úmediumr=   ÚHIGH_MAX_EFFORT_TRANSLATIONc                   ó   — e Zd ZU ee   ed<   y)ÚTogetherReasoningToggleÚenabledN)Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__© ó    r.   rC   rC   E   s   … Ø�d‰^ÔrK   rC   c                 ó   — t        | dd„ «      S )Nr   c                 ó   — t        | d¬«      S ©NÚtogether_ai©Úcustom_llm_provider)r   ©Úchecked_models    r.   ú<lambda>z+_function_calling_verdict.<locals>.<lambda>M   s   € Ô7¸Ð[hÔi€ rK   ©r/   ©r    s    r.   Ú_function_calling_verdictrW   I   s   € ÜØØ#Ùióð rK   c                 ó   — t        | dd„ «      S )Nr   c                 ó   — t        | d¬«      S rN   )r   rR   s    r.   rT   z*_response_schema_verdict.<locals>.<lambda>U   s   € Ô6°}ÐZgÔh€ rK   rU   rV   s    r.   Ú_response_schema_verdictrZ   Q   s   € ÜØØ"Ùhóð rK   Úpassed_paramsÚdrop_params.c                 óz  ‡ — t        ˆ fd„t        D «       «      }|syt        |«      }|du ry|€,t        j                  d|dj                  |«      t        «       y|st        j                  r-t        j                  d|dj                  |«      t        «       |S t        dddj                  |«      › d	|› d
�¬«      ‚)Nc              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­w©NrJ   )Ú.0Úparamr[   s     €r.   ú	<genexpr>z'_tool_params_to_drop.<locals>.<genexpr>Z   s   øè ø€ Ò%g°ÐPUÐYfÒPf¤eÑ%gùs   ƒ	�rJ   Tz€together_ai model %s has no function calling entry in the model registry; passing %s through for Together to validate. Docs - %sz, zetogether_ai model %s does not support function calling per the model registry; dropping %s. Docs - %séô  z)together_ai does not support parameters: z, for model=ú=. To drop it from the call, set `litellm.drop_params = True`.©Ústatus_codeÚmessage)
Útupler   rW   r   ÚwarningÚjoinr   r'   r\   r   )r[   r    r\   Úpassed_tool_paramsÚverdicts   `    r.   Ú_tool_params_to_droprm   Y   sÏ   ø€ Ü %Ó%gÔ9LÔ%gÓ gÐÙØÜ.¨uÓ5€GØ�$�ØØ€Ü×Ñð OØØ�I‰IÐ(Ó)Ü%ô		
ð Ù”g×)Ò)Ü×ÑØsØØ�I‰IÐ(Ó)Ü%ô		
ð "Ð!Ü
 ØØ;¸D¿I¹IÐFXÓ<YÐ;ZÐZfÐglÐfmð  nkð  lôð rK   c                 ój   — | t         v s| t        v ry| j                  t        «      ryt	        | d¬«      S )NTrO   rP   )r0   r8   Ú
startswithr9   r   rV   s    r.   Ú_supports_together_reasoningrp   v   s5   € ØÔ2Ñ2°eÔ?VÑ6VØØ×ÑÔ4Ô5ØÜ˜e¸ÔGÐGrK   Úeffortc                 óf   — | dk(  rt        j                  d|«       yt        j                  | | «      S )NÚnonezStogether_ai model %s cannot disable reasoning; mapping reasoning_effort=none to lowr:   )r   r&   r?   r)   )rq   r    s     r.   Ú_adjustable_effortrt   ~   s6   € Ø�ÒÜ×ÑØaÐchô	
ð Ü×!Ñ! &¨&Ó1Ð1rK   c                 óx  — | dk(  rt        i «      S |t        v rt        dt        | |«      i«      S | dk(  rddi}t        d|i«      S | t        |d«      xs dv rt        d| i«      S |j	                  t
        «      r!t        dt        j                  | | «      i«      S t        dt        j                  | | «      i«      S )	NÚdefaultÚreasoning_effortrs   rD   FÚ	reasoningrO   rJ   )	r   r0   rt   r   ro   r9   rA   r)   r?   )rq   r    Údisable_reasonings      r.   Ú_reasoning_effort_payloadrz   ‡   sÓ   € Ø�ÒÜ Ó#Ð#ØÔ2Ñ2ÜÐ!3Ô5GÈÐPUÓ5VÐ WÓXÐXØ�ÒØ=FÈÐ<NÐÜ Ð.?Ð @ÓAÐAØÔ6°u¸mÓLÒRÐPRÑSÜÐ!3°VÐ <Ó=Ð=Ø×ÑÔ4Ô5ÜÐ!3Ô5P×5TÑ5TÐU[Ð]cÓ5dÐ eÓfÐfÜÐ/Ô1C×1GÑ1GÈÐPVÓ1WÐXÓYÐYrK   c                 óæ   — d| vryt        |«      }|du ry|€t        j                  d|t        «       y|st        j
                  rt        j                  d|t        «       yt        dd|› d�¬	«      ‚)
NÚresponse_formatFTz�together_ai model %s has no structured outputs entry in the model registry; passing response_format through for Together to validate. Docs - %szttogether_ai model %s does not support structured outputs per the model registry; dropping response_format. Docs - %src   zDtogether_ai does not support parameters: response_format, for model=rd   re   )rZ   r   ri   r   r'   r\   r   )r[   r    r\   rl   s       r.   Ú_drop_response_formatr}   –   s•   € Ø Ñ-ØÜ-¨eÓ4€GØ�$�ØØ€Ü×Ñð ^ØÜ'ô	
ð
 Ù”g×)Ò)Ü×Ñð CØÜ'ô	
ð
 Ü
 ØØVÐW\ÐV]ð  ^[ð  \ôð rK   rg   c           	      óº   — | d   dk7  st         j                  | «      r| S t        d| j                  «       D ��ci c]  \  }}|t         vsŒ||“Œ c}}«      S c c}}w )NÚroleÚ	assistantr   )r   Ú
isdisjointr
   Úitems)rg   ÚkeyÚvalues      r.   Ú _without_litellm_internal_fieldsr…   °   s`   € Øˆv�˜+Ò%Ô)J×)UÑ)UÐV]Ô)^ØˆÜØà)0¯©«÷	
Ù%˜3 ¸CÔGhÒ<hˆC�‰Jó	
óð ùó	
s   ¹AÁ
Ac                   ó  ‡ — e Zd Zedee   deded   dee	e	ee   f   fd„«       Z
e	 ddee   deded   dee   fd„«       Z
	 ddee   dededee   ee	e	ee   f   z  fˆ fd	„Z
dedefˆ fd
„Zdededededef
ˆ fd„Zˆ xZS )ÚTogetherAIChatConfigÚmessagesr    Úis_asyncTr#   c                  ó   — y r_   rJ   ©Úselfrˆ   r    r‰   s       r.   Ú_transform_messagesz(TogetherAIChatConfig._transform_messages¼   s   € ð =@rK   Fc                  ó   — y r_   rJ   r‹   s       r.   r�   z(TogetherAIChatConfig._transform_messagesÄ   s   € ð "%rK   c                 óŠ   •— |D �cg c]  }t        |«      ‘Œ }}|rt        ‰| �	  ||d¬«      S t        ‰| �	  ||d¬«      S c c}w )zîTogether consumes replayed assistant `reasoning_content` (preserved thinking via
        `chat_template_kwargs: {"clear_thinking": false}`), so it must stay in the payload;
        only litellm-internal fields are stripped before sending.T)r‰   F)r…   Úsuperr�   )rŒ   rˆ   r    r‰   rg   ÚstrippedÚ	__class__s         €r.   r�   z(TogetherAIChatConfig._transform_messagesÌ   s_   ø€ ð FNö
Ø:AÔ,¨WÕ5ð
ˆð 
ñ Ü‘7Ñ.¨x¸ÈÐ.ÓNÐNÜ‰wÑ*¨8°UÀUÐ*ÓKÐKùò
s   †A c                 óH   •— t         ‰| �  |«      }t        |«      s|S g |¢d‘S )Nrw   )r�   Úget_supported_openai_paramsrp   )rŒ   r    Úsupported_paramsr’   s      €r.   r”   z0TogetherAIChatConfig.get_supported_openai_paramsÜ   s;   ø€ Ü"'¡'Ñ"EÀeÓ"LÐÜ+¨EÔ2Ø#Ð#ð
Øð
àð
ð 	
rK   Únon_default_paramsÚoptional_paramsr\   c                 ó~  •— t         ‰
| �  ||||«      }t        |||«      D ]  }|j                  |«       Œ t	        |||«      r|j                  d«       |j                  d«      }t        |t        «      s|S |j                  d«       t        ||«      j                  «       D ]  \  }}	|j                  ||	«       Œ |S )Nr|   rw   )r�   Úmap_openai_paramsrm   Úpopr}   r)   r*   Ústrrz   r‚   Ú
setdefault)rŒ   r–   r—   r    r\   Úmapped_openai_paramsra   rq   rƒ   r„   r’   s             €r.   r™   z&TogetherAIChatConfig.map_openai_paramså   sË   ø€ ô ',¡gÑ&?Ð@RÐTcÐejÐlwÓ&xÐÜ)Ð*>ÀÀ{ÓSò 	,ˆEØ ×$Ñ$ UÕ+ð	,ä Ð!5°u¸kÔJØ ×$Ñ$Ð%6Ô7Ø,×0Ñ0Ð1CÓDˆÜ˜&¤#Ô&Ø'Ð'Ø× Ñ Ð!3Ô4Ü3°F¸EÓB×HÑHÓJò 	8‰JˆC�Ø ×+Ñ+¨C°Õ7ð	8à#Ð#rK   )F)rE   rF   rG   r   Úlistr   r›   r	   r   Úobjectr�   rH   r”   r+   r™   Ú__classcell__)r’   s   @r.   r‡   r‡   »   sQ  ø„ Øð@àÐ'Ñ(ð@ð ð@ð ˜$‘-ð	@ð
 
�6˜6 4Ð(8Ñ#9Ð9Ñ	:ò@ó ð@ð ð
 $)ñ	%àÐ'Ñ(ð%ð ð%ð ˜%‘.ð	%ð
 
ÐÑ	ò%ó ð%ð ñ	LàÐ'Ñ(ðLð ðLð ð	Lð
 
ÐÑ	 )¨F°F¸DÐAQÑ<RÐ,RÑ"SÑ	SõLð 
°ð 
¸õ 
ð$à ð$ð ð$ð ð	$ð
 ð$ð 
÷$ñ $rK   r‡   )9Ú__doc__Úcollections.abcr   r   r   r   Útypesr   Útypingr   r	   r
   r   Útyping_extensionsr   r   r'   Úlitellm._loggingr   Úlitellm.exceptionsr   Ú0litellm.router_utils.reasoning_effort_capabilityr   Úlitellm.types.llms.openair   Úlitellm.utilsr   r   r   Úopenai.chat.gpt_transformationr   r   rI   Ú	frozensetr   r   r   r›   rH   r/   r0   r8   r9   r?   rA   rC   rW   rZ   rh   rm   rp   rt   rŸ   rz   r}   r…   r‡   rJ   rK   r.   ú<module>r­      s.  ðò÷ DÓ CÝ "÷ó ÷ 2ã Ý +Ý 5Ý aÝ 6ß aÑ aå =àFÐ �UÓ FÙ+4Ð6GÐIcÐ5dÓ+eÐ ! 5Ó eØ#SÐ ˜5Ó SØ%fÐ ˜UÓ fð	˜Sð 	¨ð 	°H¸c¸UÀD¸[Ñ4Ið 	ÈdÐUYÉkó 	ñ -6àØðó-Ð " Eó ñ "+òó
"Ð ˜ó 
ð 'DÐ ˜eÓ CÙ,¸ÈÐX^Ñ-_Ó`Ð �EÓ `Ù%5Ø˜v°À%ÑHó&Ð ˜Uó ô
˜iô ð Sð ¨T°D©[ó ð Cð ¨D°4©Kó ð¨	°#©ð ¸sð ÐQUð ÐZ_Ð`cÐehÐ`hÑZió ð:H¨ð H°ó Hð2˜sð 2¨3ð 2°3ó 2ðZ cð Z°#ð Z¸'À#ÀvÀ+Ñ:Nó Zð¨°3©ð Àð ÐRVð Ð[_ó ð4Ð.>ð ÐCSó ô<$˜?õ <$rK   