Ë
    uPêj«*  ã                   óº   — d Z ddlZddlmZ ddl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 dd	lmZmZmZmZmZmZ d
dlmZmZ ddlmZ  G d„ de«      Zy)zQ
Translate from OpenAI's `/v1/chat/completions` to VLLM's `/v1/chat/completions`
é    N)Ú	Coroutine)ÚAnyÚFinalÚLiteralÚcastÚoverload)Ú_get_image_mime_type_from_url)Ú_parse_mime_type)Ú%reasoning_effort_from_thinking_budget©Úget_secret_str)ÚAllMessageValuesÚChatCompletionAssistantToolCallÚChatCompletionFileObjectÚ#ChatCompletionToolCallFunctionChunkÚChatCompletionVideoObjectÚChatCompletionVideoUrlObjecté   )Ú_remove_additional_propertiesÚ_remove_strict_from_schemaé   )ÚOpenAIGPTConfigc                   ó�  ‡ — e Zd Zdeeeef      deeeef      fd„Zdedee   fˆ fd„Zdededede	def
ˆ fd	„Z
d
edz  dedz  deedz  edz  f   fd„Zdede	fd„Zdedef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ˆ xZS )ÚHostedVLLMChatConfigÚtoolsÚreturnc                 óž  — g }t        |«      D �];  \  }}t        |t        «      s|j                  |«       Œ)|j	                  d«      dk7  r|j                  |«       ŒO|j	                  di «      }t        |t        «      si }|j	                  d«      xs |j	                  d«      xs d|› �}|j	                  d«      xs |j	                  d«      }|j	                  d«      xs |j	                  d«      }t        |t        «      sddd	d
dœidgdœ}dt        |«      |dœdœ}	t        |t
        «      r||	d   d<   |j                  |	«       �Œ> |S )z«
        vLLM chat completions currently accepts only OpenAI function tools.
        Convert custom tools into function tools so request validation does not fail.
        ÚtypeÚcustomÚnameÚcustom_tool_ÚdescriptionÚinput_schemaÚobjectÚinputÚstringzRaw tool input payload.)r   r"   )r   Ú
propertiesÚrequiredÚfunction)r    Ú
parameters)r   r)   )Ú	enumerateÚ
isinstanceÚdictÚappendÚgetÚstr)
Úselfr   Úconverted_toolsÚidxÚtoolÚcustom_toolÚ	tool_nameÚtool_descriptionÚtool_parametersÚfunction_tools
             úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/hosted_vllm/chat/transformation.pyÚ'_convert_custom_tools_to_function_toolsz<HostedVLLMChatConfig._convert_custom_tools_to_function_tools   s]  € ð
 8:ˆÜ" 5Ó)ó '	2‰IˆC�Ü˜d¤DÔ)Ø×&Ñ& tÔ,Øà�x‰x˜Ó 8Ò+Ø×&Ñ& tÔ,ØàŸ(™( 8¨RÓ0ˆKÜ˜k¬4Ô0Ø �à#Ÿ™¨Ó/Ò[°4·8±8¸FÓ3CÒ[ÈÐVYÐUZÐG[ˆIØ*Ÿ™¨}Ó=ÒXÀÇÁÈ-ÓAXÐØ)Ÿo™o¨nÓ=ÒYÀÇÁÈ.ÓAYˆOä˜o¬tÔ4à$àØ$,Ø+Dñ"ð#ð ") 	ñ	#�ð #ä 	›NØ"1ññ-ˆMô Ð*¬CÔ0Ø;K�˜jÑ)¨-Ñ8à×"Ñ" =Ö1ðO'	2ðR Ðó    Úmodelc                 óL   •— t         ‰| �  |«      }|j                  ddg«       |S )NÚreasoning_effortÚthinking)ÚsuperÚget_supported_openai_paramsÚextend)r1   r=   ÚparamsÚ	__class__s      €r:   rB   z0HostedVLLMChatConfig.get_supported_openai_paramsP   s)   ø€ Ü™Ñ;¸EÓBˆØ�‰Ð)¨:Ð6Ô7Øˆr<   Únon_default_paramsÚoptional_paramsÚdrop_paramsc                 ó€  •— |j                  dd «      }|�7t        |«      }t        |«      }t        |t        «      r| j                  |«      }|�||d<   |j                  dd «      }|�Ft        |t        «      r6|j                  d«      dk(  r"d|vrt        |j                  dd«      «      |d<   t        ‰| �)  ||||«      S )Nr   r@   r   Úenabledr?   Úbudget_tokensr   )Úpopr   r   r,   Úlistr;   r-   r/   r   rA   Úmap_openai_params)r1   rF   rG   r=   rH   Ú_toolsr@   rE   s          €r:   rN   z&HostedVLLMChatConfig.map_openai_paramsU   sÐ   ø€ ð $×'Ñ'¨°Ó6ˆØÐÜ2°6Ó:ˆFÜ/°Ó7ˆFÜ˜&¤$Ô'Ø×EÑEÀfÓM�ØÐØ*0Ð˜wÑ'à,×0Ñ0°¸TÓBˆØÐ¤J¨x¼Ô$>Ø�|‰|˜FÓ# yÒ0Ø%Ð-?Ñ?Ü=bØ Ÿ™ _°aÓ8ó>Ð&Ð'9Ñ:ô ‰wÑ(Ð);¸_ÈeÐU`ÓaÐar<   Úapi_baseNÚapi_keyc                 óN   — |xs t        d«      }|xs t        d«      xs d}||fS )NÚHOSTED_VLLM_API_BASEÚHOSTED_VLLM_API_KEYzfake-api-keyr   )r1   rP   rQ   Údynamic_api_keys       r:   Ú$_get_openai_compatible_provider_infoz9HostedVLLMChatConfig._get_openai_compatible_provider_infoo   s5   € ð ÒEœ~Ð.DÓEˆØ!(Ò!c¬NÐ;PÓ,QÒ!cÐUcˆØ˜Ð(Ð(r<   Úcontent_itemc                 óf  — |j                  di «      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      dk7  ry|r|j                  d«      ry|r t        |«      }|r|j                  d«      ryy|rt        |«      }|r|j                  d«      ryy)	NÚfileÚformatÚ	file_dataÚfile_idr   Fzvideo/T)r/   Ú
