
    kh                        d dl Z d dlZd dlmZ d dl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 d dlmZmZ d d	lmZmZ d d
lmZ  ee      ZdZ G d dee      Z G d de      Z G d de      Z G d de      Z  G d de      Z!y)    N)ABC)AnyDictOptionalUnion)urlparse)	constants)InferenceProviderMapping)RequestParameters_as_dict)TaskProviderHelperfilter_none)get_sessionhf_raise_for_status)
get_loggerg      ?c                   P     e Zd Zdef fdZdededef fdZdededefdZ xZS )		FalAITasktaskc                 *    t         |   dd|       y )Nzfal-aizhttps://fal.run)providerbase_urlr   super__init__)selfr   	__class__s     g/var/www/teggl/fontify/venv/lib/python3.12/site-packages/huggingface_hub/inference/_providers/fal_ai.pyr   zFalAITask.__init__   s    (5FTR    headersapi_keyreturnc                 Z    t         |   ||      }|j                  d      sd| |d<   |S )Nhf_zKey authorization)r   _prepare_headers
startswith)r   r   r    r   s      r   r%   zFalAITask._prepare_headers   s8    '*7G<!!%()-gY'7GO$r   mapped_modelc                     d| S )N/ r   r'   r    s      r   _prepare_routezFalAITask._prepare_route   s    <.!!r   )	__name__
__module____qualname__strr   r   r%   r,   __classcell__r   s   @r   r   r      sE    SS S s t "3 " " "r   r   c            	       b     e Zd Z fdZdedededee   fdZd
de	e
ef   dee   defd	Z xZS )#FalAIAutomaticSpeechRecognitionTaskc                 $    t         |   d       y )Nzautomatic-speech-recognitionr   r   r   s    r   r   z,FalAIAutomaticSpeechRecognitionTask.__init__$   s    78r   inputs
parametersprovider_mapping_infor!   c                 D   t        |t              r|j                  d      r|}nbt        |t              r%t        |d      5 }|j	                         }d d d        t        j                  |      j                         }d}d| d| }d|it        |      S # 1 sw Y   ExY w)N)zhttp://zhttps://rbz
audio/mpegzdata:z;base64,	audio_url)	
isinstancer0   r&   openreadbase64	b64encodedecoder   )r   r7   r8   r9   r<   f	audio_b64content_types           r   _prepare_payload_as_dictz<FalAIAutomaticSpeechRecognitionTask._prepare_payload_as_dict'   s     fc"v'8'89P'QI &#&&$' &1VVXF& ((0779I'L~Xi[AIYB+j*ABB& &s   BBresponserequest_paramsc                 r    t        |      d   }t        |t              st        dt	        |       d      |S )Ntextz>Unexpected output format from FalAI API. Expected string, got .)r   r=   r0   
ValueErrortype)r   rG   rH   rJ   s       r   get_responsez0FalAIAutomaticSpeechRecognitionTask.get_response9   s>    !&)$$]^bcg^h]iijkllr   Nr-   r.   r/   r   r   r   r
   r   rF   r   bytesr   rN   r1   r2   s   @r   r4   r4   #   s`    9CC'+CD\C	$C$U5$;%7 RcId ps r   r4   c            	       b     e Zd Z fdZdedededee   fdZd
