§
    ÎÐj<  ã                   óÚ   — d Z ddlZddlZ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 ddlmZmZ ddlmZ d	„ Z G d
„ de	¦  «        Z G d„ dej	        ¦  «        Zd„ Zd„ Zd„ Zd„ ZdS )zFWake Gradio queues on new work and reuse SSE across chained callbacks.é    N)ÚTimeoutError)Úwraps)ÚQueue)ÚFunctionTypeÚSimpleNamespace)ÚqueueingÚroutes)Úiter_app_routesc           	      ó˜   — t          | j        i | j        ¥dt          |t          j        ¬¦  «        i¥| j        | j        | j        ¦  «        S )NÚasyncio)ÚsleepÚCancelledError)	r   Ú__code__Ú__globals__r   r   r   Ú__name__Ú__defaults__Ú__closure__)Úfnr   s     úOC:\Users\johnn\OneDrive\Documents\AI\shared\gradio\gradio_queue_wakeup_patch.pyÚ_with_sleepr      s‡   € Ý˜œð  &H¨¬ð  &H¸	Å?ÐY^Õovô  pFð  DGñ  DGô  DGð  &Hð  &Hð  JLô  JUð  WYô  Wfð  hjô  hvñ  wô  wð  wó    c                   ó.   ‡ — e Zd Zˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚMessageQueuec                 ó¨   •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        t          j        ¦   «         | _        d S ©N)ÚsuperÚ__init__r   Úget_running_loopÚ_loopÚEventÚ
_available©ÚselfÚ	__class__s    €r   r   zMessageQueue.__init__   s:   ø€ Ý‰Œ×ÒÑÔÐÝÔ-Ñ/Ô/ˆŒ
Ý!œ-™/œ/ˆŒˆˆr   c                 ó¸   •—  t          ¦   «         j        |i |¤Ž | j                             ¦   «         s&| j                             | j        j        ¦  «         d S d S r   )r   Úputr   Ú	is_closedÚcall_soon_threadsafer!   Úset©r#   ÚargsÚkwargsr$   s      €r   r&   zMessageQueue.put   sb   ø€ Ø�‰ŒŒ�TÐ$˜VÐ$Ð$Ð$ØŒz×#Ò#Ñ%Ô%ð 	AØŒJ×+Ò+¨D¬OÔ,?Ñ@Ô@Ð@Ð@Ð@ð	Að 	Ar   c              ƒ   óò   K  — | j                              ¦   «          |                      ¦   «         sd S 	 t          j        | j                              ¦   «         |¬¦  «        ƒ d {V —† d S # t          $ r Y d S w xY w)N)Útimeout)r!   ÚclearÚemptyr   Úwait_forÚwaitr   ©r#   Údelays     r   r2   zMessageQueue.wait   s”   è è € ØŒ×ÒÑÔÐØ�zŠz‰|Œ|ð 	ØˆFð	ÝÔ" 4¤?×#7Ò#7Ñ#9Ô#9À5ÐIÑIÔIÐIÐIÐIÐIÐIÐIÐIÐIÐIøÝð 	ð 	ð 	ð ˆDˆDð	øøøs   ³3A( Á(
A6Á5A6)r   Ú
__module__Ú__qualname__r   r&   r2   Ú__classcell__©r$   s   @r   r   r      se   ø€ € € € € ð*ð *ð *ð *ð *ð
Að Að Að Að Að
	ð 	ð 	ð 	ð 	ð 	ð 	r   r   c                   óR   ‡ — e Zd Zˆ fd„Zd„ Zˆ fd„Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Z	ˆ xZ
