o
    ưi?                     @   sb  d dl mZmZmZ d dlZd dlmZmZmZm	Z	m
Z
mZ d dlmZ d dlT d dlmZ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 dlmZ e Zejdeegedgdejdeegedgdedeefde	de
dee defddZ ej!deegedgdej!deegedgdeefde	de
defddZ"ej!deegedgdej!deegedgdeefde#de	de
defddZ$ej!deege
dgdej!deege
dgdeefde#de	de
defdd Z%ejd!eegedgdejd"eegedgdeefde#de	de
defd#d$Z&dS )%    )AnyDictOptionalN)	APIRouterDependsFileRequestResponse
UploadFile)ORJSONResponse)*)UserAPIKeyAuthuser_api_key_auth)ProxyBaseLLMRequestProcessing)_read_request_body))get_custom_llm_provider_from_request_body,get_custom_llm_provider_from_request_headers*get_custom_llm_provider_from_request_query)batch_to_bytesio)decode_video_id_with_providerz
/v1/videosZvideos)dependenciesresponse_classtagsz/videosrequestfastapi_responseinput_referenceuser_api_key_dictc              
      s  ddl m}m}m}m}m}m}	m}
m}m	}m
}m} t| dI dH }|dur7t|gI dH }|r7|d |d< t|d}z:|jdi d| d|d	|d
dd|d|d|d|d|ddd|d|d|d|
d|	d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    Video generation endpoint for creating videos from text prompts.
    
    Follows the OpenAI Videos API spec:
    https://platform.openai.com/docs/api-reference/videos
    
    Example:
    ```bash
    curl -X POST "http://localhost:4000/v1/videos"         -H "Authorization: Bearer sk-1234"         -H "Content-Type: application/json"         -d '{
            "model": "sora-2",
            "prompt": "A beautiful sunset over the ocean"
        }'
    ```
    r   general_settings
llm_routerproxy_configproxy_logging_objselect_data_generatoruser_api_baseuser_max_tokens
user_modeluser_request_timeoutuser_temperatureversionr   Nr   datar   r   r   
route_typeZavideo_generationr!   r   r   r    r"   modelr%   r'   r&   r$   r#   r(   er   r!   r(    )litellm.proxy.proxy_serverr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r   r   base_process_llm_request	Exception_handle_llm_api_exception)r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r+   Zinput_reference_file	processorr/   r0   r0   ^/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/video_endpoints/endpoints.pyvideo_generation   sf   4#

	
r7   c              
      s(  ddl m}m}m}m}m}m}m}	m}
m	}m
}m} t| j}d|i}t| dp5t| dp5t| dI dH }|r<||d< t|d}z:|jdi d| d	|d
|ddd|d|d|d|d|ddd|
d|d|d|	d|d|I dH W S  ty } z|j||||dI dH d}~ww )a(  
    Video list endpoint for retrieving a list of videos.
    
    Follows the OpenAI Videos API spec:
    https://platform.openai.com/docs/api-reference/videos
    
    Example:
    ```bash
    curl -X GET "http://localhost:4000/v1/videos"         -H "Authorization: Bearer sk-1234"
    ```
    r   r   query_paramsr)   Ncustom_llm_providerr*   r   r   r   r,   Zavideo_listr!   r   r   r    r"   r-   r%   r'   r&   r$   r#   r(   r.   r0   )r1   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   dictr8   r   r   r   r   r2   r3   r4   )r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r8   r+   r9   r5   r/   r0   r0   r6   