de	e
ef   dee   defd	Z xZS )FalAITextToImageTaskc                 $    t         |   d       y )Nztext-to-imager   r6   s    r   r   zFalAITextToImageTask.__init__A       )r   r7   r8   r9   r!   c                 >   d|it        |      }d|v r*d|v r&|j                  d      |j                  d      d|d<   |j                  St        j                  j                  |j                  d|j                        }|dd	g|d
<   |j                  dk(  rd|d<   |S )Npromptwidthheight)rX   rY   
image_sizemain)repo_idrevisionfilename   )pathscaleloraszfal-ai/loraz(stabilityai/stable-diffusion-xl-base-1.0
model_name)r   popadapter_weights_pathr	   HUGGINGFACE_CO_URL_TEMPLATEformathf_model_idprovider_id)r   r7   r8   r9   payload	lora_paths         r   rF   z-FalAITextToImageTask._prepare_payload_as_dictD   s     f#
*%#
 g(g"5 W-!++h/%GL! !55A!==DD-99.CC E I
 *3Q ?@GG$00MA )S%r   rG   rH   c                 p    t        |      d   d   d   }t               j                  |      j                  S )Nimagesr   urlr   r   getcontentr   rG   rH   rn   s       r   rN   z!FalAITextToImageTask.get_response^   s4    x *1-e4}  %---r   rO   rP   r2   s   @r   rS   rS   @   s[    *'+D\	$4.U5$;%7 .RcId .ps .r   rS   c            	       b     e Zd Z fdZdedededee   fdZd
de	e
ef   dee   defd	Z xZS )FalAITextToSpeechTaskc                 $    t         |   d       y )Nztext-to-speechr   r6   s    r   r   zFalAITextToSpeechTask.__init__d   s    )*r   r7   r8   r9   r!   c                      d|it        |      S )NrJ   r   r   r7   r8   r9   s       r   rF   z.FalAITextToSpeechTask._prepare_payload_as_dictg   s     :+j"9::r   rG   rH   c                 j    t        |      d   d   }t               j                  |      j                  S )Naudiorn   ro   rr   s       r   rN   z"FalAITextToSpeechTask.get_responsel   s/    x )%0}  %---r   rO   rP   r2   s   @r   rt   rt   c   s[    +;;'+;D\;	$;
.U5$;%7 .RcId .ps .r   rt   c            	            e Zd Z fdZdedef fdZdededefdZdeded	e	de
e   fd
Z	 ddeeef   de
e   defdZ xZS )FalAITextToVideoTaskc                 $    t         |   d       y )Nztext-to-videor   r6   s    r   r   zFalAITextToVideoTask.__init__r   rU   r   r    r!   c                     |j                  d      rt        | 	  |      S t        j	                  d| j
                   d       y)Nr#   z	Calling 'z' provider directly.zhttps://queue.fal.run)r&   r   _prepare_base_urlloggerinfor   )r   r    r   s     r   r   z&FalAITextToVideoTask._prepare_base_urlu   s>    e$7,W55KK)DMM?2FGH*r   r'   c                 :    |j                  d      rd| dS d| S )Nr#   r)   z?_subdomain=queue)r&   r+   s      r   r,   z#FalAITextToVideoTask._prepare_route|   s-    e$|n$566<.!!r   r7   r8   r9   c                      d|it        |      S )NrW   rw   rx   s       r   rF   z-FalAITextToVideoTask._prepare_payload_as_dict   s     &<K
$;<<r   rG   rH   c                    t        |      }|j                  d      }|st        d      |t        d      t        |j                        }|j
                   d|j                   |j                  dk(  rdnd }|j                  rd|j                   nd}t        |j                  d	            j                  }| t        |       d
| }	| t        |       | }
|j                  d      }t        j                  d       |dk7  rnt        j                  t               t               j                  |	|j                         }t#        |       |j%                         j                  d      }|dk7  rnt               j                  |
|j                         j%                         }t        |      d   d   }t               j                  |      j&                  S )N
request_idz#No request ID found in the responsez[A `RequestParameters` object should be provided to get text-to-video responses with Fal AI.z://zrouter.huggingface.coz/fal-ai ?response_urlz/statusstatusz5Generating the video.. this can take several minutes.	COMPLETED)r   videorn   )r   rp   rL   r   rn   schemenetlocqueryr`   r0   r   r   timesleep_POLLING_INTERVALr   r   r   jsonrq   )r   rG   rH   response_dictr   
parsed_urlr   query_parammodel_id
status_url
result_urlr   status_responsern   s                 r   rN   z!FalAITextToVideoTask.get_response   s   
 !*"&&|4
BCC!m 
 n001
 ''(J,=,=+>JL]L]axLxy  A  ?B  C0:0@0@***+,b M--n=>CC z#h-}E
 z#h->
""8,KL#JJ())m//
NDZDZ/[O0$))+//9F	 # =$$Z9O9O$PUUWx )%0}  %---r   rO   )r-   r.   r/   r   r0   r   r,   r   r   r
   r   rF   r   rQ   r   rN   r1   r2   s   @r   r|   r|   q   s    *+ + +"3 " " "=='+=D\=	$= 7;%.t$%. !!23%. 
	%.r   r|   )"r@   r   abcr   typingr   r   r   r   urllib.parser   huggingface_hubr	   huggingface_hub.hf_apir
   !huggingface_hub.inference._commonr   r   ,huggingface_hub.inference._providers._commonr   r   huggingface_hub.utilsr   r   huggingface_hub.utils.loggingr   r-   r   r   r   r4   rS   rt   r|   r*   r   r   <module>r      s}       - - ! % ; I X B 4 
H	  ""C ") : .9  .F.I .;.9 ;.r   