§
    Û×j6  ã                   óâ   — d Z ddlmZ ddlmZ ddlmZ ddlZddlZddl	m
Z
 ddlmZ  G d„ d	e¦  «        Z ed
d¬¦  «        Zd„ Zdd„Z G d„ d¦  «        Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         ZdS )zSCooperative media pause/abort at MMGP block boundaries and preparation checkpoints.é    )Ú
ContextVar)Úcontextmanager)ÚwrapsN)Úset_generation_state)Úgen_lockc                   ó   — e Zd ZdZdS )ÚMediaProcessingAbortedz4Normal cancellation of an edit or generation worker.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úBC:\Users\johnn\OneDrive\Documents\AI\shared\utils\media_control.pyr	   r	      s   € € € € € Ø>Ð>Ð>Ð>r   r	   Úmedia_control)Údefaultc                  ó4   — t                                ¦   «         S ©N)Ú_controlÚgetr   r   r   Úcurrent_controlr      s   € Ý�<Š<‰>Œ>Ðr   r   c           	      ó  ‡	— |                       d¦  «        pd}|                       d¦  «        s|                     d¦  «        sdS g }t          5  |                       d¦  «        pd}|                       d¦  «        s|                     d¦  «        s	 ddd¦  «         dS |D ]@Š	ˆ	fd„‰	j        D ¦   «         }‰	                     ¦   «          |                     ‰	|f¦  «         ŒAt          | |                     ddd	¦  «        ¬
¦  «         ddd¦  «         n# 1 swxY w Y   |�" |dd|                       dd¦  «        g¦  «         	 t          5  |                       d¦  «        pd}|dk    p|                     d¦  «        }|                       d¦  «        r%|r#d| d<   t          | d¬
¦  «         	 ddd¦  «         nx|dv r	 ddd¦  «         ng|                     d¦  «        r&t          | |                     ddd	¦  «        ¬
¦  «         ddd¦  «         n# 1 swxY w Y   t          j	        d¦  «         Œì|                       d¦  «        s=|D ]:\  Š	}|D ]2\  }}‰	 
                    |¦  «         |�‰	                     ||¦  «         Œ3Œ;dS )zOAcknowledge pause only after unloading; restore in-flight MMGP state on resume.Úprocess_statusÚ Úabortúrequest:FNc                 ó.   •— g | ]}|‰j         |         f‘ŒS r   )Úloaded_blocks)Ú.0Úmodel_idÚmanagers     €r   ú
<listcomp>z$pause_checkpoint.<locals>.<listcomp>$   s&   ø€ ÐlÐlÐlÀh�x Ô!6°xÔ!@ÐAÐlÐlÐlr   zprocess:é   )r   Úprogressr   Ú	pause_msgz2Media Processing Paused - Click Resume to ContinueTzprocess:pausezprocess:deepy_pause_Úresumeúprocess:main)r   r'   gš™™™™™¹?)r   Ú
startswithr   Úactive_models_idsÚ
unload_allÚappendr   ÚreplaceÚtimeÚsleepÚensure_model_loadedÚgpu_load_blocks)
ÚgenÚsend_cmdÚmanagersÚstatusÚ	suspendedÚactiveÚmanual_pauser    Úblockr!   s
            @r   Úpause_checkpointr9      sê  ø€ à�WŠWÐ%Ñ&Ô&Ð,¨"€FØ
