o
    2j/                     @   sP  d dl 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	m
Z
mZ d dlmZmZmZmZ d dlmZmZmZ eeZdZd	Zd
ZdZddhZG dd deeZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#de$de$fddZ%G d d! d!eeZ&G d"d# d#e&Z'G d$d% d%e&Z(dS )&    N)ABC)Any)InferenceProviderMapping)RequestParameters_as_dict_as_url)BaseConversationalTaskBaseTextGenerationTaskTaskProviderHelperfilter_none)get_sessionhf_raise_for_statusloggingtogetherzhttps://api.together.xyzg       @   queuedin_progressc                       s<   e Zd ZdZdef fddZdededefdd	Z  ZS )
TogetherTaskz"Base class for Together API tasks.taskc                    s   t  jtt|d d S )N)providerbase_urlr   super__init__	_PROVIDER	_BASE_URL)selfr   	__class__ h/var/www/html/whisper/venv/lib/python3.10/site-packages/huggingface_hub/inference/_providers/together.pyr   (      zTogetherTask.__init__mapped_modelapi_keyreturnc                 C   st   | j   dkr  dS  dkr  dS   dkr dS  dkr" dS  dkr) d
S  d	kr0 d
S  td| j  d)Ntext-to-imageimage-to-imagez/v1/images/generationstext-to-speechz/v1/audio/speechfeature-extractionz/v1/embeddingstext-to-videoimage-to-videoz
/v2/videoszUnsupported task 'z' for Together API.)r   
ValueError)r   r"   r#   r   r   r    _prepare_route+   s    



zTogetherTask._prepare_route)__name__
__module____qualname____doc__strr   r,   __classcell__r   r   r   r    r   %   s    r   c                       s<   e Zd Z fddZd	deeB dedB defddZ  Z	S )
TogetherTextGenerationTaskc                       t  jttd d S N)r   r   r   r   r   r   r    r   :      z#TogetherTextGenerationTask.__init__Nresponserequest_paramsr$   c                 C   s0   t |d d }|d |d|dddS )Nchoicesr   textfinish_reasonseed)r<   r=   )generated_textdetails)r   get)r   r8   r9   outputr   r   r    get_response=   s   z'TogetherTextGenerationTask.get_responseN)
r-   r.   r/   r   bytesdictr   r   rB   r2   r   r   r   r    r3   9   s    (r3   c                	       s>   e Zd Z fddZdededededB f fdd	Z  ZS )
TogetherConversationalTaskc                    r4   r5   r   r6   r   r   r    r   I   r7   z#TogetherConversationalTask.__init__inputs
parametersprovider_mapping_infor$   Nc                    st   t  |||}|d u rd S |d}t|tr8|ddkr8t|dtr8d|d v r8d|d d d|d< |S )Nresponse_formattypejson_schemaschema)rK   rM   )r   _prepare_payload_as_dictr@   
isinstancerE   )r   rG   rH   rI   payloadrJ   r   r   r    rN   L   s   


z3TogetherConversationalTask._prepare_payload_as_dict	r-   r.   r/   r   r   rE   r   rN   r2   r   r   r   r    rF   H   s    rF   c                	       Z   e Zd Z fddZdededededB fdd	Zdd
eeB de	dB defddZ
  ZS )TogetherTextToImageTaskc                       t  d d S )Nr%   r   r   r6   r   r   r    r   c      z TogetherTextToImageTask.__init__rG   rH   rI   r$   Nc                 C   s:   |j }t|}d|v r|d|d< |dd|d|iS )Nnum_inference_stepsstepsbase64)promptrJ   model)provider_idr   pop)r   rG   rH   rI   r"   r   r   r    rN   f   s
   z0TogetherTextToImageTask._prepare_payload_as_dictr8   r9   c                 C      t |}t|d d d S Ndatar   b64_jsonr   rY   	b64decoder   r8   r9   response_dictr   r   r    rB   p      z$TogetherTextToImageTask.get_responserC   r-   r.   r/   r   r   rE   r   rN   rD   r   rB   r2   r   r   r   r    rS   b   s    
(
rS   c                	       rR   )TogetherImageToImageTaskc                    rT   )Nr&   rU   r6   r   r   r    r   v   rV   z!TogetherImageToImageTask.__init__rG   rH   rI   r$   Nc           
      C   s   |j }t|dd}t|}|dd}d|v r|d|d< | }d|v o)d|v }|r0d	|ind
