+
    UV-j€  ã                  óF  € ^ RI Ht ^ RIt^ RIHt ^ RIHtHtHt ^ RI	H
t ^ RIHt ^ RIHt ^ RIHt ^RIHt ^RIHtHt ^@tR	tR
t]P6                  ! ]P8                  ! 4       4      t]3R R llt]P<                  RR R ll4       t] ! R R4      4       t  ! R R4      t!R# )é    )ÚannotationsN)Ú	dataclass)ÚAnyÚListÚOptional)Útree_reduce)Úmaybe_quantize_kv_cache)Úcache)ÚTurboQuantKVCacheÚturboquant_enabledÚuniformiˆ  c               ó   € V ^8„  d   QhRR/# )é   Úkv_quant_schemeÚstr© )Úformats   "Úh/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/generate/common.pyÚ__annotate__r      s   € ÷ 1ñ 1ð
 ñ1ó    c                ó  aaa€ Sf   R # \        SV4      '       dU   VVV3R lo\        V 4      ^8”  d   \        V 4      ^,
          MRp\        V 4       F  w  rgWe8X  d   K  S! V4      W&   K  	  R # \        V SV\	        S4      R7       R # )Nc                óä  <€ \        V \        4      '       d   V # \        V \        P                  4      '       d   V # \        V \        P                  4      '       dI   V P
                  ^ 8X  d   \        SR7      # V P
                  S8  d   V # \        P                  ! V SR7      # \        V \        P                  4      '       d*   V P                   Uu. uF  pS! V4      NK  	  upV n        V # \        V \        4      '       d!   \        V 4       F  w  r!S! V4      W&   K  	  V # \        V \        4      '       d3   \        ;QJ d    . V3R lV  4       F  NK  	  5# ! V3R lV  4       4      # V # u upi )r   )Úbitsc              3  ó4   <"  € T F  pS! V4      x € K  	  R # 5i©Nr   )Ú.0Ú	sub_entryÚquantize_entrys   & €r   Ú	<genexpr>ÚBmaybe_quantize_kv_cache.<locals>.quantize_entry.<locals>.<genexpr>7   s   øé € ÐNÉ¸9™^¨I×6Ð6Ëùs   ƒ)Ú
isinstancer   r
   ÚRotatingKVCacheÚKVCacheÚoffsetÚ
from_cacheÚ	CacheListÚcachesÚlistÚ	enumerateÚtuple)Úentryr   ÚiÚkv_bitsr   Úquantized_kv_starts   &  €€€r   r   Ú/maybe_quantize_kv_cache.<locals>.quantize_entry#   s  ø€ Ü˜%Ô!2×3Ò3Ø�Ü˜%¤×!6Ñ!6×7Ò7Ø�Ü˜%¤§¡×/Ò/Ø—<‘< 1Ô$ä,°'Ô:Ð:Ø—<‘<Ð"4Ô4Ø �LÜ(×3Ò3°EÀÔHÐHÜ˜%¤§¡×1Ò1ØKPÏ<Ê<ÓXÉ<¸i¡¨yÖ 9É<ÑX�”Ø�Ü˜%¤×&Ò&Ü$-¨eÖ$4‘L�AÙ-¨iÓ8�E“Hñ %5à�Ü˜%¤×'Ò'ß”uÔNÉÓN—uÐN�uÔNÉÓNÓNÐNØˆLùò  Ys   ÃE-)r.   Úkv_group_sizer-   éÿÿÿÿ)r   Úlenr)   Úmlx_maybe_quantize_kv_cacheÚint)	Úprompt_cacher.   r0   r-   r   Úlast_idxÚindexÚlayer_cacher   s	   &f&f&   @r   r	   r	      sƒ   ú€ ð ‚Ùä˜' ?×3Ò3÷	ô2 -0°Ó,=ÀÔ,A”3�|Ó$ qÖ(ÀrˆÜ"+¨LÖ"9ÑˆEØÔ ÙÙ"0°Ó"=ˆLÓñ #:ñ 	äØØ-Ø#Ü�G“÷	r   c               ó    € V ^8„  d   QhRRRR/# )r   Úmodelz	nn.ModuleÚstreamszOptional[List[mx.Stream]]r   )r   s   "r   r   r   L   s   € ÷ &ñ &�yð &Ð+Dñ &r   c              #  ó–  "  € \         P                  P                  4       '       g   Rx € R# \        R V ^ 4      p\         P                  ! 4       R,          pVRV,          8”  d%   VR,          pVR,          p\        RV RV R24       \         P                  ! V4      p Rx € Ve!   V F  p\         P                  ! V4       K  	  M\         P                  ! 4        \         P                  ! V4       R#   Te!   T F  p\         P                  ! T4       K  	  M\         P                  ! 4        \         P                  ! T4       i ; i5i)	z6Temporarily set the wired memory limit for generation.Nc                ój   € \        V\        P                  4      '       d   WP                  ,           # T # r   )r!   ÚmxÚarrayÚnbytes)ÚaccÚxs   &&r   Ú<lambda>Úwired_limit.<locals>.<lambda>S   s"   € ¬°A´r·x±x×)@Ò)@�sŸX™X•~ÐIÀcÐIr   Ú max_recommended_working_set_sizegÍÌÌÌÌÌì?z0[WARNING] Generating with a model that requires z6 MB which is close to the maximum recommended size of zƒ MB. This can be slow. See the documentation for possible work-arounds: https://github.com/ml-explore/mlx-lm/tree/main#large-modelsi   )r>   ÚmetalÚis_availabler   Údevice_infoÚprintÚset_wired_limitÚsynchronize)r:   r;   Úmodel_bytesÚmax_rec_sizeÚmodel_mbÚ
max_rec_mbÚ	old_limitÚstreams   &&      r   Úwired_limitrR   K   s  é € ô �8‰8× Ñ ×"Ò"ÛÙäÙIÈ5ÐRSó€Kô —>’>Ó#Ð$FÕG€LØ�S˜<Õ'Ô'Ø %Õ'ˆØ! UÕ*ˆ
ÜØ>¸x¸jð IAØAKÀð MJðJô	
ô ×"Ò" <Ó0€Ið&ÛàÒÛ!�Ü—’˜vÖ&ò "ô �NŠNÔÜ
×Ò˜9Ö%øð ÒÛ!�Ü—’˜vÖ&ò "ô �NŠNÔÜ
×Ò˜9Õ%üs    ‚BE	Â C5 Â$AE	Ã5AEÅE	c                  óZ  € ] tR t^kt$ RtR]R&   RtR]R&   RtR]R&   ^ tR	]R
&   ^ t	R	]R&   ^ t
R	]R&   RtR]R&   RtR]R&   RtR]R&   ^ tR	]R&   RtR]R&   ^ tR	]R&   ^ tR	]R&   ^ tR	]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   RtR]R&   ^ tR	]R&   ^ tR	]R &   ^ tR	]R!&   RtR]R"&   R#tR# )$ÚGenerationResultÚ r   ÚtextNzOptional[int]ÚtokenzOptional[List[float]]Úlogprobsr4   Úprompt_tokensÚgeneration_tokensÚtotal_tokensg        ÚfloatÚ
prompt_tpsÚgeneration_tpsÚpeak_memoryÚcached_tokenszOptional[str]Úfinish_reasonÚdiffusion_canvas_tokensÚdiffusion_denoising_stepsÚdiffusion_work_tokensÚdiffusion_canvas_tpsÚdiffusion_work_tpsFÚboolÚis_draftÚ
draft_textÚtext_already_printedÚdiffusion_stepÚdiffusion_total_stepsÚdiffusion_canvas_indexÚdiffusion_block_completer   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rV   Ú__annotations__rW   rX   rY   rZ   r[   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rh   ri   rj   rk   rl   rm   rn   Ú__static_attributes__r   r   r   rT   rT   k   sò   ‡ à€Dˆ#ƒNØ€Eˆ=ÓØ&*€HÐ#Ó*Ø€M�3ÓØÐ�sÓØ€L�#ÓØ€J�ÓØ€N�EÓØ€K�ÓØ€M�3ÓØ#'€M�=Ó'Ø#$Ð˜SÓ$Ø%&Ð˜sÓ&Ø!"Ð˜3Ó"Ø"%Ð˜%Ó%Ø #Ð˜Ó#Ø€HˆdÓØ€J�ÓØ!&Ð˜$Ó&Ø€N�CÓØ!"Ð˜3Ó"Ø"#Ð˜CÓ#Ø%*Ð˜d×*r   rT   c                  ó8   € ] tR t^†tRtR tR R ltR R ltRtR# )	ÚPromptCacheStatez;Holds KV cache and token history across conversation turns.c                	ó"   € R V n         R V n        R # r   ©r
   Ú	token_ids)Úselfs   &r   Ú__init__ÚPromptCacheState.__init__‰   s   € Ø*.ˆŒ