S )ÚWakeupQueuec                 óx   •—  t          ¦   «         j        |i |¤Ž t          j        ¦   «         | _        d | _        d S r   )r   r   r   r    Ú_work_readyÚ
_work_loopr*   s      €r   r   zWakeupQueue.__init__,   s8   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ý"œ=™?œ?ˆÔØˆŒˆˆr   c              ƒ   óz   K  — | j                              ¦   «         ƒ d {V —† | j                              ¦   «          d S r   )r<   r2   r/   r3   s     r   Ú_wait_for_workzWakeupQueue._wait_for_work1   sH   è è € ØÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ØÔ×ÒÑ Ô Ð Ð Ð r   c              ƒ   óÞ   •K  — t          j        ¦   «         | _        t          j        ¦   «         | _        t          ¦   «         j        }t          || j        ¦  «        } || ¦  «        ƒ d {V —† d S r   )	r   r   r=   r    r<   r   Ústart_processingr   r?   )r#   ÚoriginalÚ	schedulerr$   s      €r   rA   zWakeupQueue.start_processing5   sk   øè è € Ý!Ô2Ñ4Ô4ˆŒÝ"œ=™?œ?ˆÔÝ‘7”7Ô+ˆõ   ¨$Ô*=Ñ>Ô>ˆ	Øˆi˜‰oŒoÐÐÐÐÐÐÐÐÐr   c                 óÈ   — | j         €| j                             ¦   «          d S | j                              ¦   «         s&| j                              | j        j        ¦  «         d S d S r   )r=   r<   r)   r'   r(   )r#   s    r   Ú_notify_workzWakeupQueue._notify_work?   sj   € ØŒ?Ð"ØÔ× Ò Ñ"Ô"Ð"Ð"Ð"Ø”×*Ò*Ñ,Ô,ð 	GØŒO×0Ò0°Ô1AÔ1EÑFÔFÐFÐFÐFð	Gð 	Gr   c              �   ó‚   •K  —  t          ¦   «         j        |i |¤Žƒ d {V —†}|d         r|                      ¦   «          |S )Nr   )r   ÚpushrE   )r#   r+   r,   Úresultr$   s       €r   rG   zWakeupQueue.pushE   sV   øè è € Ø#•u‘w”w”| TÐ4¨VÐ4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ˆØ�!Œ9ð 	 Ø×ÒÑÔÐØˆr   c              �   ó¤   •K  — 	  t          ¦   «         j        |i |¤Žƒ d {V —†	 |                      ¦   «          S # |                      ¦   «          w xY wr   )r   Úprocess_eventsrE   r*   s      €r   rJ   zWakeupQueue.process_eventsK   sg   øè è € ð	 Ø/�™œÔ/°Ð@¸Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@à×ÒÑÔÐÐøˆD×ÒÑÔÐÐøøøs	   …9 ¹Ac                 óp   •— t          ¦   «                              ¦   «          |                      ¦   «          d S r   )r   ÚcloserE   r"   s    €r   rL   zWakeupQueue.closeQ   s,   ø€ Ý‰Œ�Š‰ŒˆØ×ÒÑÔÐÐÐr   )r   r5   r6   r   r?   rA   rE   rG   rJ   rL   r7   r8   s   @r   r:   r:   +   s½   ø€ € € € € ðð ð ð ð ð
!ð !ð !ðð ð ð ð ðGð Gð Gðð ð ð ð ð ð  ð  ð  ð  ðð ð ð ð ð ð ð ð r   r:   c              ƒ   ór  K  — |j         j                             d¦  «        r|j                             d¦  «        dk    rdS |                      ¦   «         j        }|j        rdS |j        |          	                    d¦  «        ƒ d {V —† t          |j                             |¦  «        ¦  «        o|j         S )Nz/queue/dataÚstream_reuseÚ1Fg      Ð?)ÚurlÚpathÚendswithÚquery_paramsÚgetÚ
get_blocksÚ_queueÚstoppedÚpending_messages_per_sessionr2   ÚboolÚpending_event_ids_session)ÚappÚrequestÚsession_hashÚqueues       r   Ú_reuse_idle_streamr_   V   s½   è è € ð Œ;Ô×$Ò$ ]Ñ3Ô3ð °wÔ7K×7OÒ7OÐP^Ñ7_Ô7_ÐcfÒ7fÐ7fØˆuØ�NŠNÑÔÔ#€EØ„}ð ØˆuØ
Ô
,¨\Ô
:×
?Ò
?ÀÑ
EÔ
EÐEÐEÐEÐEÐEÐEÐEÝ�Ô/×3Ò3°LÑAÔAÑBÔBÐXÈ5Ì=ÐGXÐXr   c                 ó.  ‡— t          j        t          j        t	          j        | ¦  «        ¦  «        ¦  «        }dŠ G ˆfd„dt           j        ¦  «        } |¦   «                              |¦  «         ‰dk    rt          d¦  «        ‚| j	        j
        }t          j        dd                     |¦  «        › d�¦  «        j        d         }g |j        ¢t          j        t          j        | j        t          j        ¦   «         ¬	¦  «        ¬
