o
    ưiΘ                     @   sv  U d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ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 d d	lmZ d d
lmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$m%Z% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z, e Z-ee.d< e*										dIde/dee/ dee" dee/ dee/ dee/ deee/ef  deee/ef  deee/ef  de%fddZ0e									dJde/dee/ dee/ dee/ dee/ dee/ d ee/ d!ee/ de
d" deeee%f fd#d$Z1e										dId%d&de/dee/ dee/ dee/ dee/ dee/ dee/ d ee/ d!ee/ de
d% de%fd'd$Z1e*										dIde/dee/ dee" dee/ dee/ dee/ deee/ef  deee/ef  deee/ef  dee%eeee%f f fd(d$Z1e*						dKd)e/d*ee2 d+ee/ d,ee/ deee/ef  deee/ef  deee/ef  dee3eeee3f f fd-d.Z4e*						dKd)e/d*ee2 d+ee/ d,ee/ deee/ef  deee/ef  deee/ef  de3fd/d0Z5e*					dLd)e/de/deee/ef  deee/ef  deee/ef  de%fd1d2Z6e					dLd)e/de/dee/ d ee/ d!ee/ d2e
d" deeee%f fd3d4Z7e					dLd%d5d)e/de/dee/ d ee/ d!ee/ d2e
d% de%fd6d4Z7e*					dLd)e/de/deee/ef  deee/ef  deee/ef  dee%eeee%f f fd7d4Z7e*									dJd8ee/ d9ee8 d:ee/ dee/ deee/ef  deee/ef  deee/ef  de	e% fd;d<Z9e								dMd8ee/ d9ee8 d:ee/ dee/ d ee/ d!ee/ d<e
d" deeee	e% f fd=d>Z:e								dMd%d?d8ee/ d9ee8 d:ee/ dee/ d ee/ d!ee/ d<e
d% de	e% fd@d>Z:e*								dMd8ee/ d9ee8 d:ee/ deee/ef  deee/ef  deee/ef  dee	e% eeee	e% f f fdAd>Z:e*					dLd)e/deee/ef  deee/ef  deee/ef  de%f
dBdCZ;e					dLd)e/dee/ d ee/ d!ee/ dCe
d" deeee%f fdDdEZ<e					dLd%dFd)e/dee/ d ee/ d!ee/ dCe
d% de%fdGdEZ<e*					dLd)e/deee/ef  deee/ef  deee/ef  dee%eeee%f f f
dHdEZ<dS )N    N)partial)Any	CoroutineDictListLiteralOptionalUnionoverload)DEFAULT_VIDEO_ENDPOINT_MODEL)request_timeout)get_llm_provider)Logging)BaseVideoConfig)BaseLLMHTTPHandler)base_llm_http_handler)GenericLiteLLMParams)	CallTypes	FileTypes) VideoCreateOptionalRequestParamsVideoObject)decode_video_id_with_provider)ProviderConfigManagerclient)VideoGenerationRequestUtilsllm_http_handlerX  promptmodelinput_referencesecondssizeuserextra_headersextra_query
extra_bodyreturnc                    s   t  }zVt }d|d< |du r"tj|pt|ddd\}}}}ttf| |||||||||	|
d|}t	
 }t|j|}|d|I dH }t|rV|I dH }|W S |}|W S  typ } z
tj|||||dd}~ww )a)  
    Asynchronously calls the `video_generation` function with the given arguments and keyword arguments.

    Parameters:
    - `prompt` (str): Text prompt that describes the video to generate
    - `model` (Optional[str]): The video generation model to use
    - `input_reference` (Optional[FileTypes]): Optional image reference that guides generation
    - `seconds` (Optional[str]): Clip duration in seconds
    - `size` (Optional[str]): Output resolution formatted as width x height
    - `user` (Optional[str]): A unique identifier representing your end-user
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoResponse): The response returned by the `video_generation` function.
    T
async_callNapi_baser   r(   )r   r   r   r    r!   r"   timeoutcustom_llm_providerr#   r$   r%   r   r+   Zoriginal_exceptionZcompletion_kwargsextra_kwargs)localsasyncioget_event_looplitellmr   r   getr   video_generationcontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionexception_type)r   r   r   r    r!   r"   r*   r+   r#   r$   r%   kwargs
local_varsloop_funcctxfunc_with_contextinit_responseresponsee rE   J/home/app/Keep/.python/lib/python3.10/site-packages/litellm/videos/main.pyavideo_generation   sX   %

