+
    TV-jL  ã                   ó0  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
 ^ RIHtHtHt ^ RIt^ RIHt ^ RIHt ^ RI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! ^RI"H#t# Rt$R t%R t&R t'R t(]! R4       ! R R]4      4       t)R t*R# )z9
Adapted from a PyTorch implementation by David Grangier
N)Úversion)ÚPath)ÚAnyÚCallableÚOptional)ÚLM)Úregister_model)Útqdm)Úbatch_generate)Úmake_prompt_cache)Úmake_sampler)Úloadi    c                ó¸   € \        V 4      pV Uu. uF  q0P                  V4      NK  	  ppV Uu. uF  qU^ 8  d   TMTNK  	  ppV R\        V4       # u upi u upi )zFLimit a string <s> to the first occurrence of any substring in untils.N)ÚlenÚfindÚmin)ÚsÚuntilsÚlÚuÚfÚxs   &&    Ú`/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_lm/evaluate.pyÚ_rstrip_untilr   !   sZ   € äˆA‹€AÙ"Ó#™F�q�‰�Ž™F€AÐ#Ù$%Ó&¡A˜q�!Œe‰˜Ò	¡A€AÐ&ØˆXŒs�1‹vˆ;Ðùò 	$ùÚ&s
   �A¯Ac                ó^   € V P                  V4      ;pR8w  d   W\        V4      ,           R # V # )zHTruncate the prefix of the string after the first occurrence of pattern.Néÿÿÿÿ)r   r   )r   ÚpatternÚidxs   && r   Ú_lstripr   )   s1   € à�v‰v�g‹Ðˆ 2Ô%Ø”s˜7“|Õ#Ð%Ð&Ð&Ø€Hó    c                 óŠ  € \         P                  ! V  Uu. uF  p\        V4      NK  	  up4      pVP                  4       p\         P                  ! V  Uu. uF,  p\         P
                  ! V^ V\        V4      ,
          34      NK.  	  up^ R7      p\        P                  ! V4      \        P                  ! V4      3# u upi u upi )é    ©Úaxis)ÚnpÚarrayr   ÚmaxÚstackÚpadÚmx)Úinputsr   ÚlengthsÚmaxlenÚpaddeds   &    r   Ú_pad_inputsr.   0   s’   € Ü�hŠh©Ó/© 1œ˜Až©Ñ/Ó0€GØ�[‰[‹]€FÜ�XŠXÙ28Ó9±&¨QŒ�Š��A�v¤ A£•Ð'Ö	(±&Ñ9Øô€Fô �8Š8�FÓœRŸXšX gÓ.Ð.Ð.ùò 0ùò 	:s   •B;Á2C c                  ó   a € RR V 3R lllpV# )Tc                ó$   € V ^8„  d   QhR\         /# ©é   Úreturn©Ústr)Úformats   "r   Ú__annotate__Ú&chat_template_fn.<locals>.__annotate__;   s   € ÷ 
ñ 
Ìsñ 
r   c           	      óT   <€ V P                   P                  ! V3R RRVRV'       * /SB # )ÚtokenizeFÚadd_generation_promptÚcontinue_final_message)Ú	tokenizerÚapply_chat_template)ÚselfÚchat_historyr;   Úextra_kwargss   &&&€r   r>   Ú-chat_template_fn.<locals>.apply_chat_template;   sF   ø€ Ø�~‰~×1Ò1Øñ
àð
ð #8ð
ð (=Ô#<ð	
ð
 ñ
ð 	
r   )T© )rA   r>   s   l r   Úchat_template_fnrD   :   s   ø€ ÷
ò 
ð Ðr   Úmlxlmc                   óÔ   a a€ ] tR t^Gt o]! 4       tRV3R lV 3R llltRV3R lR lltRV3R lR lltR t	]
V3R lR	 l4       tV3R
 lR ltV3R lR ltV3R lR ltRtVtV ;t# )ÚMLXLMc                ó²   <€ V ^8„  d   QhRS[ RS[S[,          RS[RS[S[,          RS[RS[S[S[P                  .S[P                  3,          ,          RR/# )	r2   Úpath_or_hf_repoÚ