startswithr
   r	   )r1   rW   rY   rZ   r[   r\   Ú	mime_types          r:   Ú_is_video_filez#HostedVLLMChatConfig._is_video_filev   s±   € Ø"×&Ñ& v¨rÓ2ˆØŸ™ Ó*ˆØŸ8™8 KÓ0ˆ	ØŸ™ )Ó,ˆØ×Ñ˜FÓ# vÒ-ØÙ�f×'Ñ'¨Ô1ØÙÜ(¨Ó3ˆIÙ˜Y×1Ñ1°(Ô;Øð
 ñ	 Ü5°gÓ>ˆIÙ˜Y×1Ñ1°(Ô;ØØr<   c                 óä   — |j                  di «      }|j                  d«      }|j                  d«      }|rt        dt        |¬«      ¬«      S |rt        dt        |¬«      ¬«      S t        d«      ‚)NrY   r\   r[   Ú	video_url)Úurl)r   ra   z file_id or file_data is required)r/   r   r   Ú
ValueError)r1   rW   rY   r\   r[   s        r:   Ú_convert_file_to_video_urlz/HostedVLLMChatConfig._convert_file_to_video_url‰   sj   € Ø"×&Ñ& v¨rÓ2ˆØŸ™ )Ó,ˆØŸ8™8 KÓ0ˆ	áÜ,°+ÔIeÐjqÔIrÔsÐsÙÜ,°+ÔIeÐjsÔItÔuÐuÜÐ;Ó<Ð<r<   ÚmessagesÚis_asyncTc                  ó   — y ©N© ©r1   re   r=   rf   s       r:   Ú_transform_messagesz(HostedVLLMChatConfig._transform_messages”   s   € ð 7:r<   Fc                  ó   — y rh   ri   rj   s       r:   rk   z(HostedVLLMChatConfig._transform_messages™   s   € ð "%r<   c                 óR  •— |D �]Ï  }|d   dk(  �r|j                  dd«       |j                  dd«       |j                  d«      }t        |t        «      sŒSg }g }g }d}	|D �]  }
t        |
t        «      rG|
j                  d«      d	k(  r3|j                  |
j                  d	d
«      «       |j                  |
«       Œ[t        |
t        «      r’|
j                  d«      dk(  r~|
j                  di «      }|j                  t        |
j                  d«      dt        |
j                  d«      t        |t        «      r|nt        j                  |«      ¬«      ¬«      «       Œý|j                  |
«       d}	�Œ |r’|j                  d«      }t        |t        «      rl|D �ch c]4  }t        |t        «      r"|j                  d«      �|j                  d«      ’Œ6 }}|D �cg c]  }|j                  d«      |vr|‘Œ }}|r||z   |d<   n||d<   dj                  |«      }|	r|n|}||d<   �Œ"|d   dk(  s�Œ,|j                  d«      }|s�ŒAt        |t        «      s�ŒSg }t        |«      D ]O  \  }}|j                  d«      dk(  sŒt        t        |«      }| j                  |«      sŒ=|j                  ||f«       ŒQ |D ]  \  }}| j!                  |«      ||<   Œ �ŒÒ |r#t"        ‰| �I  ||t        t&        d   d«      ¬«      S t"        ‰| �I  ||t        t&        d   d«      ¬«      S c c}w c c}w )a  
        Support translating:
        - video files from file_id or file_data to video_url
        - thinking_blocks and reasoning_content on assistant messages are removed,
          and content lists are converted to strings for vLLM compatibility
        ÚroleÚ	assistantÚthinking_blocksNÚreasoning_contentÚcontentFr   ÚtextÚ Útool_user%   Úidr)   r    )r    Ú	arguments)rv   r   r)   TÚ
