
    wit6                        d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	 ddl
Z
ddlZddlZddlmZ ddlmZmZ ddlmZ dd	lmZ erdd
lmZ  G d d          ZdS )zThis module contains the EndpointV3Compatibility class, which is used to connect to Gradio apps running 3.x.x versions of Gradio.    )annotationsN)Path)TYPE_CHECKINGAnyLiteral)version)serializingutils)SerializationSetupError)Communicator)Clientc                      e Zd ZdZd*dZd	 Zd
 Zd+d,dZd+d,dZd+d,dZ	d-dZ
d.dZd/dZd0dZd0dZd-d Zd0d!Zd0d"Zd# Zd1d%Zd2d'Zd3d)ZdS )4EndpointV3CompatibilityzGEndpoint class for connecting to v3 endpoints. Backwards compatibility.clientr   fn_indexint
dependencydictc                b   || _         || _        || _        |                    d          }t	          |t
                    rd|z   n|| _        |                     | j                  | _        | j        rdnd| _	        g | _
        g | _        |j                            d          s
|j        dz   n|j        | _        	 |                                 \  | _        | _        | j        d         o| j        du| _        n# t&          $ r
 d| _        Y nw xY w|                    d          | _        d| _        d S )Napi_name/wshttp
backend_fnFT)r   r   r   get
isinstancestrr   _use_websocketuse_wsprotocolinput_component_typesoutput_component_typessrcendswithroot_url_setup_serializersserializersdeserializersis_validr   r   show_api)selfr   r   r   _argsr   s         k/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/gradio_client/compatibility.py__init__z EndpointV3Compatibility.__init__   s2   $ $>>*--(377EC(NNX 	 ))$/:: $7%'"&(#06
0C0CC0H0HX
S((fj	" 483J3J3L3L0Dd0 OL9XdmSX>XDMM& 	" 	" 	"!DMMM	"$..66s   :<C7 7D
Dc                @    d| j         j         d| j         d| j         S )NzEndpoint src: z, api_name: z, fn_index: )r   r#   r   r   r+   s    r-   __repr__z EndpointV3Compatibility.__repr__2   s*    gggT]ggX\Xeggg    c                *    |                                  S N)r1   r0   s    r-   __str__zEndpointV3Compatibility.__str__5   s    }}r2   NhelperCommunicator | Nonec                D                                      fd}|S )Nc                    j         st          j                     j        |  }  j        |  }  |  } j        | }rJj        5  j        j        sj        j        	                    |           d d d            n# 1 swxY w Y   |S r4   )
r)   r
   InvalidAPIEndpointErrorinsert_state	serializeprocess_predictionslockjoboutputsappend)datapredictions_predictr6   r+   s     r-   _innerz:EndpointV3Compatibility.make_end_to_end_fn.<locals>._inner;   s    = 63555$4$d+D!4>4(D"(D/K2$2K@K  ?[ ? ?!:- ?
*11+>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s   ,B  BB)make_predict)r+   r6   rE   rD   s   `` @r-   make_end_to_end_fnz*EndpointV3Compatibility.make_end_to_end_fn8   sB    $$V,,	 	 	 	 	 	 	 r2   c                    d S r4    )r+   r6   s     r-   make_cancelz#EndpointV3Compatibility.make_cancelL   s    tr2   c                     d fd}|S )Nreturntuplec                 b   t          j        | j        j        j        d          } t          j        j        j        j        d          }j        r6t          j        j        | |          }d|v rt          |d                   njt          j        j        j        fj        j        | j        j        dj        j        }t          j        |j                            d                    }	 |d         }n# t&          $ r}j        j        o#t+          j        j        j                  j         }d|v r/d|d         v r%|r#t          j        dj        j         d	          d d|v rt          |d                   d t'          d
|           |d }~ww xY wt3          |          S )N)rB   r   session_hash)r   rO   error)headersjsonverifyzutf-8rB   429zToo many requests to the API, please try again later. To avoid being rate-limited, please duplicate the Space using Client.duplicate(z&) and pass in your Hugging Face token.z:Could not find 'data' key in response. Response received: )rR   dumpsr   r   rO   r   r
   synchronize_async_ws_fn
