+
    UV-jê+  ã                   óÎ   € ^ RI HtHtHtHtHtHt ^ RIHt	 ^ RI
Ht ^RIHtHtHtHtHt R R ltR R ltRRR	]	P(                  /R
 R lltRRR	]	P(                  RR/R R lltR# )é    )ÚAnyÚCallableÚ	GeneratorÚListÚOptionalÚTupleN)Ú_dflash_block_totalÚ_record_speculative_roundÚ_speculative_walkÚ_speculative_walk_batchÚgeneration_streamc                ó\   € V ^8„  d   QhR\         P                  R\        R\        R\        /# )é   Údraft_modelÚrequested_block_totalÚremaining_budgetÚreturn)ÚnnÚModuleÚint)Úformats   "Úk/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/speculative/dflash.pyÚ__annotate__r      s4   € ÷ 0%ñ 0%Ü—‘ð0%äð0%ô ð0%ô 	ñ	0%ó    c                óÎ  € \        W4      pV^8:  d   V# \        V RR4      '       d   V# \        V RR4      ;'       g    . p\        V RR4      ;'       g    . p\        VRR VRR 4       UUu. uF-  w  rg\        V4      ^ 8”  g   K  \	        V4      \        V4      3NK/  	  pppV'       g   V# \        V\        ^VR,          ^,          ^,           4      4      p	\        V^4      p
\        R V 4       4      p\        R V 4       4      pWË,          pV\        V4      ,          pVR8  g   VR	8  d@   V	^8¼  d   \        V
\        W9^,          4      4      # \        V
\        W9^,
          4      4      # VR
8  d   \        V
\        W9^,
          4      4      # \        R V 4       4      pV\        V4      ,          pVR8¼  d   VR8¼  d   \        W9^,           4      # \        W94      # u uppi )a4  Choose the next DFlash verify block size from recent acceptance.

DFlash checkpoints advertise a trained block size, usually 16. Treat that
as the ceiling and back off quickly when deeper positions are mostly
rejected. When acceptance is strong at the current depth, grow back toward
the configured ceiling.
Úprefer_requested_block_sizeFÚaccept_lensNÚ
draft_lensc              3   ó*   "  € T F	  w  rVx € K  	  R # 5i©N© )Ú.0Ú_Úds   &  r   Ú	<genexpr>Ú*_dflash_next_block_size.<locals>.<genexpr>-   s   é € Ð'¡™˜•!£ùó   ‚c              3   ó*   "  € T F	  w  rVx € K  	  R # 5ir    r!   )r"   Úar#   s   &  r   r%   r&   .   s   é € Ð(¡™˜•1£ùr'   g333333Ó?g       @g      à?c              3   ó:   "  € T F  w  rW8¼  g   K  ^x € K  	  R# 5i)é   Nr!   )r"   r)   r$   s   &  r   r%   r&   :   s   é € Ð3¡&™$˜!¨A©F—A’A£&ùs   ‚
‘
g333333ë?g      è?iøÿÿÿéÿÿÿÿ)ÚminÚgetattrÚzipr   ÚfloatÚmaxÚsumÚlen)r   r   r   Úblock_totalr   r   r)   r$   ÚrecentÚcurrentÚ	min_totalÚdraftedÚacceptedÚaccept_rateÚmean_acceptÚ	full_hitsÚfull_hit_rates   &&&              r   Ú_dflash_next_block_sizer>      sÊ  € ô Ð+Ó>€KØ�aÔØÐÜˆ{Ð9¸5×AÒAØÐä˜+ }°dÓ;×AÐA¸r€KÜ˜ l°DÓ9×?Ð?¸R€Jô ˜ B CÐ(¨*°R°S¨/Ô:ôá:‰DˆAÜˆq‹6�A‰:ô 	Œˆq‹”3�q“6ÓÙ:ð ñ ÷
 ØÐä�+œs 1 f¨R¥j°¥m°aÕ&7Ó8Ó9€GÜ�K Ó#€IÜÑ'¡Ó'Ó'€GÜÑ(¡Ó(Ó(€HØÕ$€KØœS ›[Õ(€Kà�TÔ˜[¨3Ô.Ø�aŒ<Ü�y¤# k¸aµ<Ó"@ÓAÐAÜ�9œc +¸­{Ó;Ó<Ð<à�TÔÜ�9œc +¸­{Ó;Ó<Ð<äÑ3¡&Ó3Ó3€IØ¤ F£Õ+€MØ�dÔ˜}°Ô4Ü�;¨!¥Ó,Ð,äˆ{Ó$Ð$ùó9s   Á-G!ÂG!c                ó¦   € V ^8„  d   QhR\         P                  R\        \        \        ,          ,          R\        \         P                  ,          /# )r   Úhidden_fullÚnew_tokens_listr   )ÚmxÚarrayr   r   )r   s   "r   r   r   B   s8   € ÷ ñ Ü—‘ðÜ,0´´cµ­Oðä	Œ"�(‰(…^ñr   c           
      ó†   € \        V4       UUu. uF$  w  r#WV^,           1R\        V4      1R3,          NK&  	  upp# u uppi )r+   NºNNN)Ú	enumerater3   )r@   rA   ÚiÚ
new_tokenss   &&  r   Ú!_dflash_committed_hidden_segmentsrI   B   sO   € ô
 ' Ô7ôá7‰MˆAð 	˜˜A��IÐ0¤ Z£Ð0°!Ð3×4Ð4Ù7òð ùó s   �*=Údraft_block_sizeÚtoken_dtypec                óŽ  € V ^8„  d   QhR\         P                  R\         P                  R\        \        ,          R\        P
                  R\        R\        R\        \        P
                  .\        P
                  3,          R\        \        ,          R	\        P                  R
\        \        \        R3,          RR3,          /
# )r   Úmodelr   Úprompt_cacheÚhiddenÚfirst_bonusÚ
max_tokensÚsamplerrJ   rK   r   N)r   r   r   r   rB   rC   r   r   r   ÚDtyper   r   )r   s   "r   r   r   K   s¹   € ÷ Uñ UÜ�9‰9ðUä—‘ðUô ”s•)ðUô �H‰Hð	Uô ðUô ðUô ”r—x‘x�j¤"§(¡(Ð*Õ+ðUô œs•mðUô —‘ðUô Œu”S˜$�YÕ  tÐ+Õ,ñUr   c          	   #  óŽ  "  € \        V R4      '       d   V P                  MT p	\        V	R4      '       g"   \        \        V	4      P                   R24      h\        VP                  P                  4      p
\        W4      pVP                  V 4      pTp^pWå8  Ed   \        VVW^,
          ^,           4      pV^8:  d   R# VP                  WÓWÏWh4      p\        P                  ! V4       \        P                  ! \        4      ;_uu_ 4        \        P                   ! \        P"                  ! V..VR7      V.^R7      pV	! VVV
R7      p\        P                   ! VP$                  R
R7      pV! VP&                  4      pRRR4       \        P                  ! XV4       \)        VVW^,
          4      w  pp\+        VVV^,
          4       V F  pVR3x € V^,          pWå8¼  g   K   R# 	  VV^,
          8  d   VRRV^,           1R3,          pV'       d
   VR
,          MTpVV^,
          8  dJ   \        P                  ! \        4      ;_uu_ 4        V	P-                  VXP.                  VV4       RRR4       VR	,          ^ 8X  g   EKï  \        P0                  ! 4        EK  R#   + '       g   i     EL+; i  + '       g   i     LO; i5i)uÝ   DFlash speculative-decoding **round loop**.

draft â†’ verify â†’ walk â†’ rollback. ``generate_step`` is responsible
for prefill, sampling the first bonus token, and packaging the
captured hidden states into ``hidden``.
Úlanguage_modelÚrollback_speculative_cachezŠ does not implement rollback_speculative_cache. Speculative decoding with a DFlash drafter currently only supports mlx_vlm.models.qwen3_5.©Údtype©Úaxis©ÚcacheÚcapture_layer_idsNrE   é   r,   )ÚhasattrrU   ÚRuntimeErrorÚtypeÚ__name__ÚlistÚconfigÚtarget_layer_idsr	   Úresetr>   Údraft_blockrB   Ú
async_evalÚstreamr   ÚconcatenaterC   Úhidden_statesÚlogitsr   r
   rV   Ú