tool_callsú
ÚuserrY   )rf   )rL   r/   r,   rM   r-   r.   r   r   r0   ÚjsonÚdumpsÚjoinr+   r   r   r_   rd   rA   rk   r   )r1   re   r=   rf   ÚmessageÚexisting_contentÚ
text_partsrx   Úcontent_blocksÚhas_structured_contentÚcÚ
tool_inputÚexisting_tool_callsÚ	tool_callÚexisting_tool_call_idsÚnew_tool_callsÚcontent_strÚnew_contentÚmessage_contentÚreplaced_content_itemsr3   rW   rE   s                         €r:   rk   z(HostedVLLMChatConfig._transform_messages¡   s<  ø€ ð  ó B	]ˆGØ�v‰ +Ó-Ø—‘Ð-¨tÔ4Ø—‘Ð/°Ô6Ø#*§;¡;¨yÓ#9Ð ÜÐ.´Õ5Ø!#�JØHJ�JØ35�NØ-2Ð*Ø-ó :˜Ü% a¬Ô.°1·5±5¸³=ÀFÒ3JØ&×-Ñ-¨a¯e©e°F¸BÓ.?Ô@Ø*×1Ñ1°!Õ4Ü'¨¬4Ô0°Q·U±U¸6³]ÀjÒ5PØ)*¯©¨w¸Ó);˜JØ&×-Ñ-Ü ?Ø'(§u¡u¨T£{Ø)3Ü-PØ-.¯U©U°6«]ô 0:Ø0:Ü03ô0.ñ -7ô
 26·±¸JÓ1Gô
.&ô!"õð$ +×1Ñ1°!Ô4Ø59Ò2ð3:ñ4 "Ø.5¯k©k¸,Ó.GÐ+Ü%Ð&9¼4Ô@ð 2Eö6à$-Ü#-¨i¼Ô#>À9Ç=Á=ÐQUÓCVÐCbð !*§¡¨dÕ 3ð6Ð2ð 6ð 2<ö.à$-Ø#,§=¡=°Ó#6Ð>TÑ#Tò !*ð.˜Nð .ñ
  .Ø8KÈnÑ8\ ¨Ò 5à4>˜G LÑ1Ø"&§)¡)¨JÓ"7�KÙ4J¡.ÐP[�KØ)4�G˜IÓ&Ø˜‘ FÔ*Ø")§+¡+¨iÓ"8�Û"¤z°/Ä4Ö'HØY[Ð*Ü-6°Ó-Gò SÑ)˜˜\Ø'×+Ñ+¨FÓ3°vÓ=Ü+/Ô0HÈ,Ó+W˜LØ#×2Ñ2°<Õ@Ø 6× =Ñ =¸sÀLÐ>QÕ Rð	Sð
 .Dò ]Ñ)˜˜\Ø/3×/NÑ/NÈ|Ó/\˜¨Ò,ò]ðCB	]ñH Ü‘7Ñ.¨x¸ÌÌgÐVZÉmÐ]aÓIbÐ.ÓcÐcä‘7Ñ.¨x¸ÌÌgÐV[ÉnÐ^cÓIdÐ.ÓeÐeùòA6ùò
.s   Æ9LÇL$)F)Ú__name__Ú
__module__Ú__qualname__rM   r-   r0   r   r;   rB   ÚboolrN   ÚtuplerV   r   r_   r   rd   r   r   r   r   rk   Ú__classcell__)rE   s   @r:   r   r      sè  ø„ ð/¸TÀ$ÀsÈCÀxÁ.Ñ=Qð /ÐVZÐ[_Ð`cÐehÐ`hÑ[iÑVjó /ðb°ð ¸¸c¹õ ð
bà ðbð ðbð ð	bð
 ðbð 
õbð4)Ø˜d™
ð)Ø-0°4©Zð)à	ˆs�T‰z˜3 ™:Ð%Ñ	&ó)ðÐ+Cð Èó ð&	=Ð7Oð 	=ÐTmó 	=ð ð:ØÐ-Ñ.ð:Ø7:ð:ØFMÈdÁmð:à	�3˜˜TÐ"2Ñ3Ð3Ñ	4ò:ó ð:ð ð
 $)ñ	%àÐ'Ñ(ð%ð ð%ð ˜%‘.ð	%ð
 
ÐÑ	ò%ó ð%ð NSñPfØÐ-Ñ.ðPfØ7:ðPfØFJðPfà	ÐÑ	 )¨C°°dÐ;KÑ6LÐ,LÑ"MÑ	M÷Pfñ Pfr<   r   )Ú__doc__r{   Úcollections.abcr   Útypingr   r   r   r   r   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsr	   Ú3litellm.litellm_core_utils.prompt_templates.factoryr
   Ú1litellm.litellm_core_utils.reasoning_effort_utilsr   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r   r   r   r   r   Úutilsr   r   Úopenai.chat.gpt_transformationr   r   ri   r<   r:   ú<module>r�      sP   ðñó Ý %ß 6Õ 6õõ Qõõ 8÷÷ ÷ PÝ =ôSf˜?õ Sfr<   