max_tokensÚ
batch_sizeÚuse_chat_templateÚtrust_remote_codeÚsamplerr3   N)r5   r   ÚintÚboolr   r)   r%   )r6   Ú__classdict__s   "€r   r7   ÚMLXLM.__annotate__L   sr   ø€ ÷  ñ  áð ñ ™S•Mð ñ ð	 ñ
 $¡D�>ð ñ  ð ñ ™(¡B§H¡H :©r¯x©xÐ#7Õ8Õ9ð ð 
ñ r   c                óä   <€ \         SV `  4        R V'       d   RMR/p\        WR7      w  V n        V n        W n        W0n        W@n        Vf   V P                  P                  RJV n        W`n	        R# )rM   TN)Útokenizer_config)
ÚsuperÚ__init__r   Ú_modelr=   Ú_max_tokensÚ_batch_sizerL   Úchat_templateÚ_sampler)	r?   rI   rJ   rK   rL   rM   rN   rT   Ú	__class__s	   &&&&&&& €r   rV   ÚMLXLM.__init__L   sm   ø€ ô 	‰ÑÔØ/×9J±ÐPTÐUÐÜ&*Øô'
Ñ#ˆŒ�T”^ð &ÔØ%ÔØ!2ÔØÒ$Ø%)§^¡^×%AÑ%AÈÐ%MˆDÔ"ØŽr   c                ó    <€ V ^8„  d   QhRS[ /# )r2   Ú	step_size)rO   )r6   rQ   s   "€r   r7   rR   a   s   ø€ ÷ ñ ±ñ r   c                ó  € \         P                  ! V4      R ,          p\        V P                  4      p\	        ^ VP
                  ^,          V4       Fk  pV P                  VRWDV,           13,          VR7      p\         P                  ! V Uu. uF  qfP                  NK  	  up4       \         P                  ! 4        Km  	  \        P                  ! XR,          P                  \         P                  4      4      pWs3# u upi )NºNNN©Úcache)ra   r   ra   )r)   r%   r   rW   ÚrangeÚshapeÚevalÚstateÚclear_cacheÚnnÚlog_softmaxÚastypeÚfloat32)r?   Úpromptr_   rc   ÚiÚlogitsÚcÚlogprobss   &&&     r   Ú_process_promptÚMLXLM._process_prompta   s¹   € Ü—’˜&Ó! $Õ'ˆÜ! $§+¡+Ó.ˆÜ�q˜&Ÿ,™, q�/¨9Ö5ˆAØ—[‘[ ¨¨1°9­}Ð+<Ð(<Õ!=ÀU�[ÓKˆFÜ�GŠG¡eÓ,¡e —W”W¡eÑ,Ô-Ü�NŠNÖñ 6ô —>’> &¨Õ"2×"9Ñ"9¼"¿*¹*Ó"EÓFˆØˆÐùò -s   ÂC=
c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )r2   rc   r_   )r   r   rO   )r6   rQ   s   "€r   r7   rR   k   s   ø€ ÷ *ñ *¡x±¥}ð *Éñ *r   c           	     ó  € \        V4      w  rVR RR13,          VR,          rQT;'       g    \        V P                  4      p^ p. . r‡\        ^ VP                  ^,          V4       EFl  p	VRW™V,           13,          p
V
P                  ^,          pV P                  W¢R7      p\
        P                  ! VP                  \        P                  4      4      p\        P                  ! WÕRW™V,           1\        P                  3,          RR7      R,          pVRW™V,           13,          \        P                  ! VRR7      8H  p\        P                  ! \        P                  ! WkV,           4      VR	,          8  VR4      p\        P                  ! Wï4       \        P                   ! 4        VP#                  V4       VP#                  V4       Wk,          pEKo  	  \        P$                  ! V^R7      p\        P$                  ! V^R7      pWtV3# )
.Nra   rb   r"   Fr   ).:é   NN).r!   ©ra   N)r.   r   rW   rd   re   ri   rj   rk   r)   rl   Útake_along_axisÚnewaxisÚargmaxÚwhereÚarangerf   rh   ÚappendÚconcatenate)r?   r*   rc   r_   r+   ÚtargetsÚoffsetÚscoresÚ	is_greedyrn   ÚinpÚTro   Ú	log_probsÚscoreÚigs   &&&&            r   Ú	_score_fnÚMLXLM._score_fnk   sœ  € Ü% fÓ-‰ˆØ   c r c Õ*¨F°7­O�à×7Ð7Ô*¨4¯;©;Ó7ˆØˆØ �	Ü�q˜&Ÿ,™, q�/¨9×5ˆAØ˜˜A I¥Ð-Ð-Õ.ˆCØ—	‘	˜!•ˆAà—[‘[ �[Ó2ˆFÜŸš v§}¡}´R·Z±ZÓ'@ÓAˆIä×&Ò&Ø 1 a¨i­-Ð&7¼¿¹Ð#CÕDÈ2ôàõˆEð ˜˜A I¥Ð-Ð-Õ.´"·)²)¸FÈÔ2LÑLˆBÜ—’œ"Ÿ)š) F°­JÓ7¸'À'Õ:JÑJÈBÐPUÓVˆBä�GŠG�EÔÜ�NŠNÔà×Ñ˜RÔ Ø�M‰M˜%Ô Ø�K‹Fñ' 6ô* —’ ¨QÔ/ˆÜ—N’N 9°1Ô5ˆ	à 	Ð)Ð)r   c           
     ó”   € V Uu. uF7  p\        V P                  P                  W P                  '       * R 7      4      NK9  	  up# u upi )©Úadd_special_tokens)Útupler=   ÚencoderL   )r?   ÚtextsÚts   && r   Ú	_tokenizeÚMLXLM._tokenizeŒ   sP   € ñ
 ó	