gdn_statesÚclear_cache)rM   r   rN   rO   rP   rQ   rR   rJ   rK   Úlmre   r4   Údraft_cacheÚbÚemittedÚbsÚdraft_tokensÚverify_inputÚ
verify_outÚtarget_tokensr9   rH   Útoks   &&&&$$$$$              r   Ú_dflash_roundsry   K   sh  é € ô$ ")¨Ð0@×!AÒ!Aˆ×	Ò	Àu€BÜ�2Ð3×4Ò4ÜÜ�B‹x× Ñ Ð!ð "/ð /ó
ð 	
ô ˜K×.Ñ.×?Ñ?Ó@ÐÜ% kÓD€KØ×#Ñ# EÓ*€Kà€AØ€Gà
Õ
Ü$ØØØÕ  1Õ$ó
ˆð
 �Œ7Ùà"×.Ñ.Ø�{¨ó
ˆô 	�Š�lÔ#ä�YŠYÔ(×)Õ)ÜŸ>š>Ü—’˜A˜3˜% {Ô3°\ÐBØôˆLñ ØØ"Ø"2ôˆJô
 —^’^ J×$<Ñ$<À2ÔFˆFÙ# J×$5Ñ$5Ó6ˆM÷ *ô 	�Š�m VÔ,ô  1Ø˜-¨Õ)=ó 