Ø.2ˆŽr   c               ó    € V ^8„  d   QhRRRR/# )r   Únew_idsr(   Úreturnr4   r   )r   s   "r   r   ÚPromptCacheState.__annotate__�   s   € ÷ ñ ¨$ð °3ñ r   c                óÞ   € V P                   f   ^ # \        \        V P                   4      \        V4      4      p\        V4       F%  pV P                   V,          W,          8w  g   K#  Vu # 	  V# )z>Return the number of leading tokens that match the cached ids.)ry   Úminr2   Úrange)rz   r~   Úmax_lenr,   s   &&  r   Úfind_prefix_lengthÚ#PromptCacheState.find_prefix_length�   sU   € à�>‰>Ò!ÙÜ”c˜$Ÿ.™.Ó)¬3¨w«<Ó8ˆÜ�w–ˆAØ�~‰~˜aÕ  G¥JÖ.Ø’ñ  ð ˆr   c               ó    € V ^8„  d   QhRRRR/# )r   ry   r(   Úkv_cacher   )r   s   "r   r   r€   —   s   € ÷ ñ  ð °ñ r   c                ó2   € \        V4      V n        W n        R# )z9Store the full token sequence and corresponding KV cache.N)r(   ry   r
   )rz   ry   rˆ   s   &&&r   ÚupdateÚPromptCacheState.update—   s   € ä˜i›ˆŒØŽ
r   rx   N)	ro   rp   rq   rr   Ú__doc__r{   r…   rŠ   rt   r   r   r   rv   rv   †   s   † ÙEò3õ÷ñ r   rv   r   )"Ú
__future__r   Ú
contextlibÚdataclassesr   Útypingr   r   r   Úmlx.coreÚcorer>   Úmlx.nnÚnnÚ	mlx.utilsr   Úmlx_lm.generater	   r3   Úmodelsr
   Ú
turboquantr   r   ÚDEFAULT_KV_GROUP_SIZEÚDEFAULT_KV_QUANT_SCHEMEÚDEFAULT_QUANTIZED_KV_STARTÚnew_thread_local_streamÚdefault_deviceÚgeneration_streamÚcontextmanagerrR   rT   rv   r   r   r   Ú<module>r       sœ   ðÝ "ã Ý !ß &Ñ &å Ý Ý !Ý Rå ß >àÐ Ø#Ð Ø!Ð ð ×.Ò.¨r×/@Ò/@Ó/BÓCÐ ð 3÷1ðh ×Ñö&ó ð&ð> ÷+ð +ó ð+÷4ó r   