
    h                         d Z ddlmZmZmZmZ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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`
    )	Any	CoroutineListLiteralOptionalTupleUnioncastoverload)_get_image_mime_type_from_url)_parse_mime_typeget_secret_str)AllMessageValuesChatCompletionFileObjectChatCompletionVideoObjectChatCompletionVideoUrlObject   )_remove_additional_properties_remove_strict_from_schema   )OpenAIGPTConfigc                   J    e Zd Zdededededef
 fdZdee   dee   deee   ee   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e   f   f   f fdZ xZS )HostedVLLMChatConfignon_default_paramsoptional_paramsmodeldrop_paramsreturnc                     |j                  dd       }|t        |      }t        |      }|||d<   t        |   ||||      S )Ntools)popr   r   supermap_openai_params)selfr   r   r   r   _tools	__class__s         h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/hosted_vllm/chat/transformation.pyr$   z&HostedVLLMChatConfig.map_openai_params   s]     $''626:F/7F*0w'w(
 	
    api_base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   )r%   r*   r+   dynamic_api_keys       r(   $_get_openai_compatible_provider_infoz9HostedVLLMChatConfig._get_openai_compatible_provider_info+   s9     E~.DEN~&;<N 	 ((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)	z
        Check if the file is a video

        - format: video/<extension>
        - file_data: base64 encoded video data
        - file_id: infer mp4 from extension
        fileformat	file_datafile_idtypeFzvideo/T)get
startswithr   r   )r%   r1   r3   r4   r5   r6   	mime_types          r(   _is_video_filez#HostedVLLMChatConfig._is_video_file4   s     +(#HH[)	((9%F#v-f''1(3IY11(;
 	 5g>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      )Nr3   r6   r5   	video_url)url)r7   r=   z file_id or file_data is required)r8   r   r   
ValueError)r%   r1   r3   r6   r5   s        r(   _convert_file_to_video_urlz/HostedVLLMChatConfig._convert_file_to_video_urlN   sx     +((9%HH[)	, ,HW,U  , ,HY,W  ;<<r)   messagesis_asyncTc                      y N r%   rA   r   rB   s       r(   _transform_messagesz(HostedVLLMChatConfig._transform_messages_   s     	r)   Fc                      y rD   rE   rF   s       r(   rG   z(HostedVLLMChatConfig._transform_messagese   s     	r)   c                    |D ]  }|d   dk(  s|j                  d      }|s t        |t              s1g }t        |      D ]O  \  }}|j                  d      dk(  st	        t
        |      }| j                  |      s=|j                  ||f       Q |D ]  \  }}| j                  |      ||<     |r#t        	| )  ||t	        t        d   d            S t        	| )  ||t	        t        d   d            S )	zX
        Support translating video files from file_id or file_data to video_url
        roleusercontentr7   r3   T)rB   F)r8   
isinstancelist	enumerater
   r   r;   appendr@   r#   rG   r   )
r%   rA   r   rB   messagemessage_contentreplaced_content_itemsidxr1   r'   s
            r(   rG   z(HostedVLLMChatConfig._transform_messagesn   s     Gv&(")++i"8"z/4'H  + .7-G)\'++F3v=+/0H,+WL#22<@ 6 = =sL>Q R	 .H
 .D)\/3/N/N(0, .D    7.%$wt}d*C /   7.%$wu~u*E /  r)   )F)__name__
__module____qualname__dictstrboolr$   r   r   r0   r   r;   r   r@   r   r   r   r   r   r   rG   r	   __classcell__)r'   s   @r(   r   r      s   
 
 
 	

 
 

&) )08)	x}hsm+	,)+C  4=4=	"=" -.7:FMdm	3T"233	4 
 
 $)	'(  %.	
 
	  NS-.7:FJ	t$%yc4@P;Q1Q'RR	S r)   r   N)__doc__typingr   r   r   r   r   r   r	   r
   r   8litellm.litellm_core_utils.prompt_templates.common_utilsr   3litellm.litellm_core_utils.prompt_templates.factoryr   litellm.secret_managers.mainr   litellm.types.llms.openair   r   r   r   utilsr   r   openai.chat.gpt_transformationr   r   rE   r)   r(   <module>rd      sE    Y X X Q 7  P =t? tr)   