Ñˆ�*ô 	" +¨x¸¸a½Ô@ó ˆCØ�t�)ŠOØ�q�LˆGØÖ$Úñ	 ð �b˜1•fÔØ˜A˜~ ¨A¥˜~¨qÐ0Õ1ˆFß(ˆJ�rŽN¨aˆà�b˜1•fÔÜ—’Ô,×-Õ-Ø×-Ñ-Ø  *×"7Ñ"7¸À2ô÷ .ð
 �S�=˜A×Ü�NŠN×ñi ÷ *×)Ð)ú÷@ .×-üsJ   ‚DKÄ
A2JÅ<A KÇ!/KÈ;KÉJ2É+KÊKÊJ/	Ê)	KÊ2K	Ê=KÚ
stop_checkc                ó  € V ^8„  d   QhR\         P                  R\         P                  R\        \        ,          R\        P
                  R\        P
                  R\        R\        \        P
                  .\        P
                  3,          R\        \        ,          R	\        P                  R
\        \        \        \        .\        3,          ,          R\        \        \        \        \        ,          ,          R3,          RR3,          /# )r   rM   r   rN   rO   rP   rQ   rR   rJ   rK   rz   r   N)r   r   r   r   rB   rC   r   r   r   rS   Úboolr   r   )r   s   "r   r   r   £   så   € ÷ \"ñ \"Ü�9‰9ð\"ä—‘ð\"ô ”s•)ð\"ô �H‰Hð	\"ô —‘ð\"ô ð\"ô ”r—x‘x�j¤"§(¡(Ð*Õ+ð\"ô œs•mð\"ô —‘ð\"ô œ¤3¬ *¬dÐ"2Õ3Õ4ð\"ô Œu”Tœ(¤3�-Õ(¨$Ð.Õ/°°tÐ;Õ<ñ\"r   c             #  ó^  "  € \        V R4      '       d   V P                  MT p
\        V
R4      '       g"   \        \        V
4      P                   R24      hVP
                  ^ ,          p\        VP                  P                  4      p\        W4      pVP                  V 4       \        V4       Uu. uF  qáP                  4       NK  	  ppVP                  4       p^.V,          pR.V,          p\        \        V4      4      p\        V4       Uu. uF  pVVV^,            NK  	  pp\        V4      p\        V4      ^ 8”  Ed   \        \        V4      4       Uu. uF+  p\!        ^VVVV,          ,          ,
          ^,           4      NK-  	  pp\#        W\%        V4      4      pV^8:  d   R# \        V4      p\        V4       Uu. uF  pVVV,          ,          NK  	  pp\&        P(                  ! VVR7      p\&        P*                  ! \        V4       Uu. uFE  pVP-                  \/        VV,          4      VVV,          ,          VVV,          ,          VVV4      NKG  	  up^ R7      p\&        P0                  ! V4       \&        P2                  ! \4        4      ;_uu_ 4        \&        P*                  ! VR,          V.^R7      pV