ValueErrorhttpxpostapi_urlrQ   
ssl_verifyhttpx_kwargsloadscontentdecodeKeyErrorspace_idhuggingface_hub
space_infoprivateTooManyRequestsErrorrM   )	rB   	hash_dataresultresponseoutputkeis_public_spacer6   r+   s	          r-   rD   z6EndpointV3Compatibility.make_predict.<locals>._predictP   s   :  $$(K$<  D 
 $$(K$<  I { F0dIvVVf$$$VG_555 % !:K' K/;1	 
 k.  H$4$;$;G$D$DEE   K( U+6t{7KLLTT   f$$&/)A)Ao)A4@MQ[Ma@ @ @   	 
 &&$VG_554?YQWYY   == s   7D   
F
BFFrL   rM   rI   )r+   r6   rD   s   `` r-   rF   z$EndpointV3Compatibility.make_predictO   s/    -	! -	! -	! -	! -	! -	! -	!^ r2   rL   r   c                     |                                  | }t          | j        d                   dk    r|d         S |S )z`Needed for gradio.load(), which has a slightly different signature for serializing/deserializingr@      r   )rF   lenr   r+   rB   r@   s      r-   _predict_resolvez(EndpointV3Compatibility._predict_resolve   sC    %$##%%t,ty)**a//1:r2   
file_pathslist[str | list[str]]Clist[str | list[str]] | list[dict[str, Any] | list[dict[str, Any]]]c           
     R   |sg S g }g t          |          D ]p\  }t          |t                    s|g}|D ]P}|                    dt	          |          j        t          |d          ff                                          Qqt          j        | j	        j
        f| j	        j        || j	        j        d| j	        j        }|j        dk    r|}ng }|                                }t          |          D ]\  }t          |t                    r9fdt          |          D             }d t!          ||d          D             }	nBt#          fd	t          |          D                       }
d
|
t	          |          j        d d}	|                    |	           |S )Nfilesrb)rQ   rw   rS      c                2    g | ]\  }}|         k    |S rI   rI   .0ixoiindicess      r-   
<listcomp>z3EndpointV3Compatibility._upload.<locals>.<listcomp>   s,    SSSEB'"+QRBRBRaBRBRBRr2   c                F    g | ]\  }}d |t          |          j        ddS )TNis_filename	orig_namerB   )r   r   )r|   fr~   s      r-   r   z3EndpointV3Compatibility._upload.<locals>.<listcomp>   sI        !Aq (,$%)-a$(	   r2   Fstrictc              3  :   K   | ]\  }}|         k    |V  d S r4   rI   r{   s      r-   	<genexpr>z2EndpointV3Compatibility._upload.<locals>.<genexpr>   s6      RR52qPQAQAQQAQAQAQAQRRr2   Tr   )	enumerater   listrA   r   r   openrY   rZ   r   
upload_urlrQ   r\   r]   status_coderR   zipnext)r+   rs   rw   fsr   ruploadedrh   rj   resr~   r   r   s              @@r-   _uploadzEndpointV3Compatibility._upload   s     	I
 z** 	" 	"EArb$'' T " "gQd1dmm'DEFFFq!!!!" JK"
K';)	
 

 k&
 
 =C!HHHVVXXF":.. % %2b$'' SSSSSYv->->SSSF  %(F5$A$A$A  CC RRRRRIf,=,=RRRRRA#' !%)"XX] $	 C $$$$r2   rw   rB   	list[Any]Nonec                f    d}t          | j                  D ]\  }}|dv r||         ||<   |dz  }dS )zAHelper function to modify the input data with the uploaded files.r   fileuploadbuttonro   N)r   r!   )r+   rw   rB   file_counterr   ts         r-   _add_uploaded_files_to_dataz3EndpointV3Compatibility._add_uploaded_files_to_data   sV     d899 	" 	"DAq,,,-Q!	" 	"r2   rM   c                    t          |          }t          | j                  D ]+\  }}|t          j        k    r|                    |d            ,t          |          S r4   )r   r   r!   r
   STATE_COMPONENTinsertrM   )r+   rB   r   input_component_types       r-   r;   z$EndpointV3Compatibility.insert_state   s\    Dzz'01K'L'L 	% 	%#A##u'<<<At$$$T{{r2   c                b    d t          || j        d          D             }t          |          S )Nc                4    g | ]\  }}|t           j        v|S rI   r
   SKIP_COMPONENTS)r|   docts      r-   r   zEEndpointV3Compatibility.remove_skipped_components.<locals>.<listcomp>   s4     
 
 
3%/// ///r2   Fr   )r   r"   rM   r+   rB   s     r-   remove_skipped_componentsz1EndpointV3Compatibility.remove_skipped_components   s@    
 
dD$?NNN
 
 

 T{{r2   c                Z    t          d | j        D                       dk    r|d         S |S )Nc                .    g | ]}|t           j        v|S rI   r   )r|   r   s     r-   r   zCEndpointV3Compatibility.reduce_singleton_output.<locals>.<listcomp>   s0       %"777 777r2   ro   r   )rp   r"   r   s     r-   reduce_singleton_outputz/EndpointV3Compatibility.reduce_singleton_output   sM     #:      7NKr2   c                   t          |          t          | j                  k    r4t          dt          | j                   dt          |                     d t          || j        d          D             }|                     |          }t          |          }|                     ||           t          d t          | j        |d          D                       }|S )N	Expected z arguments, got c                     g | ]\  }}|d v 	|S )r   rI   )r|   r   r   s      r-   r   z5EndpointV3Compatibility.serialize.<locals>.<listcomp>   s2     
 
 
1,,, ,,,r2   Fr   c                >    g | ]\  }}|                     |          S rI   )r<   )r|   sr   s      r-   r   z5EndpointV3Compatibility.serialize.<locals>.<listcomp>   s&    RRR1Q[[^^RRRr2   )	rp   r'   rX   r   r!   r   r   r   rM   )r+   rB   rw   uploaded_filesr~   s        r-   r<   z!EndpointV3Compatibility.serialize   s    t99D,----NC 011NN3t99NN  
 
D$"<UKKK
 
 

 e,,Dzz((>>>RRD,<d5(Q(Q(QRRR
 
 r2   c                    t          |          t           j                  k    r4t          dt           j                   dt          |                     t           fdt	           j        |d          D                       }|S )Nr   z outputs, got c                z    g | ]7\  }}|                     |j        j        j        j        j                   8S ))save_dirhf_tokenr%   )deserializer   
output_dirr   r%   )r|   r   r   r+   s      r-   r   z7EndpointV3Compatibility.deserialize.<locals>.<listcomp>   sZ        Aq ![3![1!]	     r2   Fr   )rp   r(   rX   rM   r   rq   s   `  r-   r   z#EndpointV3Compatibility.deserialize   s    t99D.////NC 233NN3t99NN         2DGGG  

 

 r2   c                Z    | j         j        r
 | j        | } | j        | } | j        | }|S r4   )r   download_filesr   r   r   )r+   rC   s     r-   r=   z+EndpointV3Compatibility.process_predictions  sB    ;% 	9*$*K8K4d4kB2d2K@r2   Etuple[list[serializing.Serializable], list[serializing.Serializable]]c                (   | j         d         }g }|D ]}| j        j        d         D ]}|d         |k    r|d         }| j                            |           |                    d          r<|d         }|t          j        vrt          d| d          t          j        |         }n4|t          j	        v rt          j	        |         }nt          d| d          |                     |                       ӌ| j         d	         }g }	|D ]}| j        j        d         D ]}|d         |k    r|d         }| j
                            |           |                    d          r<|d         }|t          j        vrt          d| d          t          j        |         }