rG   api_keyr(   api_versionTc
                K      d S NrE   )r   r   r   r!   r"   r*   rH   r(   rI   r+   rG   r;   rE   rE   rF   r3   t   s   r3   F)rG   c                K   rJ   rK   rE   )r   r   r   r    r!   r"   r*   rH   r(   rI   r+   rG   r;   rE   rE   rF   r3      s   c                 K   sf  t  }z|d}|dd}|dddu }|dd}|dur5t|tr+t|}tdi |}|W S tdi |}t	|p@t
|d\}}}}tj|t|d	}|du r]td
| || t|}tj|||d}|j||t|d|i||d tjj|_tj|| |||||||
|pt||ddW S  ty } ztj|pt
||||dd}~ww )\
    Maps the https://api.openai.com/v1/videos endpoint.

    Currently supports OpenAI
    litellm_logging_objlitellm_call_idNr'   FTmock_response)r   r+   r   providerz&video generation is not supported for )r    video_generation_provider_config video_generation_optional_paramsr   r"   Zoptional_paramslitellm_paramsr+   r   )r   r   rR   Z(video_generation_optional_request_paramsr+   rU   logging_objr#   r%   r*   	_is_asyncr   r,   rE   )r.   popr2   
isinstancestrjsonloadsr   r   r   r   r   get_provider_video_configr1   LlmProviders
ValueErrorupdater   Z-get_requested_video_generation_optional_paramZ$get_optional_params_video_generationupdate_environment_variablesdictr   Zcreate_videovalue	call_typer   Zvideo_generation_handlerDEFAULT_REQUEST_TIMEOUTr9   r:   )r   r   r   r    r!   r"   r*   r+   r#   r$   r%   r;   r<   rM   rN   rW   rO   rC   rU   r>   rR   rS   Zvideo_generation_request_paramsrD   rE   rE   rF   r3      s   



	
video_idr*   r+   variantc                 K   s  t  }zo|d}	|dd}
|dddu }|du r&t| }|dp%d}tdi |}tjdt|d	}|du rBt	d
| |
| d| i}|	jd|dt|d|
i||d tj| ||||	|pht||d||d
W S  ty } z
tjd||||dd}~ww )aN  
    Download video content from OpenAI's video API.

    Args:
        video_id (str): The identifier of the video whose content to download.
        api_key (Optional[str]): The API key to use for authentication.
        api_base (Optional[str]): The base URL for the API.
        timeout (Optional[float]): The timeout for the request in seconds.
        custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
        variant (Optional[str]): Which downloadable asset to return. Defaults to the MP4 video.
        extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
        extra_query (Optional[Dict[str, Any]]): Additional query parameters.
        extra_body (Optional[Dict[str, Any]]): Additional body parameters.

    Returns:
        bytes: The raw video content as bytes.

    Example:
        ```python
        import litellm

        video_bytes = litellm.video_content(
            video_id="video_123"
        )

        with open("video.mp4", "wb") as f:
            f.write(video_bytes)
        ```
    rM   rN   Nr'   FTr+   openairP   z,video support download is not supported for rf    r"   rT   r   )
rf   Zvideo_content_provider_configr+   rU   rV   r*   r#   r   rW   rg   r,   rE   )r.   r2   rX   r   r   r   r]   r1   r^   r_   r`   ra   rb   r   Zvideo_content_handlerre   r9   r:   )rf   r*   r+   rg   r#   r$   r%   r;   r<   rM   rN   rW   decodedrU   Zvideo_provider_configZvideo_content_request_paramsrD   rE   rE   rF   video_content  sf   -

rk   c              
      s   t  }zLt }	d|d< |du rt| }
|
dpd}ttf| ||||||d|}t }t|j	|}|	
d|I dH }t|rL|I dH }|W S |}|W S  tyf } z
tjd||||dd}~ww )	ai  
    Asynchronously download video content.

    Parameters:
    - `video_id` (str): The identifier of the video whose content to download
    - `timeout` (Optional[float]): The timeout for the request in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `bytes`: The raw video content as bytes
    Tr'   Nr+   rh   )rf   r*   r+   rg   r#   r$   r%   ri   r,   )r.   r/   r0   r   r2   r   rk   r4   r5   r6   r7   r8   r9   r1   r:   )rf   r*   r+   rg   r#   r$   r%   r;   r<   r=   rj   r?   r@   rA   rB   rC   rD   rE   rE   rF   avideo_content  sN   	

rl   c              
      s   t  }z=t }	d|d< ttf| ||||||d|}
