o
    ۷i                     @   s   d dl Z d dlZd dlZd dl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mZ dedefddZed	krFed
dZe  dS dS )    N)	signature)	SketchBox)ai
get_header	set_kwargapp_fileconfig_filec                    s2  t j}t jt j}i 	g dtjdditjdditjddii
tjtj	tj
tjtjgg tjtjtjtjtj
tjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtj tj	tj!tj"tjtjtj#tj$fddd4fdd	
fd	d
dd t% \}td}g i  g }d}tdt|t t|tt|gtd td}tt&' pt (dtj
dddddt) *}	tj*gdd	fdd}
W d    n	1 s0w   Y  t+ / td| d | d  *  tj
dddd}tj
ddddt,j-.dd }W d    n	1 slw   Y  tj*|gdd	f	d!d"}tj)d#dd$G}td% tj*gddfd&d'}d(d) }/||g td* tjd+ddd,}tj0g|dd-d.d/ }W d    n	1 sw   Y  |j/||g||||	|gdd- fd0d1}|j/d |d2d3 W d    |S 1 sw   Y  |S )5N)everyinputsrenderkeytypefilepathmessagesc                    s    fddD d S )Nc                    s   g | ]	}|j  kr|qS  __name__.0	componentnamer   G/home/ubuntu/vllm_env/lib/python3.10/site-packages/gradio/sketch/run.py
<listcomp>F   s    z9create.<locals>.get_component_by_name.<locals>.<listcomp>r   r   r   )all_component_listr   r   get_component_by_nameE   s
   
z%create.<locals>.get_component_by_namec                    s^   | }t | tr|d t| k r| |d  nd }t|dkr* ||dd  |\}}}|||fS )Nr      )
isinstancelistlen)_slotigpparenttargetget_boxr   r   r&   J   s
   *
zcreate.<locals>.get_boxc              	      s   ||\}}}t |tr|g}|r|||d < ||d | | i  }	| j|	dg |< | j }
 fdd D }|
}d}||v rV|
d t| }|d7 }||v sF| | d< | |d	||d tj	d
dfS )N c                       g | ]} | d  qS    r   )r   r!   
componentsr   r   r   ^       z1create.<locals>.add_component.<locals>.<listcomp>r,   _r   modify_componentT)interactive)
r   intinsertgetcopyr   lowerstrgrButton)r   layoutr.   dependencies	add_indexnew_component_idr"   r#   r0   default_kwargscomponent_nameexisting_namesvar_namer!   )default_kwargs_mapr&   r-   r   add_componentQ   s2   


zcreate.<locals>.add_componentc              
   S   sF   zt |  W n ty } ztd|d }~ww tjddd | S )NzInvalid Hugging Face token.zToken set successfully.r,   duration)hubloginBaseExceptionr9   ErrorSuccess)tokenerrr   r   r   set_hf_tokenp   s   zcreate.<locals>.set_hf_tokenr   rD   FHF_TOKENz+ Add Function)scaler2   r   hiddenshow_progressc           )         s  | dkrt dkrd} dg| dkrtd td | dkrtd t dkr2td ntd D ] }tj|jd	d