¦  «        ‘|_        t          j        t          j        |gg ¬¦  «        ¦  «        }i | j        ¥dt(          i¥}t+          t-          || j	        j        d¦  «        |¦  «          |d         d„ | j        pdD ¦   «         Ž S )Nr   c                   ó   •— e Zd Zˆ fd„ZdS )ú'_with_stream_reuse.<locals>.ReuseStreamc                 óü   •— t          |j        t          j        ¦  «        r[t          |j        j        t          j        ¦  «        r7|j        j        j        dk    r"‰dz  Šg t          j        d¦  «        j        ¢|‘S |S )NÚCloseStreamMessageé   zEif await _reuse_idle_stream(app, request, session_hash):
    continue)	Ú
isinstanceÚvalueÚastÚCallÚfuncÚNameÚidÚparseÚbody)r#   ÚnodeÚmatchess     €r   Úvisit_Assignz4_with_stream_reuse.<locals>.ReuseStream.visit_Assignj   s‚   ø€ å˜$œ*¥c¤hÑ/Ô/ð yµJ¸t¼z¼ÕPSÔPXÑ4YÔ4Yð yÐ^bÔ^hÔ^mÔ^pð  uIò  _Ið  _IØ˜1‘�Øx�œÐ#kÑlÔlÔqÐxÐswÐxÐxØˆKr   N)r   r5   r6   rq   )rp   s   €r   ÚReuseStreamrb   i   s.   ø€ € € € € ð	ð 	ð 	ð 	ð 	ð 	ð 	r   rr   re   z>Gradio stream reuse requires the pinned Gradio 5.29 SSE helperzdef factory(z, z):
    pass)rl   Úctx)rg   )rn   Útype_ignoresr_   ÚexecÚfactoryc              3   ó$   K  — | ]}|j         V — Œd S r   )Úcell_contents)Ú.0Úcells     r   ú	<genexpr>z%_with_stream_reuse.<locals>.<genexpr>z   s%   è è € Ð!VÐ!V¸ $Ô"4Ð!VÐ!VÐ!VÐ!VÐ!VÐ!Vr   © )rh   rm   ÚtextwrapÚdedentÚinspectÚ	getsourceÚNodeTransformerÚvisitÚRuntimeErrorr   Úco_freevarsÚjoinrn   ÚReturnrk   r   ÚLoadÚfix_missing_locationsÚModuler   r_   ru   ÚcompileÚco_filenamer   )r   Útreerr   Únamesrv   ÚmoduleÚ	namespacerp   s          @r   Ú_with_stream_reuser�   b   sŒ  ø€ õ Œ9•X”_¥WÔ%6°rÑ%:Ô%:Ñ;Ô;Ñ<Ô<€DØ€Gðð ð ð ð ð ð •cÔ)ñ ô ð ð €K�M„M×Ò˜ÑÔÐØ�!‚|€|ÝÐ[Ñ\Ô\Ð\ØŒKÔ#€EÝŒiÐE t§y¢y°Ñ'7Ô'7ÐEÐEÐEÑFÔFÔKÈAÔN€GØ[�T”YÐ[¥¤