t }t|j|
}|	d|I dH }t	|r=|I dH }|W S |}|W S  t
yW } z
tjd||||dd}~ww )a  
    Asynchronously calls the `video_remix` function with the given arguments and keyword arguments.

    Parameters:
    - `video_id` (str): The identifier of the completed video to remix
    - `prompt` (str): Updated text prompt that directs the remix generation
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoObject): The response returned by the `video_remix` function.
    Tr'   )rf   r   r*   r+   r#   r$   r%   Nri   r,   )r.   r/   r0   r   video_remixr4   r5   r6   r7   r8   r9   r1   r:   )rf   r   r*   r+   r#   r$   r%   r;   r<   r=   r?   r@   rA   rB   rC   rD   rE   rE   rF   avideo_remix  sH   	

rn   c          	      K   rJ   rK   rE   	rf   r   r*   rH   r(   rI   r+   rn   r;   rE   rE   rF   rm        rm   )rn   c          	      K   rJ   rK   rE   ro   rE   rE   rF   rm     rp   c                 K   s\  t  }z|d}	|dd}
|dddu }|dd}|dur5t|tr+t|}tdi |}|W S |du rDt| }|dpCd	}t	di |}t
jdt|d
}|du r`td| || | |d}|	jd|dt|d|
i||d tjj|	_tj| |||||	|||pt||ddW S  ty } z
tjd||||dd}~ww )zm
    Maps the https://api.openai.com/v1/videos/{video_id}/remix endpoint.

    Currently supports OpenAI
    rM   rN   Nr'   FTrO   r+   rh   rP   z!video remix is not supported for )rf   r   ri   r"   rT   r   )rf   r   video_remix_provider_configr+   rU   rV   r#   r%   r*   rW   r   r,   rE   )r.   rX   r2   rY   rZ   r[   r\   r   r   r   r   r]   r1   r^   r_   r`   ra   rb   r   rm   rc   rd   r   Zvideo_remix_handlerre   r9   r:   )rf   r   r*   r+   r#   r$   r%   r;   r<   rM   rN   rW   rO   rC   rj   rU   rq   Zvideo_remix_request_paramsrD   rE   rE   rF   rm   .  sx   




afterlimitorderc	                    s   t  }
zRt }d|	d< |du r tjd|
ddd\}}}}ttf| ||||||||d	|	}t	 }t|j
|}|d|I dH }t|rR|I dH }|W S |}|W S  tyl } z
tjd|||
|	dd}~ww )	a  
    Asynchronously calls the `video_list` function with the given arguments and keyword arguments.

    Parameters:
    - `after` (Optional[str]): Identifier for the last item from the previous pagination request
    - `limit` (Optional[int]): Number of items to retrieve
    - `order` (Optional[str]): Sort order of results by timestamp. Use asc for ascending order or desc for descending order
    - `api_key` (Optional[str]): The API key to use for authentication
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (Dict[str, Any]): The response returned by the `video_list` function.
    Tr'   Nri   r(   r)   )	rr   rs   rt   rH   r*   r+   r#   r$   r%   r,   )r.   r/   r0   r1   r   r2   r   
video_listr4   r5   r6   r7   r8   r9   r:   )rr   rs   rt   rH   r*   r+   r#   r$   r%   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rE   rF   avideo_list  sT   !

rv   c          
      K   rJ   rK   rE   
rr   rs   rt   r*   rH   r(   rI   r+   rv   r;   rE   rE   rF   ru        ru   )rv   c          
      K   rJ   rK   rE   rw   rE   rE   rF   ru     rx   c                 K   sJ  t  }	z|d}
|dd}|dddu }|dd}|dur3t|tr+t|}dd	 |D W S |du r9d
}tdi |}tj	dt
|d}|du rUtd| |	| | ||d}|
jd|dt|d|i||d tjj|
_tj| ||||||
|||pt||ddW S  ty } z
t
jd|||	|dd}~ww )rL   rM   rN   Nr'   FTrO   c                 S   s   g | ]	}t d i |qS )rE   )r   ).0itemrE   rE   rF   
<listcomp>+  s    zvideo_list.<locals>.<listcomp>rh   rP   z video list is not supported for )rr   rs   rt   ri   r"   rT   r   )rr   rs   rt   video_list_provider_configr+   rU   rV   r#   r$   r*   rW   r   r,   rE   )r.   r2   rX   rY   rZ   r[   r\   r   r   r]   r1   r^   r_   r`   ra   rb   r   ru   rc   rd   r   Zvideo_list_handlerre   r9   r:   )rr   rs   rt   r*   r+   r#   r$   r%   r;   r<   rM   rN   rW   rO   rU   r|   Zvideo_list_request_paramsrD   rE   rE   rF   ru   
  sx   