video_listn   sn   4



	
r;   z/v1/videos/{video_id}z/videos/{video_id}video_idc              
      s`  ddl m}m}m}m}m}m}	m}
m}m	}m
}m} d| i}t| }|d}|d}t|dpBt|dpBt|dI dH pB|pBd}|rI||d< |rX|rX||}|rX||d	< t|d
}z:|jdi d|d|d|ddd|d|d|d|d|d	dd|d|d|d|
d|	d|I dH W S  ty } z|j||||dI dH d}~ww )a=  
    Video status endpoint for retrieving video status and metadata.
    
    Follows the OpenAI Videos API spec:
    https://platform.openai.com/docs/api-reference/videos
    
    Example:
    ```bash
    curl -X GET "http://localhost:4000/v1/videos/video_123"         -H "Authorization: Bearer sk-1234"
    ```
    r   r   r<   r9   model_idr)   NZopenair-   r*   r   r   r   r,   Zavideo_statusr!   r   r   r    r"   r%   r'   r&   r$   r#   r(   r.   r0   )r1   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   getr   r   r    resolve_model_name_from_model_idr   r2   r3   r4   )r<   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r+   decodedprovider_from_idmodel_id_from_decodedr9   resolved_modelr5   r/   r0   r0   r6   video_status   s   4





	
rD   z/v1/videos/{video_id}/contentz/videos/{video_id}/contentc              
      sv  ddl m}m}m}m}m}m}	m}
m}m	}m
}m} d| i}t| }|d}|d}t|dp@t|dp@t|dI dH p@|}|rG||d< |rV|rV||}|rV||d< t|d	}zG|jd i d
|d|d|ddd|d|d|d|d|ddd|d|d|d|
d|	d|I dH }t|ddd|  didW S  ty } z|j||||dI dH d}~ww )!aW  
    Video content endpoint for downloading video content.
    
    Follows the OpenAI Videos API spec:
    https://platform.openai.com/docs/api-reference/videos
    
    Example:
    ```bash
    curl -X GET "http://localhost:4000/v1/videos/{video_id}/content"         -H "Authorization: Bearer sk-1234"         --output video.mp4
    ```
    r   r   r<   r9   r=   r)   Nr-   r*   r   r   r   r,   Zavideo_contentr!   r   r   r    r"   r%   r'   r&   r$   r#   r(   z	video/mp4zContent-Dispositionzattachment; filename=video_z.mp4)content
media_typeheadersr.   r0   )r1   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r>   r   r   r   r?   r   r2   r	   r3   r4   )r<   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r+   r@   rA   rB   r9   rC   r5   Zvideo_bytesr/   r0   r0   r6   video_content%  s   4





	

rH   z/v1/videos/{video_id}/remixz/videos/{video_id}/remixc              
      sn  ddl m}m}m}m}m}m}	m}
m}m	}m
}m} | I dH }t|}| |d< t| }|d}|d}t|dpIt|dpI|dpI|}|rP||d< |r_|r_||}|r_||d< t|d	}z:|jdi d
|d|d|ddd|d|d|d|d|ddd|d|d|d|
d|	d|I dH W S  ty } z|j||||dI dH d}~ww )a  
    Video remix endpoint for remixing existing videos with new prompts.
    
    Follows the OpenAI Videos API spec:
    https://platform.openai.com/docs/api-reference/videos
    
    Example:
    ```bash
    curl -X POST "http://localhost:4000/v1/videos/video_123/remix"         -H "Authorization: Bearer sk-1234"         -H "Content-Type: application/json"         -d '{
            "prompt": "A new version with different colors"
        }'
    ```
    r   r   Nr<   r9   r=   r)   r-   r*   r   r   r   r,   Zavideo_remixr!   r   r   r    r"   r%   r'   r&   r$   r#   r(   r.   r0   )r1   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   bodyorjsonloadsr   r>   r   r   r?   r   r2   r3   r4   )r<   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   rI   r+   r@   rA   rB   r9   rC   r5   r/   r0   r0   r6   video_remix  s   4"






	
rL   )'typingr   r   r   rJ   Zfastapir   r   r   r   r	   r
   Zfastapi.responsesr   Zlitellm.proxy._typesZ$litellm.proxy.auth.user_api_key_authr   r   Z'litellm.proxy.common_request_processingr   Z-litellm.proxy.common_utils.http_parsing_utilsr   Z0litellm.proxy.common_utils.openai_endpoint_utilsr   r   r   Z'litellm.proxy.image_endpoints.endpointsr   Zlitellm.types.videos.utilsr   Zrouterpostr7   r>   r;   strrD   rH   rL   r0   r0   r0   r6   <module>   s    	J	I
V
_