nO|t          j        v rt          j        }
n4|t          j	        v rt          j	        |         }
nt          d| d          |	                     |
                       ||	fS )
Ninputs
componentsidtype
serializerzUnknown serializer: z4, you may need to update your gradio_client version.zUnknown component: r@   )r   r   configr!   rA   r   r	   SERIALIZER_MAPPINGr   COMPONENT_MAPPINGr"   r
   r   SimpleSerializable)r+   r   r'   r   	componentcomponent_nameserializer_namer   r@   r(   deserializers              r-   r&   z*EndpointV3Compatibility._setup_serializers  su    * 	5 	5A![/= 5 5	T?a''%.v%6N.55nEEE }}\22 *3L*A*+2PPP"9 | | | |# #  &1%CO%T

';+HHH%0%B>%R

5v.vvv    &&zz||444#5& /), 	9 	9A![/= 9 9	T?a''%.v%6N/66~FFF }}\22 *3L*A*+2PPP"9 | | | |# #  (3'Eo'V'5+@@@'2'E';+HHH'2'D^'T5v.vvv   "((888'9* M))r2   boolc                   | j         j                            dd          }t          j        | j         j                            dd                    t          j        d          k    }|                    dd          du}|o|o|S )Nenable_queueFr   z2.0z3.2queue)r   r   r   r   parseVersion)r+   r   queue_enabledqueue_uses_websocketdependency_uses_queues        r-   r   z&EndpointV3Compatibility._use_websocketF  s    *..~uEE&}K""9e44 
  
_U## $ !+w > >e KO!5O:OOr2   r   c                   K   t          j        | j        j        d| j        j        d          4 d {V 	 }t          j        ||||           d {V cd d d           d {V  S # 1 d {V swxY w Y   d S )N
   i   @)open_timeoutextra_headersmax_size)
websocketsconnectr   ws_urlrQ   r
   get_pred_from_ws)r+   rB   rg   r6   	websockets        r-   rW   zEndpointV3Compatibility._ws_fnN  sC     %K+-'	
 
 
 	T 	T 	T 	T 	T 	T 	T 	T
 /	4FSSSSSSSS	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	Ts   A&&
A03A0)r   r   r   r   r   r   r4   )r6   r7   )rL   r   )rs   rt   rL   ru   )rw   ru   rB   r   rL   r   rm   )rL   r   )r   r   rL   r   )r6   r   )__name__
__module____qualname____doc__r.   r1   r5   rG   rJ   rF   rr   r   r   r;   r   r   r<   r   r=   r&   r   rW   rI   r2   r-   r   r      s       QQ   .h h h      (    0 0 0 0 0d   2 2 2 2h
" 
" 
" 
"            &   $  2* 2* 2* 2*hP P P PT T T T T Tr2   r   )r   
__future__r   rR   pathlibr   typingr   r   r   rY   rc   r   	packagingr   gradio_clientr	   r
   gradio_client.exceptionsr   gradio_client.utilsr   r   r   rI   r2   r-   <module>r      s9   H  H " " " " " "        . . . . . . . . . .                , , , , , , , , < < < < < <       %$$$$$$}T }T }T }T }T }T }T }T }T }Tr2   