c              
      s   t  }z<t }d|d< ttf| |||||d|}	t }
t|
j|	}|d|I dH }t	|r<|I dH }|W S |}|W S  t
yV } z
tjd||||dd}~ww )a  
    Asynchronously retrieve video status from OpenAI's video API.

    Parameters:
    - `video_id` (str): The identifier of the video whose status to retrieve
    - `model` (Optional[str]): The model to use. If not provided, will be auto-detected
    - `timeout` (int): Request timeout in seconds
    - `custom_llm_provider` (Optional[str]): The LLM provider to use
    - `extra_headers` (Optional[Dict[str, Any]]): Additional headers
    - `extra_query` (Optional[Dict[str, Any]]): Additional query parameters
    - `extra_body` (Optional[Dict[str, Any]]): Additional body parameters
    - `kwargs` (dict): Additional keyword arguments

    Returns:
    - `response` (VideoObject): The response returned by the `video_status` function.
    Tr'   )rf   r*   r+   r#   r$   r%   Nri   r,   )r.   r/   r0   r   video_statusr4   r5   r6   r7   r8   r9   r1   r:   )rf   r*   r+   r#   r$   r%   r;   r<   r=   r?   r@   rA   rB   rC   rD   rE   rE   rF   avideo_statusq  sF   

r~   c                K   rJ   rK   rE   rf   r*   rH   r(   rI   r+   r~   r;   rE   rE   rF   r}        r}   )r~   c                K   rJ   rK   rE   r   rE   rE   rF   r}     r   c                 K   sX  t  }z|d}|dd}	|dddu }
|dd}|dur5t|tr+t|}tdi |}|W S |du rDt| }|dpCd	}t	di |}t
jdt|d
}|du r`td| || d| i}|jd|dt|d|	i||d tjj|_tj| |||||||pt|
|dd
W S  ty } z
tjd||||dd}~ww )a  
    Retrieve video status from OpenAI's video API.

    Args:
        video_id (str): The identifier of the video whose status to retrieve.
        timeout (int): The timeout for the request in seconds.
        custom_llm_provider (Optional[str]): The LLM provider to use. If not provided, will be auto-detected.
        extra_headers (Optional[Dict[str, Any]]): Additional headers to include in the request.
        extra_query (Optional[Dict[str, Any]]): Additional query parameters.
        extra_body (Optional[Dict[str, Any]]): Additional body parameters.

    Returns:
        VideoObject: The video status information.

    Example:
        ```python
        import litellm

        # Get video status
        video_status = litellm.video_status(
            video_id="video_123"
        )

        print(f"Video status: {video_status.status}")
        print(f"Progress: {video_status.progress}%")
        ```
    rM   rN   Nr'   FTrO   r+   rh   rP   z"video status is not supported for rf   ri   r"   rT   r   )
rf   video_status_provider_configr+   rU   rV   r#   r%   r*   rW   r   r,   rE   )r.   r2   rX   rY   rZ   r[   r\   r   r   r   r   r]   r1   r^   r_   r`   ra   rb   r   Zvideo_retrieverc   rd   r   Zvideo_status_handlerre   r9   r:   )rf   r*   r+   r#   r$   r%   r;   r<   rM   rN   rW   rO   rC   rj   rU   r   Zvideo_status_request_paramsrD   rE   rE   rF   r}     st   *




)
NNNNNr   NNNN)	NNNNr   NNNN)NNNNNN)r   NNNN)NNNr   NNNN)=r/   r4   r[   	functoolsr   typingr   r   r   r   r   r   r	   r
   r1   Zlitellm.constantsr   r   re   Z1litellm.litellm_core_utils.get_llm_provider_logicr   Z*litellm.litellm_core_utils.litellm_loggingr   ZLiteLLMLoggingObjZ+litellm.llms.base_llm.videos.transformationr   Z*litellm.llms.custom_httpx.llm_http_handlerr   Zlitellm.mainr   Zlitellm.types.routerr   Zlitellm.types.utilsr   r   Zlitellm.types.videos.mainr   r   Zlitellm.types.videos.utilsr   Zlitellm.utilsr   r   Zlitellm.videos.utilsr   r   __annotations__rZ   rG   r3   floatbytesrk   rl   rn   rm   intrv   ru   r~   r}   rE   rE   rE   rF   <module>   s  
 (V		
q	q	E	D				f	
P


	
f
C