ñ �ô Ø—‘×%Ñ% a×@VÑ@VÔ<VÐ%ÓWöñ ñ	
ð 	
ùò 
s   …=Ac                ó    <€ V ^8„  d   QhRS[ /# r1   r4   )r6   rQ   s   "€r   r7   rR   •   s   ø€ ÷ >ñ >¡ñ >r   c                óN   € V P                   P                  P                  R R4      # )Ú/Ú__)r=   Úname_or_pathÚreplace)r?   s   &r   Útokenizer_nameÚMLXLM.tokenizer_name”   s   € à�~‰~×*Ñ*×2Ñ2°3¸Ó=Ð=r   c                óF   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          /# r1   )Úlistr�   ÚfloatrP   )r6   rQ   s   "€r   r7   rR   ˜   s%   ø€ ÷ n>ñ n>©©e±E¹4°KÕ.@Õ)Añ n>r   c                óð  € \         P                  ! R\        V4      ,          4       \        P                  P                  4       p\        P                  ! \        4      p\        V4       F?  w  rEW5P                  ^ ,          ,          P                  WEP                  ^,          34       KA  	  \        VP                  4       4      p. p. pVP                  4        F0  p	\        V	!  w  rJVP                  V4       VP                  V
4       K2  	  WbP                  4       RVP!                  4       1,          pWrP                  4       RVP!                  4       1,          p^ p. . rÜ\#        \        Wg4      \        V4      R7       EF“  w  rïV P%                  V.4      ^ ,          pT P%                  V Uu. uF  pVV,           NK  	  up4      p\'        R V 4       4      pV P(                  ;'       g    \*        p\'        ^ VV,
          ^,
          4      p\        V4      p\'        \        V4      V,
          ^ 4      pV\        V4      V,
          R pV^ 8X  dc   V^,          p\,        P/                  \1        R4      ) .\        V4      ,          4       \2        P/                  R.\        V4      ,          4       EK2  V P5                  V4      w  pp\        P6                  ! V4      P9                  4       pV EF"  pV\        V4      R pVP                  V^ V^ ,          3,          P9                  4       4       VP                  V^ ,          V8H  4       \        V4      ^8X  d   Kn  V P;                  \        P<                  ! V4      R,          \>        P@                  ! V4      R7      w  pppVR;;,          \        PB                  ! V4      P9                  4       ,          uu&   VR;;,          \        PD                  ! V4      P9                  4       ,          uu&   EK%  	  EK–  	  V^ 8”  d"   \         P                  ! RV R	2R
,           4       \        V4      p \        P                  PG                  \        V4      \        PH                  R7      P9                  4       p!V^ .V!\        V4      ,
          ,          ,           pVR.V!\        V4      ,
          ,          ,           p\        P<                  ! V4      p\        P<                  ! V4      p\        P                  PK                  V\        PH                  R7      p\        P                  PK                  V\        PH                  R7      p\        PL                  ! WÍ4       . p"\O        VP!                  4       4       Fh  p#VV#RVP!                  4       1,           U$Uu. uF  p$V$ F  qDNK  	  K  	  p%p$pV%V .V!\        V%4      ,
          ,          ,          p%V"P/                  V%4       Kj  	  \        PP                  ! \        P<                  ! V"4      4      p&VRV  V&,          pVRV  V&,          p\        \        VPS                  4       VPS                  4       4      4      # u upi u upp$i )aŠ  Compute log-likelihood of generating a continuation from a context.
Downstream tasks should attempt to use loglikelihood instead of other
LM calls whenever possible.
:param requests: list[Instance]
    A list of Instance objects, with property `args` which returns a tuple (context, continuation).
    `context: str`
        Context string. Implementations of LM must be able to handle an
        empty context string.
    `continuation: str`
        The continuation over which log likelihood will be calculated. If
        there is a word boundary, the space should be in the continuation.
        For example, context="hello" continuation=" world" is correct.