! VVVR7      p\&        P*                  ! VP6                  RR7      p V! VP8                  4      p!RRR4       \&        P0                  ! X!X 4       \        V4       Uu. uF  pVVVV,          ,          ,
          NK  	  p"p\;        VV!V"4      w  p#p$\%        V#4      p%\&        P(                  ! V#4      p&\=        V V$4      p'\        V4       F9  pVV,          p(V'V,          P
                  ^,          ^ 8”  g   K-  V'V,          VV(&   K;  	  V# F  p)\?        VV)V^,
          4       K  	  V$'       d   \!        R	 V$ 4       4      M^ p*\        V*4       F±  p+R.V,          p,\        V4       F�  pVV,          p(V+\        V$V,          4      8  g   K%  VV(,          '       d   K6  V$V,          V+,          p-V-V,V(&   VV(;;,          ^,          uu&   VV(,          V8¼  d   R
VV(&   V	f   Ky  V	! V(V-4      '       g   KŠ  R
VV(&   K‘  	  V,R3x € K³  	  \        V4       F0  pVV,          p(V$V,          '       g   K  V$V,          R,          VV(&   K2  	  V%V^,
          8  dJ   \&        P2                  ! \4        4      ;_uu_ 4        V
PA                  VXPB                  V&V4       RRR4       \        V4       Uu. uF  pVVV,          ,          '       d   K  VNK  	  p.p\        V.4      V8  d   \        V.4      ^ 8X  d   R# \&        P(                  ! V.\&        PD                  R7      p/V F(  p0\        V0R4      '       g   K  V0PG                  V/4       K*  	  V. Uu. uF  pVV,          NK  	  pp\        V4      p1V1R,          VR,          8”  d   \&        PH                  ! 4        T1pEK)  R# u upi u upi u upi u upi u upi   + '       g   i     EL€; iu upi   + '       g   i     EL?; iu upi u upi 5i)aÿ  Batch DFlash speculative-decoding round loop (B > 1).

Supports continuous batching: when a sequence finishes (EOS or
max_tokens), it is filtered out of the target caches and the
drafter cache is reinitialized for the new batch size.

``stop_check(seq_idx, token_id) -> bool`` is an optional callback
that returns True to stop a sequence (e.g. EOS detection).

Yields ``(tokens_list, None)`` where ``tokens_list[i]`` is the
token for sequence ``i`` (or ``None`` if that sequence has nothing
to emit this step).
rU   rV   z/ does not implement rollback_speculative_cache.FrW   rY   Nr[   c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir    )r3   )r"   Únts   & r   r%   Ú'_dflash_rounds_batch.<locals>.<genexpr>  s   é € Ð8© "”c˜"—g�g«ùs   ‚TÚfilterr^   )rE   Nr,   )%r_   rU   r`   ra   rb   Úshaperc   rd   re   r	   rf   ÚrangeÚ
make_cacheÚtolistr2   r3   r1   r>   r-   rB   rC   rj   rg   r   rh   ri   r   rk   rl   r   rI   r
   rV   rm   Úint32r�   rn   )2rM   r   rN   rO   rP   rQ   rR   rJ   rK   rz   ro   ÚBre   r4   r#   Údraft_cachesrq   rr   ÚfinishedÚ
active_idxrG   Úhidden_by_origÚtotal_emittedÚjÚ	remainingrs   Ún_activeÚb_activeÚb_arrrt   ru   rv   r@   rw   ÚbudgetsÚaccepted_listrA   Úmin_acceptedÚaccepted_arrÚhidden_segmentsÚorigr)   Úmax_newÚposÚ
tokens_outrx   Ú
keep_slotsÚkeep_mxÚcÚ	new_totals2   &&&&$$$$$$                                        r   Ú_dflash_rounds_batchrŸ   £   sÅ  é € ô4 ")¨Ð0@×!AÒ!Aˆ×	Ò	Àu€BÜ�2Ð3×4Ò4ÜÜ�B‹x× Ñ Ð!Ð!TÐTó
ð 	
ð 	×Ñ˜!Õ€AÜ˜K×.Ñ.×?Ñ?Ó@ÐÜ% kÓD€KØ×Ñ�eÔÜ6;¸A´hÓ?±h°×*Ñ*Ö,±h€LÐ?ð 	×ÑÓ€AØˆc�A�g€GØˆw˜�{€HÜ”e˜A“h“€JÜ16°q´Ó:±¨A�f˜Q  Q¥Ó'±€NÐ:ä˜“L€Mä
ˆj‹/˜AÕ
ô œ3˜z›?Ô+ó
á+�ô ��: ¨
°1­Õ 6Õ6¸Õ:Ö;Ù+ð 	ð 
ô % [¼sÀ9»~ÓNˆØ�Œ7Ùä�z“?ˆÜ.3°H¬oÓ>©o¨�A�j •m×$Ð$©oˆÐ>Ü—’˜¨Ô5ˆô
 —~’~ô ˜xœó
ñ )�Að ×'Ñ'Ü˜ �Ó$Ø" :¨a¥=Õ1Ø  ¨A¥Õ/ØØØöñ )ñ
ð ô
ˆô 	�Š�lÔ#ô �YŠYÔ(×)Õ)ÜŸ>š>¨5°­>¸<Ð*HÈqÔQˆLÙØØ"Ø"2ôˆJô
 Ÿ.š.¨×)AÑ)AÈÔKˆKÙ# J×$5Ñ$5Ó6ˆM÷ *ô 	�Š�m [Ô1ô AFÀhÄÓPÁ¸1�: ¨
°1­Õ 6×6Ð6ÁˆÐPÜ)@Ø˜-¨ó*
Ñ&ˆ�ô ˜=Ó)ˆÜ—x’x Ó.ˆä;Ø˜ó
ˆô �x–ˆAØ˜a•=ˆDØ˜qÕ!×'Ñ'¨Õ*¨QÖ.Ø'6°qÕ'9�˜tÓ$ñ !ó
 ˆAÜ% k°1°b¸1µfÖ=ñ ÷ =L”#Ñ8©Ó8Ô8ÐQRˆÜ˜–>ˆCØ/3¨f°q­jˆJÜ˜8–_�Ø! !•}�Øœ˜_¨QÕ/Ó0Ö0¸À$¿¾Ø)¨!Õ,¨SÕ1�CØ'*�J˜tÑ$Ø˜D—M QÕ&“MØ˜t•}¨