|gi}	d|i|	ddi|d|iS )Nz
image/jpegdefault_mime_typerZ    rW   rX   kontextzflux.1	image_urlreference_imagesrJ   rY   r[   )r\   r   r   r]   lower)
r   rG   rH   rI   r"   rm   rZ   lowereduse_image_urlimage_fieldr   r   r    rN   y   s&   z1TogetherImageToImageTask._prepare_payload_as_dictr8   r9   c                 C   r^   r_   rb   rd   r   r   r    rB      rf   z%TogetherImageToImageTask.get_responserC   rg   r   r   r   r    rh   u   s    
(rh   c                	       rR   )TogetherFeatureExtractionTaskc                    rT   )Nr(   rU   r6   r   r   r    r      rV   z&TogetherFeatureExtractionTask.__init__rG   rH   rI   r$   Nc                 C      ||j dt|S N)inputr[   r\   r   r   rG   rH   rI   r   r   r    rN      
   z6TogetherFeatureExtractionTask._prepare_payload_as_dictr8   r9   c                 C   s   dd t |d D S )Nc                 S   s   g | ]}|d  qS )	embeddingr   ).0itemr   r   r    
<listcomp>   s    z>TogetherFeatureExtractionTask.get_response.<locals>.<listcomp>r`   )r   r   r8   r9   r   r   r    rB      r!   z*TogetherFeatureExtractionTask.get_responserC   rg   r   r   r   r    rs      s    
(	rs   c                	       rR   )TogetherTextToSpeechTaskc                    rT   )Nr'   rU   r6   r   r   r    r      rV   z!TogetherTextToSpeechTask.__init__rG   rH   rI   r$   Nc                 C   rt   ru   rw   rx   r   r   r    rN      s
   z1TogetherTextToSpeechTask._prepare_payload_as_dictr8   r9   c                 C   s$   t |tr|S tdt|j d)Nz1Expected raw audio bytes for text-to-speech, got .)rO   rD   r+   rK   r-   r~   r   r   r    rB      s   
z%TogetherTextToSpeechTask.get_responserC   rg   r   r   r   r    r      s    
(r   rH   r$   c                 C   s\   t | } d| v r| d| d< d| v r,| d}d|v r"|d | d< d|v r,|d | d< | S )zNMap HF inference-client conventions onto Together's video API parameter names.rW   rX   target_sizewidthheight)r   r]   )rH   r   r   r   r    _normalize_video_parameters   s   
r   c                   @   s0   e Zd ZdZddeeB dedB defddZdS )	TogetherVideoTaskz>Base class for Together's asynchronous video generation tasks.Nr8   r9   r$   c                 C   sL  |d u rt dt|}|d}|st d|j d| }td |d}ttD ]1}|d ur9|tvr9 n.t	
t t j||jd}t| | }|d}|d ur^|tvr^ n	q-t dt d	|d
kr~|dpqi }	td|	dpzd |dkrtd||dpi d}
|
st dt |
}t| |jS )NzEA `RequestParameters` object is required to poll Together video jobs.idz6No job ID found in Together video generation response./z+Generating video, polling for completion...status)headersuI   Timed out while waiting for Together video generation — aborting after z status pollsfailederrorz"Together video generation failed: messagezUnknown error	completedz&Unexpected Together video job status: outputs	video_urlz3No video URL found in completed Together video job.)r+   r   r@   urlloggerinforange_VIDEO_MAX_POLL_ATTEMPTS_VIDEO_PENDING_STATUSEStimesleep_VIDEO_POLLING_INTERVALr   r   r   jsonRuntimeErrorcontent)r   r8   r9   jobjob_id
status_urlr   _status_responser   r   video_responser   r   r    rB      sH   




zTogetherVideoTask.get_responserC   )	r-   r.   r/   r0   rD   rE   r   r   rB   r   r   r   r    r      s    $r   c                	       :   e Zd Z fddZdededededB fdd	Z  ZS )
TogetherTextToVideoTaskc                    rT   )Nr)   rU   r6   r   r   r    r     rV   z TogetherTextToVideoTask.__init__rG   rH   rI   r$   Nc                 C   rt   )N)rZ   r[   )r\   r   rx   r   r   r    rN   	  ry   z0TogetherTextToVideoTask._prepare_payload_as_dictrQ   r   r   r   r    r         r   c                	       r   )
TogetherImageToVideoTaskc                    rT   )Nr*   rU   r6   r   r   r    r     rV   z!TogetherImageToVideoTask.__init__rG   rH   rI   r$   Nc                 C   s$   |j t|ddddgdt|S )Nz	image/pngri   first)input_imageframe)r[   frame_images)r\   r   r   rx   r   r   r    rN     s
   	z1TogetherImageToVideoTask._prepare_payload_as_dictrQ   r   r   r   r    r     r   r   ))rY   r   abcr   typingr   huggingface_hub.hf_apir   !huggingface_hub.inference._commonr   r   r   ,huggingface_hub.inference._providers._commonr   r	   r
   r   huggingface_hub.utilsr   r   r   
get_loggerr-   r   r   r   r   r   r   r   r3   rF   rS   rh   rs   r   rE   r   r   r   r   r   r   r   r    <module>   s2    
(3