:return: list[tuple[float, bool]]
    A list of pairs (logprob, isgreedy)
    `logprob: float`
        The log probability of `continuation`.
    `isgreedy`:
        Whether `continuation` would be generated by greedy sampling from `context`.
z&Estimating loglikelihood for %d pairs.N)Útotalc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i©N©r   )Ú.0r   s   & r   Ú	<genexpr>Ú&MLXLM.loglikelihood.<locals>.<genexpr>Å   s   é € Ð!A±.¨Q¤# a§& &³.ùó   ‚ÚinfFrb   zPrefix eliminated for z requests with zcompletion longer than context.©Ústream)Nra   r   )*ÚloggingÚinfor   r)   ÚdistributedÚinitÚcollectionsÚdefaultdictrœ   Ú	enumerateÚargsr}   ÚkeysÚvaluesÚzipÚrankÚsizer	   r‘   r&   rX   ÚDEFAULT_MAX_TOKENSÚ
all_scoresÚextendr�   Úall_is_greedyrr   rz   Úitemrˆ   r%   ÚcopyÚdeepcopyÚsumÚallÚall_maxÚcpuÚ
all_gatherrf   rd   ÚargsortÚtolist)'r?   ÚrequestsÚgroupÚ
group_reqsr   ÚreqÚ	questionsÚ	responsesÚindicesÚvÚrespÚlong_completionsr�   r‚   ÚqÚrsÚprefixÚrÚfull_sequencesÚmax_completed_lrJ   Ú
truncationÚorig_prefix_lÚprefix_lrq   rc   Úmax_idxr   r*   r†   Ú_r‡   Únum_resultsÚ	per_groupÚall_indicesrµ   ÚquestionÚrank_indicesÚinv_sorts'   &&                                     r   ÚloglikelihoodÚMLXLM.loglikelihood˜   s  € ô( 	�ŠÐ=ÄÀHÃÕMÔNä—‘×#Ñ#Ó%ˆô !×,Ò,¬TÓ2ˆ
Ü! (Ö+‰HˆCØ—x‘x •{Õ#×*Ñ*¨C·±¸!µÐ+=Ö>ñ ,ä˜Ÿ™Ó*Ó+ˆ	Øˆ	ØˆØ×"Ñ"Ö$ˆAÜ˜Q™‰IˆCØ�N‰N˜3ÔØ×Ñ˜TÖ"ñ %ð Ÿj™j›lÐ:¨e¯j©j«lÐ:Õ;ˆ	ØŸj™j›lÐ:¨e¯j©j«lÐ:Õ;ˆ	àÐØ �	Üœ#˜iÓ3¼3¸y»>×JÐJ‰EˆAØ—^‘^ Q CÓ(¨Õ+ˆFØ!Ÿ^™^¹BÓ,?¹B°q¨Q°¯U¨U¹BÑ,?Ó@ˆNÜ!Ñ!A±.Ó!AÓAˆOð ×)Ñ)×?Ð?Ô-?ˆJÜ˜Q °*Õ <¸qÕ @ÓAˆJÜ ›KˆMÜœ3˜v›;¨Õ3°QÓ7ˆHØœC ›K¨(Õ2Ð4Ð5ˆFð ˜1Œ}Ø  AÕ%Ð Ü×!Ñ!¤E¨%£L = /´C¸³GÕ";Ô<Ü×$Ñ$ e W¬s°2«wÕ%6Ô7Úð #×2Ñ2°6Ó:‰OˆH�eÜ—i’i Ó)×.Ñ.Ó0ˆGä#�Øœ3˜v›;˜=Ð)�ð —‘˜h q¨&°­) |Õ4×9Ñ9Ó;Ô<Ø× Ñ  &¨¥)¨wÑ"6Ô8ä�v“; !Ô#ÙØ#Ÿ~™~Ü—H’H˜VÓ$ WÕ-´T·]²]À5Ó5Ið  .ó  ‘��q˜"ð �r—
œbŸfšf U›m×0Ñ0Ó2Õ2“
Ø˜"—¤§¢¨£§¡Ó!2Õ2–ô $ñ/ KðL ˜aÔÜ�LŠLØ(Ð)9Ð(:¸/ÐJØ3õ4ôô ˜(“mˆÜ—N‘N×*Ñ*¬3¨v«;¼r¿v¹vÐ*ÓF×KÑKÓMˆ	Ø˜1˜# ¬S°«[Õ!8Õ9Õ9ˆØ  ¨9´s¸9³~Õ+EÕ FÕFˆ	Ü—’˜&Ó!ˆÜ—H’H˜YÓ'ˆ	Ü—‘×*Ñ*¨6¼"¿&¹&Ð*ÓAˆÜ—N‘N×-Ñ-¨iÄÇÁÐ-ÓGˆ	Ü
�Š�Ô"ð ˆÜ˜%Ÿ*™*›,Ö'ˆDà$+¨DÐ,@°E·J±J³LÐ,@Ö$AôÙ$A˜ËXÀc’ÉX‘Ñ$Að ñ ð ˜[˜M¨Y¼¸\Ó9JÕ-JÕKÕKˆLØ×Ñ˜|Ö,ñ (ô —:’:œbŸhšh {Ó3Ó4ˆØ˜˜Ð% hÕ/ˆØ˜l˜{Ð+¨HÕ5ˆ	ä”C˜Ÿ™›¨×)9Ñ)9Ó);Ó<Ó=Ð=ùòE -@ùórs   Æ.Y-
Ö.Y2c                ó0   <€ V ^8„  d   QhRS[ S[,          /# r1   )rœ   r�   )r6   rQ   s   "€r   r7   rR     s   ø€ ÷ +ñ +±±eµñ +r   c                ó>  € \         P                  ! R\        V4      ,          4       T P                  V Uu. uF  q"P                  ^ ,          NK  	  up4      p. p\        \        ^ \        V4      V P                  4      4       F‘  pW5WPP                  ,            pV P                  V4      w  rxp	\        P                  ! VP                  R,          4      VR,          8  p
VP                  W§,          P                  RR7      P                  4       4       K“  	  V# u upi )a   Compute full log-likelihood of a string, with no truncation, for perplexity computation
- We will use the full max context length of the model.
- For inputs that exceed the max context length, we divide the tokenized string into chunks of up to
the max context length.
- IMPORTANT: Each document's loglikelihood/perplexity is computed *separately*, unlike other implementations
  which may simply concatenate multiple documents together.
- IMPORTANT: We maximize the amount of context for each prediction. Specifically, for inputs that we break into
  multiple chunks, the last input will still a full-sized context.
  Example:
    Input tokens: [ 0 1 2 3 4 5 6 7 8 9 ]
    Prefix: EOT
    Max context length: 4
    Resulting input/prediction pairs:
        INPUT:  EOT   0   1   2
        PRED:     0   1   2   3
        INPUT:    3   4   5   6
        PRED:     4   5   6   7
        INPUT:    5   6   7   8
        PRED:             8   9
  Observe that:
    1. Each token is predicted exactly once
    2. For the last pair, we provide the full context, but only score the last two tokens
:param requests: list[Instance]
    A list of Instance objects with property `args` which returns a tuple (context,).
    string: str
        String for which we are computing overall loglikelihood
:return: list[tuple[float]]
    A list of tuples (logprob,)
    logprob: float
        The log probability of `context` conditioned on the EOT token.
z2Estimating loglikelihood rolling for %d sequences.r"   r   rw   )rª   r«   r   r‘   r±   r	   rd   rY   rˆ   r)   r|   re   r¹   r¾   rÄ   )r?   rÅ   rÈ   r*   r¸   rn   Úbatchr�   r+   rÙ   Úmasks   &&         r   Úloglikelihood_rollingÚMLXLM.loglikelihood_rolling  sç   € ô@ 	�ŠØ@Ä3ÀxÃ=ÕPô	
ð —‘¹Ó A¹°§¡¨!§ ¹Ñ AÓBˆØˆ
Ü”e˜Aœs 6›{¨D×,<Ñ,<Ó=Ö>ˆAØ˜q×#3Ñ#3Õ3Ð4ˆEØ!%§¡°Ó!6ÑˆF˜QÜ—9’9˜VŸ\™\¨"Õ-Ó.°¸Õ1AÑAˆDØ×Ñ˜t�}×1Ñ1°rÐ1Ó:×AÑAÓCÖDñ	 ?ð Ðùò !Bs   ¶Dc                ó0   <€ V ^8„  d   QhRS[ S[,          /# r1   )rœ   r5   )r6   rQ   s   "€r   r7   rR   5  s   ø€ ÷ Uñ U©$©s­)ñ Ur   c                ó*	  € \         P                  P                  4       p\        V4      pWP	                  4       RVP                  4       1,          p\        P                  ! R\        V4      ,          4       \        V Uu. uF  qDP                  NK  	  up!  w  rVV Uu. uF.  pV P                  P                  WpP                  '       * R7      NK0  	  ppV Uu. uF-  pV P                  ;'       g    VP                  R\        4      NK/  	  p	p\!        V P"                  V P                  VV	RV P$                  R7      P&                  p
\)        \        W¦4      4       F[  w  pw  rÈ\+        WÈR,          4      W«&   V P                  P,                  '       g   K:  \/        WÀP                  P0                  4      W«&   K]  	  VP                  4       ^8”  EdŒ   \         P2                  ! \         P4                  4      ;_uu_ 4        W2P                  4       ,           ^,
          VP                  4       ,          pV\        V
4      ,
          pV
 Uu. uF  p\7        VP                  R4      4      NK  	  p
p\         P8                  ! \;        R	 V
 4       4      4      p\         P                  P=                  V4      P?                  4       p\         P8                  ! V
 Uu. uF  p\        V4      NK  	  up^ .V,          ,           4      p\         P8                  ! V
 Uu. uF#  qÿ^ .V\        V4      ,
          ,          ,           NK%  	  up^ .V,          .V,          ,           \         P@                  4      p
\         P                  PC                  V
R,          4      PE                  ^ ^4      PG                  ^ ^4      PI                  4       p
\         P                  PC                  VR,          4      PE                  ^ ^4      PG                  ^ ^4      PI                  4       pV
RV p
VRV p\        V
V4       UUu. uF"  w  pp\K        VRV 4      PM                  4       NK$  	  p
ppRRR4       V
# V
# u upi u upi u upi u upi u upi u upi u uppi   + '       g   i     T
# ; i)
aã  Generate greedily until a stopping sequence
:param requests: list[Instance]
    A list of Instance objects with property `args` which returns a tuple (context, until).
    context: str
        Context string
    until: [str]
        The string sequences to generate until. These string sequences
        may each span across multiple tokens, or may be part of one token.
:return: list[str]
    A list of strings continuation
    continuation: str
        The generated continuation.
Nz)Generating continuation for %d sequences.r‹   Úmax_gen_tokensT)Úmodelr=   ÚpromptsrJ   ÚverboserN   Úuntilzutf-8c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir¡   r¢   )r£   rp   s   & r   r¤   Ú'MLXLM.generate_until.<locals>.<genexpr>p  s   é € Ð&C±{°!¤s¨1§v v³{ùr¦   )'r)   r¬   r­   r   rµ   r¶   rª   r«   r´   r±   r=   rŽ   rL   rX   Úgetr·   r
   rW   r[   r�   r°   r   Úhas_thinkingr   Ú	think_endr©   rÁ   rœ   r%   r&   rÀ   r»   Úuint8rÂ   ÚswapaxesÚflattenrÄ   Ú	bytearrayÚdecode)r?   rÅ   rÆ   Útotal_requestsrÈ   ÚcontextsÚoptionsÚcontextÚoptrJ   ÚcompletionsÚeÚtextÚpad_tor(   rp   Úmax_lenr+   r   s   &&                 r   Úgenerate_untilÚMLXLM.generate_until5  s·  € ô —‘×#Ñ#Ó%ˆô ˜X›ˆØŸJ™J›LÐ8¨E¯J©J«LÐ8Õ9ˆä�ŠÐ@Ä3ÀxÃ=ÕPÔQÜ±hÓ!?±h¨s§(¤(±hÑ!?Ñ@Ñˆñ $ó	
ñ $�ð �N‰N×!Ñ!Ø×0FÑ0FÔ,Fð "ö ñ $ð	 	ð 
ñ ó
á�ð ×Ñ×MÐM §¡Ð(8Ô:LÓ MÒMÙð 	ð 
ô
 %Ø—+‘+Ø—n‘nØØ!ØØ—M‘Mô
÷ ‰%ð 	ô (¬¨KÓ(AÖB‰NˆA‰{�Ü*¨4°WµÓ>ˆK‰NØ�~‰~×*×*Ò*Ü!(¨¯~©~×/GÑ/GÓ!H�“ñ Cð �:‰:‹<˜!ÕÜ—’œ2Ÿ6™6×"Õ"Ø(¯:©:«<Õ7¸!Õ;ÀÇ
Á
ÃÕL�Øœs ;Ó/Õ/�Ù@KÓLÁ¸1œt A§H¡H¨WÓ$5Ö6Á�ÐLÜŸ(š(¤3Ñ&C±{Ó&CÓ#CÓD�ÜŸ.™.×0Ñ0°Ó9×>Ñ>Ó@�ÜŸ(š(±KÓ#@±K¨q¤C¨¦F±KÑ#@ÀAÀ3ÈÅ9Õ#LÓM�Ü ŸhšhÙ;FÓG¹;°a˜!˜ ¬#¨a«&Õ 0Õ1×1Ð1¹;ÑGØ�s˜W•}�o¨Õ+õ,ä—H‘Hó�ô —N‘N×-Ñ-¨k¸$Õ.?Ó@ß‘X˜a “^ß‘W˜Q “]ß‘V“Xð	 ô —N‘N×-Ñ-¨g°d­mÓ<ß‘X˜a “^ß‘W˜Q “]ß‘V“Xð	 ð *¨/¨>Ð:�Ø! / >Ð2�ä:=¸kÈ7Ô:SôÙ:S±$°!°Q”I˜a  ˜eÓ$×+Ñ+Ö-Ñ:Sð ñ ÷5 #ð< Ðˆ{ÐùòA "@ùò

ùò
ùò0 Mùò $AùâGùó$÷5 #Ö"ð< Ðús]   Â QÂ4Q"ÃQ'Ã1Q'Ç<A	RÉ#Q,É(A)RËQ1Ë%*RÌ)Q6Ì8C.RÐ&(Q;
ÑRÑ,RÒR	)rY   rX   rW   r[   r=   rL   )Né   NFN)é   )Nr  )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rD   r>   rV   rr   rˆ   r‘   Úpropertyr™   rà   ræ   r  Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r\   rQ   s   @@r   rG   rG   G   sr   ù‡ € ñ +Ó,Ð÷ õ  ÷*ò ÷*ò *òB
ð ÷>ó ð>÷n>ð n>÷`+ð +÷ZU÷ Uð Ur   rG   c                  ó¨	  € \         P                  ! R 4      p V P                  RRRR7       V P                  RRRR7       V P                  RR	R
R7       V P                  R\        ^RR7       V P                  R\        RRR7       V P                  R\        RRR7       V P                  RRR\        R7       V P                  R\        ^{RR7       V P                  RRRRR7       V P                  R\         P                  R RR7       V P                  R!\
        P                  R"R#R7       V P                  R$RR%RR7       V P                  R&RR'R(7       V P                  R)\        R*R+R7       V P                  R,\        R-R.R7       V P                  R/\        ^ R0R7       V P                  4       p\        VP                  4      pVP                  RRR17       R2\        P                  R3&   \        P                  P!                  VP                   4       \        P"                  P%                  4       p\        P&                  ! \        P"                  P)                  ^\        P*                  R47      4       VP-                  4       ^8”  d3   VP/                  4       ^ 8X  d   \1        R5VP-                  4        R624       \3        VP4                  VP6                  VP8                  R77      p\;        VP<                  VP>                  VP@                  VPB                  VPD                  VR87      p\G        RB/ VPH                  B \:        n!        \J        PL                  ! VVPN                  VPP                  VPR                  VPT                  VPV                  VP                   VP                   VP                   VP                   VPX                  R97      pR:VP<                  P[                  R;R<4      \]        R=4      .pVPT                  e   WqPT                  R> .,          pWqPN                  ,          pR<P_                  V4      pVP/                  4       ^ 8X  dƒ   W(,          p	V	Pa                  \
        Pb                  ! VR?,          ^R@7      4       \1        RA4       VR?,          Pe                  4        F$  p
\1        \
        Pb                  ! V
^R@7      4       K&  	  R# R# )Cz2Evaluate an MLX model using lm-evaluation-harness.z--modelzModel to evaluateT)ÚhelpÚrequiredz--tasksÚ+)Únargsr  z--output-dirÚ.z"Output directory for result files.)Údefaultr  z--batch-sizez
Batch size)Útyper  r  z--num-shotsNzNumber of shotsz--max-tokenszhMaximum number of tokens to generate. When set, this value takes precedence over task specific defaults.)r  r  r  z--limitz&Limit the number of examples per task.)r  r  r  z--seedzRandom seed.z--fewshot-as-multiturnÚ
store_truezZWhether to provide the fewshot examples as a multiturn conversation or a single user turn.F)Úactionr  r  z--apply-chat-templatez‡Specifies whether to apply a chat template to the prompt. If the model has a chat template, this defaults to `True`, otherwise `False`.z--chat-template-argszvA JSON formatted string of arguments for the tokenizer's
        apply_chat_template, e.g. '{"enable_thinking":false}'z{}z--confirm-run-unsafe-codez?Confirm that you want to run tasks that execute untrusted code.z--trust-remote-codez)Enable trusting remote code for tokenizer)r  r  z--tempg        zSampling temperaturez--top-pg      ð?zSampling top-pz--top-kzSampling top-k)ÚparentsÚexist_okÚfalseÚTOKENIZERS_PARALLELISMr¨   zEvaluating with z nodes)ÚtempÚtop_pÚtop_k)rJ   rK   rL   rM   rN   )rë   ÚtasksÚfewshot_as_multiturnr>   Únum_fewshotÚlimitÚrandom_seedÚnumpy_random_seedÚtorch_random_seedÚfewshot_random_seedÚconfirm_run_unsafe_coderf   r•   rÙ   Úlm_evalÚ02dÚresults)ÚindentzResults:rC   )3ÚargparseÚArgumentParserÚadd_argumentrO   ÚBooleanOptionalActionÚjsonÚloadsr�   Ú
parse_argsr   Ú
output_dirÚmkdirÚosÚenvironr)   ÚrandomÚseedr¬   r­   rf   Úall_sumrÁ   r¶   rµ   Úprintr   r  r  r  rG   rë   rJ   rK   r>   rM   rD   Úchat_template_argsr)  Úsimple_evaluater   r!  rL   Ú	num_shotsr#  r(  r˜   r   ÚjoinÚ
write_textÚdumpsr³   )Úparserr±   r4  ÚworldrN   Úlmr+  Ú	file_keysÚfilenameÚoutput_pathÚresults              r   ÚmainrI  �  s9  € Ü×$Ò$Ø<ó€Fð ×Ñ˜	Ð(;ÀdÐÔKØ
×Ñ˜	¨°tÐÔ<Ø
×ÑØ Ð*Nð ô ð ×Ñ˜¬S¸"À<ÐÔPØ
×Ñ˜¬C¸ÐDUÐÔVØ
×ÑØÜð3àð ô ð ×ÑØØØ5Üð	 ô ð ×Ñ˜¤s°C¸nÐÔMØ
×ÑØ Øð.àð ô ð ×ÑØÜ×-Ñ-ðð ð ô ð ×ÑØÜ�Z‰ZðAàð ô ð ×ÑØ#ØØNØð	 ô ð ×ÑØØØ8ð ô ð
 ×Ñ˜¤u°cÐ@VÐÔWØ
×Ñ˜	¬°sÐAQÐÔRØ
×Ñ˜	¬°QÐ=MÐÔNØ×ÑÓ€Dä�d—o‘oÓ&€JØ×Ñ˜T¨DÐÔ1ð ,3„B‡J�JÐ'Ñ(ä‡I�I‡N�N�4—9‘9Ôô �N‰N×ÑÓ!€EÜ‡G‚GŒB�N‰N×"Ñ" 1¬R¯V©VÐ"Ó4Ô5Ø‡z�zƒ|�aÔ˜EŸJ™J›L¨AÔ-ÜÐ  §¡£ ¨fÐ5Ô6äØ�Y‰YØ�j‰jØ�j‰jô€Gô
 
Ø�
‰
Ø—?‘?Ø—?‘?Ø×2Ñ2Ø×0Ñ0Øô
€Bô !1Ñ K°4×3JÑ3JÑ K„EÔä×%Ò%ØØ�j‰jØ!×6Ñ6Ø×0Ñ0Ø—N‘NØ�j‰jØ—I‘IØŸ)™)ØŸ)™)Ø ŸI™IØ $× <Ñ <ô€Gð ˜Ÿ™×+Ñ+¨C°Ó5´w¸yÓ7IÐJ€IØ‡~�~Ò!ØŸ™¨Ð,Ð.Õ.ˆ	Ø—‘Õ€IØ�x‰x˜	Ó"€HØ‡z�zƒ|�qÔØ Õ+ˆØ×ÑœtŸzšz¨'°)Õ*<ÀQÔGÔHÜˆjÔØ˜iÕ(×/Ñ/Ö1ˆFÜ”$—*’*˜V¨AÔ.Ö/ó 2ñ	 r   )+Ú__doc__r-  r®   r¼   r1  rª   r6  Úimportlib.metadatar   Úpathlibr   Útypingr   r   r   r)  Úmlx.coreÚcorer)   Úmlx.nnri   Únumpyr$   Úlm_eval.api.modelr   Úlm_eval.api.registryr   r	   Úgenerater
   Úmodels.cacher   Úsample_utilsr   Úutilsr   r·   r   r   r.   rD   rG   rI  rC   r   r   Ú<module>rX     s�   ðñó Û Û Û Û Û 	Ý &Ý ß *Ñ *ã Ý Ý Û Ý  Ý /Ý å $Ý +Ý &Ý àÐ òòò/ò
ñ �ÓôBˆBó Bó ðBôJ
t0r   