|ffdd	g q9tjdd D dddd}|fdd|gg | dkr \}	}
td tjdd}fdd}t	|j
|jg|| td |	}tt|jj dd  }|D ]>}|v rq|
|d}tj||d|	  d|	  d| dd d d!}|ffd"d#	}t	|j
|jg|| q| d$krw 		\}}}td% tjd&d}	fd'd(}t	|j
|jg|| td) sStjd*d+d,d-}tjd.d	d
}|| nd/d0
t |dk}tjd1d2|rf
ndd3}t  d dt  d4    kodkn  }|rtd5 d6d7tj|rnd	| d8}tjd9d	|d:}fd;dD  fd<dD }|d ur|nt  d=d>d?d |D  }tj|d@dAdB}tjdCd	d
} tj|dDdE}!fdFdG}"dHttttf  dItdJtf
fdKdL}#||"||!g|j|#|!||g|!|||gdMdN  fdOdP}$||$g|||||!g 	fdQdR}%| |%|!|g tjdSdTd	dU}&|&dVd d g tjdWdXd	dU}'fdYdZ}(|'|(d g d S d S )[Ndefaultr   rD   z## Placementz)Click on a '+' button to add a component.z## Selectionz Select first component to place.z+Select component to place in selected area.mdsizec                    s   ||  S Nr   )_layout
_component)
_add_index_components_dependencies_new_component_idrD   r   r   <lambda>   s    z0create.<locals>.render_sidebar.<locals>.<lambda>c                 S   s   g | ]}|j qS r   r   r   r   r   r   r      s    z2create.<locals>.render_sidebar.<locals>.<listcomp>TzOther Components...)	containerlabelr2   c                    s   | | S rX   r   )rZ   rY   )r[   r\   r]   r^   rD   r   r   r   r_      s    r1   zT## Configuration
Hover over a component to add new components when done configuring.zVariable Name)ra   c                    s   |   d<  S )Nr,   r   r   r\   
_modify_idr   r   set_var_name   s   z4create.<locals>.render_sidebar.<locals>.set_var_namezQSet args below with python syntax, e.g. `True`, `5`, or `["choice1", "choice2"]`.r   r)   z,<a href='https://www.gradio.app/docs/gradio/z#param--r0   z' target='_blank'>docs</a>)ra   infoc                    s   t   d ||   S )Nr   )r   )valueargrb   r   r   set_arg  s   z/create.<locals>.render_sidebar.<locals>.set_argmodify_functionz## Event ListenerszFunction Namec                    s   | d<  S )N   r   r   )r]   depr   r   set_fn_name  s   z3create.<locals>.render_sidebar.<locals>.set_fn_namezvMark the components in the diagram as inputs or outputs, and select their triggers. Then use the code generator below.zHF TokenzNeeded for code generation. Copy from [HF Token Page](https://huggingface.co/settings/token). Token requires access to inference providers.password)ra   rf   r   zSubmit Tokenz%Describe what the function should do.zMDescribe how to change the code generation. Click 'Reset Code' to start over.Promptrk   )ra   linesplaceholderr2   r,   z6Set **all inputs and outputs** before generating code.zGenerate CodezUpdate Code)rW   r2   z
Reset Code)rW   visiblec                    r*   r+   r   r   cr\   r   r   r   T  r/   c                    r*   r+   r   rs   ru   r   r   r   U  r/   z
    ...
    return , c                 S      g | ]}d qS z...r   r   r0   r   r   r   r   [         python)rp   languagez	Save CodeFrr   c                 3   sF    t || d gg  fddD  fddD E d H  d S )Nc                    s2   g | ]} | d   | d  | d fqS )r,   r   r   r   rs   r\   r   r   r   r   f  s    

zDcreate.<locals>.render_sidebar.<locals>.generate.<locals>.<listcomp>c                    s(   g | ]} | d   | d fqS )r   r   r   rs   r   r   r   r   n  s    
)r   )_prompt_history)r\   	_hf_token_inputs_outputsr   rB   r   r   generatea  s   z0create.<locals>.render_sidebar.<locals>.generatehistorypromptcodec                    s2   |  ||f | tjddtjd dtfS )NTr~   r)   )rg   rq   )appendr9   r:   Textbox)r   r   r   )edit_prompt_placeholderupdate_generate_textr   r   append_to_historyw  s   
z9create.<locals>.render_sidebar.<locals>.append_to_historyrQ   rR   c                    sD   g | | d< d | | d< t  tjddtjdtg | fS )Nr{      Fr~   )rq   )r   r9   r:   r   r]   rc   )__inputsnew_generate_textnew_prompt_placeholderrB   r   r   
reset_code  s   

z2create.<locals>.render_sidebar.<locals>.reset_codec              
      s   zt | W n ty } z	td| |d }~ww vr*td dt| dkr2g n| d d | d d |gg d< |d< tjdd	d
  S )NzError saving function: z
Function 'z' not found in code.r   r(   r{   r   zFunction saved.r,   rE   )execrI   r9   rJ   r   rK   )r   _codee)r]   created_fns_namespacerl   rB   r   r   	save_code  s"   
z1create.<locals>.render_sidebar.<locals>.save_codeDoneprimary)variantrW   c                   S   s   dd gS NrT   r   r   r   r   r   r_     s    zDelete Functionstopc                      s    =  dd fS r   r   r   r   r   r   del_function  s   
z4create.<locals>.render_sidebar.<locals>.del_function)r   r9   Markdownr:   r   clickDropdownchanger   onblursubmitr   r   __init__
parameterskeysr5   r7   replacer   joinCodeJSONtupler8   then))_moder[   r^   r\   r]   rc   r   r   any_component_searchr@   kwargsvar_name_boxrd   	argumentsrh   	arg_valuearg_boxri   	_triggersr   r   function_name_boxrm   input_hf_tokensubmit_token_btnhistory_existsr   no_components_are_setgenerate_code_btnreset_code_btn	__outputsfn_codesave_code_btnr   r   r   r   r   done_function_btndel_function_btnr   )rD   
add_fn_btnr   r.   r   r<   r   hf_tokenr;   mode	modify_idr>   nonconfigurable_paramsquick_component_listrN   )r   r[   r\   r]   r   r   rc   r^   r   rl   r   r   r   r   rB   r   render_sidebar   st  