Ô2Ø)-˜ ™Ø!Ô-±*¸TÀ3×2GÔ2GØ)-˜ ›ñ %ð ˜dÐ"Ô"ñ "ô �x–ˆAØ˜a•=ˆDØ˜q×!Ö!Ø)¨!Õ,¨RÕ0��$“ñ !ð
 ˜"˜q�&Ô Ü—’Ô,×-Õ-Ø×-Ñ-Ø  *×"7Ñ"7¸Àrô÷ .ô "' x¤ÓP¡˜A¸ÀÈAÅ×8OÑ8O—a�a¡ˆ
ÐPÜˆz‹?˜XÔ%Ü�:‹ !Ô#Ùä—h’h˜z´·±Ô:ˆGÛ!�Ü˜1˜h×'Ô'Ø—H‘H˜WÖ%ñ "ñ 2<Ó<±¨A˜* QŸ-˜-±ˆJÐ<ä˜“Lˆ	Ø˜Õ˜m¨sÕ2Ô2Ü�NŠNÔØ!‹ñY ùò @ùò ;ùò

ùò ?ùò
÷  *×)Ð)üò Q÷T .×-Ð-üò Qùò =ùsÕ   ‚B/Z-Â1YÃ	AZ-ÄY"Ä%4Z-Å1Y'Æ
8Z-ÇY,Ç7Z-ÈAY1ÉAZ-ÊA!Y6Ë?,Z-Ì+ Z
ÍA2Z-Ï4Z-Ï7AZ-ÑZ-Ñ$>Z-Ò'Z-Ò86Z-Ó3AZ-Ô:ZÕZ-Õ.Z#ÖZ#ÖAZ-×4Z-ØZ(ØAZ-Ù6Z	ÚZ-ÚZ 	ÚZ-)Útypingr   r   r   r   r   r   Úmlx.coreÚcorerB   Úmlx.nnr   Úcommonr	   r
   r   r   r   r>   rI   r†   ry   rŸ   r!   r   r   Ú<module>r¥      sx   ðß B× Bå Ý ÷õ õ0%õfðUð '+ðUð ŸH™H÷Uðp\"ð '+ð\"ð ŸH™Hð\"ð 8<÷\"ñ \"r   