µ´¸R¼[ÍcÌhÉjÌjÐ1YÑ1YÔ1YÐ ZÑ ZÔ ZÐ[€G„LÝÔ&¥s¤z¸°yÈrÐ'RÑ'RÔ'RÑSÔS€FØL�2”>ÐLÐ#7Õ9KÐLÐL€IÝ��˜œÔ0°&Ñ	9Ô	9¸9ÑEÔEÐEØˆ9�YÔÐ!VÐ!VÀÄÐAUÐSUÐ!VÑ!VÔ!VÐWÐWr   c                 óz  ‡ — t          ‰ ¦  «        D ]©}t          |dd ¦  «        }t          |t          ¦  «        sŒ)t	          |j        j        |j        pd¦  «        D ]^\  }}|dk    rŒ|j        }t          |dd¦  «        rŒ%t          |¦  «        }t          |¦  «        |fˆ fd„	¦   «         }d|_        ||_        Œ_Œªd S )NÚendpointr|   Úqueue_data_helperÚ_wangp_message_wakeupFc              “   óX   •‡K  — ˆˆfd„} t          ||¦  «        | ‰|¦  «        ƒ d {V —†S )Nc              “   óŠ   •K  — ‰                      ¦   «         j        j        ‰         }|                     | ¦  «        ƒ d {V —† d S r   )rU   rV   rX   r2   )r4   Úmessagesr[   r]   s     €€r   Úwait_for_messagezL_patch_message_delivery.<locals>.queue_data_helper.<locals>.wait_for_messageŽ   sL   øè è € Ø"Ÿ~š~Ñ/Ô/Ô6ÔSÐT`Ôa�HØ"Ÿ-š-¨Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.r   )r   )r\   r]   Úprocess_msgÚ	_originalr˜   r[   s    `   €r   r“   z2_patch_message_delivery.<locals>.queue_data_helperŒ   s[   øøè è € ð/ð /ð /ð /ð /ð /ð F�[¨Ð4DÑEÔEÀgÈ|Ð]hÑiÔiÐiÐiÐiÐiÐiÐiÐir   T)r
   Úgetattrrf   r   Úzipr   r„   r   rx   r�   r   r”   )r[   Úrouter’   Únamerz   rB   r“   s   `      r   Ú_patch_message_deliveryrŸ   }   s  ø€ õ ! Ñ%Ô%ð 3ð 3ˆÝ˜5 *¨dÑ3Ô3ˆÝ˜(¥LÑ1Ô1ð 	ØÝ˜hÔ/Ô;¸XÔ=QÐ=WÐUWÑXÔXð 	3ð 	3‰JˆD�$ØÐ*Ò*Ð*ØØÔ)ˆHÝ�xÐ!8¸%Ñ@Ô@ð ØÝ)¨(Ñ3Ô3ˆHå�8‰_Œ_ØV^ð jð jð jð jð jñ Œ_ðjð 7;ÐÔ3Ø!2ˆDÔÐð!	3ð	3ð 3r   c                  ó  ‡— t           j        t          u rd S t          t           _        t          t           _        t
          j        j        Št          ‰¦  «        ˆfd„¦   «         } t          | ¦  «        t
          j        _        d S )Nc                  ó6   •—  ‰| i |¤Ž}t          |¦  «         |S r   )rŸ   )r+   r,   r[   Úoriginal_create_apps      €r   Ú
create_appzinstall.<locals>.create_appž   s+   ø€ à!Ð! 4Ð2¨6Ð2Ð2ˆÝ Ñ$Ô$Ð$Øˆ
r   )
r   r   r:   r   ÚThreadQueuer	   ÚAppr£   r   Ústaticmethod)r£   r¢   s    @r   Úinstallr§   —   sv   ø€ Ý„~�Ð$Ð$ØˆÝ …H„NÝ'…HÔÝ œ*Ô/Ðå
ÐÑÔðð ð ð ñ  Ôðõ
 )¨Ñ4Ô4…F„JÔÐÐr   )Ú__doc__rh   r   r   r}   r   Ú	functoolsr   r^   r   Útypesr   r   Úgradior   r	   Úshared.utils.fastapi_routesr
   r   r   r:   r_   r�   rŸ   r§   r|   r   r   ú<module>r­      s\  ðà LÐ LØ 
€
€
€
Ø €€€Ø €€€Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðwð wð wðð ð ð ð �5ñ ô ð ð.(ð (ð (ð (ð (�(”.ñ (ô (ð (ðV	Yð 	Yð 	YðXð Xð Xð63ð 3ð 3ð45ð 5ð 5ð 5ð 5r   