‡w‚wˆwÑÔð ˜v×0Ò0°Ñ<Ô<ð ØˆuØ€IÝ	ð \ð \Ø—’Ð)Ñ*Ô*Ð0¨bˆØ�7Š7�7ÑÔð 	 6×#4Ò#4°ZÑ#@Ô#@ð 	Øð\ð \ð \ñ \ô \ð \ð \ð \ð  ð 	0ð 	0ˆGØlÐlÐlÐlÐRYÔRkÐlÑlÔlˆFØ×ÒÑ Ô Ð Ø×Ò˜g vÐ.Ñ/Ô/Ð/Ð/Ý˜S°·²À
ÈJÐXYÑ1ZÔ1ZÐ[Ñ[Ô[Ð[ð\ð \ð \ñ \ô \ð \ð \ð \ð \ð \ð \øøøð \ð \ð \ð \ð ÐØˆ�˜a §¢¨Ð6jÑ!kÔ!kÐlÑmÔmÐmðÝð 
	dð 
	dØ—W’WÐ-Ñ.Ô.Ð4°"ˆFØ! _Ò4Ða¸×8IÒ8IÐJ`Ñ8aÔ8aˆLØ�wŠw�wÑÔð  Lð Ø $��H‘Ý$ S¸ÐHÑHÔHÐHØð
	dð 
	dð 
	dñ 
	dô 
	dð 
	dð 
	dð Ð-Ð-Ð-Øð
	dð 
	dð 
	dñ 
	dô 
	dð 
	dð 
	dð × Ò  Ñ,Ô,ð dÝ$ S¸¿ºÈ
ÐT^Ð`aÑ9bÔ9bÐcÑcÔcÐcð
	dð 
	dð 
	dñ 
	dô 
	dð 
	dð 
	dð 
	dð 
	dð 
	dð 
	døøøð 
	dð 
	dð 
	dð 
	dõ 	Œ
�3‰Œˆðð �7Š7�7ÑÔð =Ø(ð 	=ð 	=‰OˆG�VØ#)ð =ð =‘�˜%Ø×+Ò+¨HÑ5Ô5Ð5ØÐ$Ø×+Ò+¨H°eÑ<Ô<Ð<øð=ð ˆ4s9   ÁADÂA)DÄDÄDÅ
A!HÆ7HÇ;HÈHÈHc                   ó@   — e Zd Zd„ fd„Zd„ Zd„ Zd„ Zdd„Zdd	œd
„ZdS )ÚMediaControlc                  ó   — d S r   r   r   r   r   ú<lambda>zMediaControl.<lambda>A   s   € ¸T€ r   c                 óZ   — || _         || _        d | _        || _        d| _        d | _        d S )NF)r1   Úpublishr$   Úget_offloadobjÚloadingÚloading_callback)Úselfr1   r2   r@   s       r   Ú__init__zMediaControl.__init__A   s4   € ØˆŒØˆŒØˆŒØ,ˆÔØˆŒØ $ˆÔÐÐr   c                 óD   — t                                | ¦  «        | _        | S r   )r   ÚsetÚtoken)rC   s    r   Ú	__enter__zMediaControl.__enter__I   s   € Ý—\’\ $Ñ'Ô'ˆŒ
Øˆr   c                 ó  — 	 | j                              d¦  «        r+|                      ¦   «         D ]}|                     ¦   «          Œt                               | j        ¦  «         d S # t                               | j        ¦  «         w xY w©Nr   )r1   r   Úlive_managersr*   r   ÚresetrG   )rC   Úexcr!   s      r   Ú__exit__zMediaControl.__exit__M   s�   € ð	'ØŒx�|Š|˜GÑ$Ô$ð )Ø#×1Ò1Ñ3Ô3ð )ð )�GØ×&Ò&Ñ(Ô(Ð(Ð(å�NŠN˜4œ:Ñ&Ô&Ð&Ð&Ð&ø�H�NŠN˜4œ:Ñ&Ô&Ð&Ð&øøøs   ‚AA( Á(!B	c                 ó  — ddl m} t          |                     ¦   «                              ¦   «         ¦  «        }|                      ¦   «         }|�|                     |¦  «         t          t                               |¦  «        ¦  «        S )Nr   )Úoffload_registry)	Úshared.utilsrP   ÚlistÚquery_offloadobjsÚvaluesr@   r+   ÚdictÚfromkeys)rC   rP   r3   Úmains       r   rK   zMediaControl.live_managersU   s}   € Ø1Ð1Ð1Ð1Ð1Ð1ÝÐ(×:Ò:Ñ<Ô<×CÒCÑEÔEÑFÔFˆØ×"Ò"Ñ$Ô$ˆØÐØ�OŠO˜DÑ!Ô!Ð!Ý•D—M’M (Ñ+Ô+Ñ,Ô,Ð,r   Nc                 ó¤   — |dk    r|| _         n|dk    r	d|g| _         |                      ||¦  «         |dk    r|                      ¦   «          d S d S )Nr$   r4   r   )r$   r?   Ú
checkpoint)rC   ÚcommandÚdatas      r   r2   zMediaControl.send_cmd]   si   € Ø�jÒ Ð Ø ˆDŒMˆMØ˜Ò Ð Ø ˜IˆDŒMØ�Š�W˜dÑ#Ô#Ð#Ø�jÒ Ð Ø�OŠOÑÔÐÐÐð !Ð r   T©Úunloadc                ó\  — | j                              d¦  «        pd                     d¦  «        sd S t          | j         | j        |r| j        s|                      ¦   «         nd¦  «        r>| j                              d¦  «        s&| j        �!|                      d| j        ¦  «         d S d S d S d S )Nr   r   r   r   r   r$   )r1   r   r(   r9   r?   rA   rK   r$   )rC   r]   s     r   rY   zMediaControl.checkpointf   s¼   € Ø”—’Ð-Ñ.Ô.Ð4°"×@Ò@ÀÑLÔLð 	ØˆFÝ˜DœH d¤lÈFÐ4oÐ[_Ô[gÐ4o°D×4FÒ4FÑ4HÔ4HÐ4HÐmoÑpÔpð 	8Ø”8—<’< Ñ(Ô(ð 8¨T¬]Ð-FØ—’˜Z¨¬Ñ7Ô7Ð7Ð7Ð7ð	8ð 	8ð8ð 8Ð-FÐ-Fr   r   )	r
   r   r   rD   rH   rN   rK   r2   rY   r   r   r   r;   r;   @   sŒ   € € € € € Ø5A°\ð %ð %ð %ð %ðð ð ð'ð 'ð 'ð-ð -ð -ðð ð ð ð $(ð 8ð 8ð 8ð 8ð 8ð 8ð 8r   r;   c                 ó    — t          ¦   «         }|�|j        | u r|                     ¦   «          t          |                      d¦  «        ¦  «        S rJ   )r   r1   rY   Úboolr   )r1   Úcontrols     r   Úmedia_abort_requestedrb   m   sK   € ÝÑÔ€GØÐ˜wœ{¨cÐ1Ð1Ø×ÒÑÔÐÝ�—’˜Ñ Ô Ñ!Ô!Ð!r   c                 óh   ‡ ‡— t          j        ‰ ¦  «        Št          ‰ ¦  «        ˆ ˆfd„¦   «         }|S )zMPause loading through its callback, without unloading partially built models.c                  ó"  •‡
‡— t          ¦   «         Š
‰
€ ‰| i |¤ŽS ddlm}  ‰j        | i |¤Ž}|j                             d¦  «        Šd‰j        v r |j                             d‰
j        ¦  «         ˆ
ˆfd„}ˆ
ˆfd„}| 	                    ||¦  «        }d‰j        v r
||j        d<   ‰
j
        ‰
j        f}d|c‰
_
        ‰
_        	 |                     |¦  «        5  |                     ¦   «           ‰|j        i |j        ¤Ž}‰
                     d¬	¦  «         |cd d d ¦  «         |\  ‰
_
        ‰
_        S # 1 swxY w Y   n+# |j        $ r}	d‰
j        d
<   t%          ¦   «         |	‚d }	~	ww xY w	 |\  ‰
_
        ‰
_        d S # |\  ‰
_
        ‰
_        w xY w)Nr   )ÚoffloadrB   r1   c                  óÀ   •— ‰                       d¬¦  «         t          ‰ j                             d¦  «        p ‰d uo‰j        d uo‰                     ¦   «         ¦  «        S )NFr\   r   )rY   r`   r1   r   Úabort_requested)ra   Úoriginals   €€r   rg   zBcontrolled_model_loading.<locals>.wrapped.<locals>.abort_requestedƒ   s‚   ø€ Ø×Ò eÐÑ,Ô,Ð,Ý˜œŸš¨Ñ0Ô0ð  S°XÀTÐ5Ið  6RÈhÔNfÐnrÐNrð  6RÐw÷  xPò  xPñ  xRô  xRñ  Tô  Tð  Tr   c                 ó  •— ‰�!‰j         �‰                      | |||¦  «         d S |                     dd¦  «                             ¦   «         }‰                     d||fd| › d|› �                     ¦   «         |g¦  «         d S )NÚ_ú r$   z
Loading - )r$   r,   Útitler2   Úrstrip)ÚphaseÚ	completedÚtotalr    Ú	componentra   rh   s        €€r   r$   z;controlled_model_loading.<locals>.wrapped.<locals>.progress‡   s™   ø€ ØÐ#¨Ô(9Ð(EØ×!Ò! %¨°E¸8ÑDÔDÐDÐDÐDà$×,Ò,¨S°#Ñ6Ô6×<Ò<Ñ>Ô>�	Ø× Ò  ¨y¸%Ð.@ÐBbÈuÐBbÐBbÐW`ÐBbÐBb×BiÒBiÑBkÔBkÐmrÐ-sÑtÔtÐtÐtÐtr   TFr\   r   )r   Úmmgpre   ÚbindÚ	argumentsr   Ú
parametersÚ
setdefaultr1   ÚLoadingCallbackrA   rB   Úloading_contextÚcheck_abortÚargsÚkwargsrY   ÚLoadingCancelledr	   )rz   r{   re   Úboundrg   r$   ÚcallbackÚpreviousÚresultÚerrorra   rh   ÚfnÚ	signatures             @@€€r   Úwrappedz)controlled_model_loading.<locals>.wrappedx   sm  øøø€ å!Ñ#Ô#ˆØˆ?Ø�2�tÐ&˜vÐ&Ð&Ð&Ø Ð Ð Ð Ð Ð Ø�	” Ð/¨Ð/Ð/ˆØ”?×&Ò&Ð'9Ñ:Ô:ˆØ�IÔ(Ð(Ð(ØŒO×&Ò& u¨g¬kÑ:Ô:Ð:ð	Tð 	Tð 	Tð 	Tð 	Tð 	Tð	uð 	uð 	uð 	uð 	uð 	uð ×*Ò*¨?¸HÑEÔEˆØ Ô!5Ð5Ð5Ø2:ˆEŒOÐ.Ñ/Ø”? GÔ$<Ð<ˆØ48¸(Ð1ˆŒ˜Ô1ð
	AØ×(Ò(¨Ñ2Ô2ð ð Ø×$Ò$Ñ&Ô&Ð&Ø˜˜UœZÐ8¨5¬<Ð8Ð8�Ø×"Ò"¨%Ð"Ñ0Ô0Ð0Øð	ð ð ð ñ ô ð ð 9AÑ5ˆGŒO˜WÔ5Ð5ðð ð ð øøøð ð ð ð ð øð
 Ô'ð 	6ð 	6ð 	6Ø#'ˆGŒK˜Ñ Ý(Ñ*Ô*°Ð5øøøøð	6øøøðð 9AÑ5ˆGŒO˜WÔ5Ð5Ð5ø¸Ñ5ˆGŒO˜WÔ5Ð@Ð@Ð@Ð@sN   ÃE  Ã>D4ÄE  Ä4D8Ä8E  Ä;D8Ä<E  Ä?E= Å 
E(Å
E#Å#E(Å(E= Å=F)Úinspectrƒ   r   )r‚   r„   rƒ   s   ` @r   Úcontrolled_model_loadingr†   t   sP   øø€ åÔ! "Ñ%Ô%€Iå
ˆ2�Y„Yð$Að $Að $Að $Að $Añ „Yð$AðL €Nr   c                  ó4   — t          ¦   «         } | €d n| j        S r   )r   rB   ©ra   s    r   rB   rB   ¢   s   € ÝÑÔ€GØ�?ˆ4ˆ4¨Ô(@Ð@r   c                  ó¢   — t          ¦   «         } | �<|                      ¦   «          | j                             d¦  «        rt	          ¦   «         ‚dS dS )zCState-only callback for model loops that do not emit step progress.Nr   )r   rY   r1   r   r	   rˆ   s    r   Úinference_checkpointrŠ   §   sY   € åÑÔ€GØÐØ×ÒÑÔÐØŒ;�?Š?˜7Ñ#Ô#ð 	+Ý(Ñ*Ô*Ð*ð Ðð	+ð 	+r   c              #   ó&  K  — t          ¦   «         €dV — dS g }	 | D ]+}|                     |                     d„ ¦  «        ¦  «         Œ,dV — t          ¦   «          |D ]}|                     ¦   «          ŒdS # |D ]}|                     ¦   «          Œw xY w)zLUse scoped callbacks for third-party encoders without an interrupt argument.Nc                  ó   — t          ¦   «         S r   )rŠ   )rj   s    r   r=   z$checkpoint_modules.<locals>.<lambda>¹   s   € ÕG[ÑG]ÔG]€ r   )r   r+   Úregister_forward_pre_hookrŠ   Úremove)ÚmodulesÚhandlesÚmoduleÚhandles       r   Úcheckpoint_modulesr“   °   sÇ   è è € õ ÑÔÐ ØˆˆˆØˆØ€GðØð 	`ð 	`ˆFØ�NŠN˜6×;Ò;Ð<]Ð<]Ñ^Ô^Ñ_Ô_Ð_Ð_ØˆˆˆÝÑÔÐàð 	ð 	ˆFØ�MŠM‰OŒOˆOˆOð	ð 	ø�gð 	ð 	ˆFØ�MŠM‰OŒOˆOˆOð	øøøs   šA A5 Á5B)Nr   )r   Úcontextvarsr   Ú
contextlibr   Ú	functoolsr   r…   r-   Úshared.utils.generation_stater   Úshared.utils.process_locksr   Ú	Exceptionr	   r   r   r9   r;   rb   r†   rB   rŠ   r“   r   r   r   ú<module>rš      si  ðà YÐ Yà "Ð "Ð "Ð "Ð "Ð "Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€à >Ð >Ð >Ð >Ð >Ð >Ø /Ð /Ð /Ð /Ð /Ð /ð?ð ?ð ?ð ?ð ?˜Yñ ?ô ?ð ?ð ˆ:�o¨tÐ4Ñ4Ô4€ðð ð ð$ð $ð $ð $ðN+8ð +8ð +8ð +8ð +8ñ +8ô +8ð +8ðZ"ð "ð "ð+ð +ð +ð\Að Að Að
+ð +ð +ð ðð ñ „ðð ð r   