*


	



	 zcreate.<locals>.render_sidebarz## Sketching '/'Save & Renderr   )r   rP   zDeploy to Spaces   zhuggingface-logo.svg)rr   rP   	min_widthiconc                    sZ  g i |dkd f	dd	| dg  D ]!\}}|fdt jffdd}||
g
	g qrD ]e^}	}
}}}}fd	d
|	D }fdd
|
D }fdd
|D }|rzt || || W qE ty   Y qEw t|}|dkrt  g| n	|dkrt  nd fdd}t |||| qEd S d S )Nrj   r   c                    s  |rt  nt  }| t| D ]\} ||g }t trT	r, | ||d  n'tdd} | ||d  W d    n1 sGw   Y  ||f q  \}}	}
|}	rk|di |	 < qr fdd d D }  d v }  d v }nd }d}d}t|j	 |
 ko t
|d	r|jnd |||d
}|di |	 W d    n1 sw   Y  ||f qW d    d S 1 sw   Y  d S )Nr   T)is_containerfunction_modec                    s   g | ]
\}}| kr|qS r   r   r   rt   telementr   r   r     s
    z<create.<locals>.app.<locals>.render_slot.<locals>.<listcomp>r   r,   FEVENTS)component_typerB   activer   
event_listis_input	is_outputtriggersr   )r9   ColumnRow	enumerater   r   r   r   r   r7   hasattrr   )slot	is_columnindexdepthr`   r!   
this_indexboxr@   r   rB   r   r   r   r   )	r\   r]   rc   boxesr   r   render_slotrendered_componentssavedr   r   r     sd   



"z(create.<locals>.app.<locals>.render_slotTdatac                    s  |j dv r\t|d dkr1|j dkr|d  d7  < n9|j dkr&|d n.|j dkr0|d n#|j dkr?|d  d7  < n|j d	krJ|d n
|j dkrT|d |  |d
|d fS |j dkr fdd| | t| dkr}|  |d
dgd fS |  |dg d fS |j dkr| |^ }}|  |dd |fS |j dv rˈ| |^ }}|| |j dkrdnd }||v r|| n|| |  |dd |fS |j dr| |^ }}|j dd  }	|| d }
||	f|
v r|
||	f n|
||	f |  |dd |fS d S )N)updownleftrightr,   r   r   r(   r   r   r   r   rD   deletec                    s   | |\}}}| | t|tr |= t|dkr,t|dkr,| |d d  d S t|dkr>|r@|d ||d < d S d S d S )Nr   r   r(   r'   )remover   r3   r   )rY   r   r"   r#   r$   )r\   delete_indexr&   r   r   r   7  s   

z=create.<locals>.app.<locals>.box_action.<locals>.delete_indexrT   modifyr1   )inputoutputr   rj   zon:rk   )rg   r   r   r   
startswith)rY   r\   r]   rc   r   r   r0   r$   component_listeventr   r%   )r\   r   r   
box_action  s   














z'create.<locals>.app.<locals>.box_actionc                    s   g | ]\}}t  | |qS r   )getattrr   r   r   r   r     s    z'create.<locals>.app.<locals>.<listcomp>c                       g | ]} | qS r   r   rs   r   r   r   r         c                    r   r   r   rs   r   r   r   r     r   c                     s   t d td  S )Nsleepingr   )printtimesleep)r0   )	fn_outputr   r   r    s   
z"create.<locals>.app.<locals>.sleepr   )r9   
SelectDataselectr   	Exceptionr   skip)rY   r\   r]   r   rc   r   r   r   r   r   r
   outputsfn_namer0   r   rendered_triggersrendered_inputsrendered_outputsoutput_countr  )	r=   r.   r   r<   r&   r   r;   r   r   )	r\   r]   rc   r   r  r   r   r   r   r   app  s\   3j

zcreate.<locals>.appr   )positionopenz## Functionsc                    sF   t | D ]\}}tj|d dd}|fdd}|j| gd qd S )Nrk   rU   rV   c                 S   s   d| fS )Nrj   r   )r!   r   r   r   load_fn  s   z,create.<locals>.render_deps.<locals>.load_fn)r  )r   r9   r:   r   )r]   r!   rl   fn_btnr  )r   r   r   r   render_deps  s
   zcreate.<locals>.render_depsc                 S   s@   |  g g g dt| d  g d g | dt| d tjddfS )Nfn_r   rj   Tr  )r   r   r9   Sidebar)r]   r   r   r   add_fn  s   

zcreate.<locals>.add_fnz## Generated Filer|   )r}   r2   
show_label)r
   r  rS   c           	         s$  dd fdd	| dg  |D ]v} fdd|d D } fd	d|d D } fd
d|d D }|d }|d d urI|d  dd}nd| dd| dddd |D  }dt|dkrm|d d ndd| d  dd| dd| d| d	7 qd dS )Nr)   r   c                    s   t | D ]q\}}||g }t|tr-d| d |rdnd d 7 || ||d  q | \}}}	d| |	 d | d 7 t | D ](\}\}
}t|tr]d	| d	d
dn|}|dkrgd7 |
 d| 7 qHd7 qd S )Nz    zwith gr.r   r   z():
r   z = gr.("
z\nr   rv   =z)
)r   r   r   itemsr8   r   )r   r   r   r   r!   r   r   r@   r   rB   kvr\   code_strrender_code_slotr   r   r"    s<   



z5create.<locals>.render_code.<locals>.render_code_slotTc                    s$   g | ]\}} | d  d | qS )r,   .r   r   ru   r   r   r     s   $ z/create.<locals>.render_code.<locals>.<listcomp>r   c                    r*   r+   r   rs   ru   r   r   r     r/   c                    r*   r+   r   rs   ru   r   r   r     r/   r,   rk   r   r  z
    zdef r  rv   z):
        ...
        return c                 S   rw   rx   r   ry   r   r   r   r     rz   z
    @zgr.on([z], zinputs=[z], outputs=[z])
    z/import gradio as gr

with gr.Blocks() as demo:
z
demo.launch()r  )r   r   r   )	rY   r\   r]   rl   r   r
   r  r	  r   r   r   r   render_code  s4   (zcreate.<locals>.render_codec              	      s   t d}|| W d    n1 sw   Y  t d}t d| W d    n1 s3w   Y  |  | r>dndtj| dtj|  ddtj| dtj| oYt|dkdgS )	Nw)r;   r.   r   zEdit Sketchr~   rT   r  r   )r  writejsondumpr9   r:   r  r   )r   r   depsf)r\   rY   r   r   r   r   save	  s&   	


zcreate.<locals>.savez(code) => {
                code = encodeURIComponent(code);
                url = `https://huggingface.co/new-space?name=new-space&sdk=gradio&files[0][path]=app.py&files[0][content]=${code}`
                window.open(url, '_blank')
            })fnr
   jsrX   )1ospathbasenamedirnamer9   ImageAudioChatbotr   Numberr:   r   StateAnnotatedImageBarPlotBrowserStateCheckboxCheckboxGroupr   ColorPicker	DataframeDateTimer   FileGalleryHighlightedTextHTMLImageEditorr   LabelLinePlotModel3DMultimodalTextboxRadioSliderTimerVideoBlocksrG   	get_tokengetenvr  r   r   gradioutilsget_icon_pathr   r   )r   r   	file_namefolder_namedemo_idr]   r^   r   left_sidebarr   save_btndeploy_to_spaces_btnr  right_sidebarr  r  r   r$  r+  r   )r\   rY   rD   r   r=   r   r   r.   r   r   rC   r<   r&   r   r   r;   r   r   r>   r   r   rN   r   create   s  


	
 !$








	,  
6
 Q
	
^	     
     B          BrZ  __main__zapp.pyzapp.json)r'  r.  r   inspectr   huggingface_hubrG   rO  r9   gradio.utilsgradio.sketch.sketchboxr   gradio.sketch.utilsr   r   r   r8   rZ  r   rT  launchr   r   r   r   <module>   s(          0
