+
    UV-jqC  ã                   ó  € ^ RI t ^ RIHtHt ^ RIHt ^ RIH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HtHt R	 tR
 tR t] ! R R4      4       tR R ltRR ltRR ltR]RR3R ltR]! 4       ]RR3R R llt R# )é    N)Ú	dataclassÚfield)Úpartial)ÚPath)Úaverage_gradients)Útree_map)Útqdm)ÚColorsÚgrad_checkpointÚsave_adapterc                 óN  € \        V \        P                  4      '       d3   V P                  ^ 8”  d"   V P                  ^ ,          ^8X  d
   V ^ ,          # \        V \
        P                  4      '       d3   V P                  ^ 8”  d"   V P                  ^ ,          ^8X  d
   V ^ ,          # V # )r   )Ú
isinstanceÚmxÚarrayÚndimÚshapeÚnpÚndarray©Úvalues   &Úl/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/trainer/sft_trainer.pyÚ_squeeze_leading_batch_dimr      sm   € Ü�%œŸ™×"Ò" u§z¡z°A¤~¸%¿+¹+Àa½.ÈAÔ:MØ�Q�xˆÜ�%œŸ™×$Ò$¨¯©°a¬¸E¿K¹KÈ½NÈaÔ<OØ�Q�xˆØ€Ló    c                ó€   € \         P                  ! \        V 4      4      P                  R4      P                  ^ ,          # )zEReturn token sequence length for values shaped as (seq,) or (1, seq).éÿÿÿÿ)r   r   r   Úreshaper   r   s   &r   Ú_flat_seq_lenr      s-   € ä�8Š8Ô.¨uÓ5Ó6×>Ñ>¸rÓB×HÑHÈÕKÐKr   c                óz  a€  \         P                  ! V 4      #   \         d—    T ^ ,          o\        S\         P                  4      '       dl   SP
                  ^8”  d[   \        ;QJ d    T3R lT  4       F  '       d   K   RM	  RM! T3R lT  4       4      '       d   \         P                  ! T ^ R7      u # h i ; i)zFStack same-shaped arrays, or concatenate variable-length feature rows.c              3   óø   <"  € T Fo  p\        V\        P                  4      ;'       dI    VP                  SP                  8H  ;'       d(    VP                  R ,          SP                  R ,          8H  x € Kq  	  R# 5i)ºé   NNN)r   r   r   r   r   )Ú.0ÚvÚfirsts   & €r   Ú	<genexpr>Ú"_collate_arrays.<locals>.<genexpr>(   sh   øé € ð ñ  �Aô ˜1œbŸh™hÓ'÷ 3ð 3Ø—F‘F˜eŸj™jÑ(÷3ð 3à—G‘G˜B•K 5§;¡;¨r¥?Ñ2ô3ó  ùs   ƒ%A:© A:Á
0A:FT©Úaxis)r   ÚstackÚ
ValueErrorr   r   r   ÚallÚconcatenate)Úvaluesr$   s   &@r   Ú_collate_arraysr.      s”   ø€ ðÜ�xŠx˜ÓÐøÜô Ø�q•	ˆä�uœbŸh™h×'Ò'Ø—
‘
˜Q”ß“ô ñ  ó	——’ô ñ  ó	÷ ò ô —>’> &¨qÔ1Ò1Øðús"   ƒ ™AB:Á)B:Â B:ÂB:Â8B:c                   ó”  a € ] tR t^3t o ]! ^RR/R7      t]! ^dRR/R7      t]! ^RR/R7      t]! ^
RR/R7      t]! ^ÈRR/R7      t	]! ^dRR/R7      t
]! R	RR
/R7      t]! RRR/R7      t]! RRR/R7      t]! RRR/R7      t]! RRR/R7      t]! ^dRR/R7      t]! RRR/R7      t]! RRR/R7      t]! ^RR/R7      tV 3R ltRtV tR# )ÚTrainingArgsÚhelpzMinibatch size.)ÚdefaultÚmetadatazIterations to train for.z@Number of validation batches, -1 uses the entire validation set.z0Number of training steps between loss reporting.z-Number of training steps between validations.z!Save the model every number stepsé   zMaximum sequence length.úadapters.safetensorsz/Save/load path for the trained adapter weights.Fz0Use gradient checkpointing to reduce memory use.gñhãˆµøä>zLearning rate.g      ð?zGradient clipping value.z)Number of warmup steps for learning rate.g�íµ ÷Æ°>z"Minimum learning rate after decay.z-Fine-tune the full model instead of adapters.z8Number of steps to accumulate gradients before updating.c                óÎ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[ ;R&   S[;R&   S[;R	&   S[;R
&   S[;R&   S[ ;R&   S[;R&   S[;R&   S[ ;R&   # )é   Ú
batch_sizeÚitersÚval_batchesÚsteps_per_reportÚsteps_per_evalÚsteps_per_saveÚmax_seq_lengthÚadapter_filer   Úlearning_rateÚ	grad_clipÚwarmup_stepsÚmin_learning_rateÚfull_finetuneÚgradient_accumulation_steps)ÚintÚstrÚboolÚfloat)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚTrainingArgs.__annotate__3   sê   ø‡ ‚ áÑLñ ñ ÑRñ ñ ñ ñ	 ñ ñ ñ ñ ñ ñ ñ" ñ ñ# ñ( ñ ñ) ñ. ñ ñ/ ñ6 ñ ñ7 ñ> ñ ñ? ñF ñ ñG ñN ñ ñO ñV ñ ñW ñ^ ñ ñ_ ñf "%ñ òg r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r8   r9   r:   r;   r<   r=   r>   r?   r   r@   rA   rB   rC   rD   rE   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)rK   s   @r   r0   r0   3   si  ø‡ € á A°Ð9JÐ0KÔL€JÙ˜s¨fÐ6PÐ-QÔR€EÙØàÐVð
ô€Kñ "ØØÐLÐMôÐñ  Ø˜vÐ'VÐWô€Nñ  Ø˜vÐ'JÐKô€Nñ  Ø Ð(BÐCô€Nñ Ø&ØÐKÐLô€Lñ "ØØÐLÐMô€Oñ !ØØÐ*Ð+ô€Mñ ØØÐ4Ð5ô€Iñ ØØÐEÐFô€Lñ  %ØØÐ>Ð?ô Ðñ  ØØÐIÐJô€Mñ (-ØØÐTÐUô(Ð÷g ƒ r   r0   c                ó0   € V ^8„  d   QhR\         R\        /# )r7   ÚargsÚreturn)r0   r   )rJ   s   "r   rL   rL   l   s   € ÷ 	Kñ 	K¤ð 	K´ñ 	Kr   c                 óä   € \        V R R4      pV'       d   \        V4      # \        V RR4      pV'       d   \        V4      R,          # \        \        P                  R ,          P                  4      # )r?   NÚadapter_pathr5   )Úgetattrr   r0   Ú__dataclass_fields__r2   )rW   r?   rZ   s   &  r   Ú_resolve_adapter_filer]   l   s\   € Ü˜4 °Ó6€LßÜ�LÓ!Ð!ä˜4 °Ó6€LßÜ�LÓ!Ð$:Õ:Ð:ä”×1Ñ1°.ÕA×IÑIÓJÐJr   Fé#- c                 óö  € VR ,          pVR,          pVR,          pVP                   w  rxV'       EdE   \        P                  ! V4      p	\        P                  ! V3R	\        P
                  R7      p
\        P                  ! V4      p\        V4       FB  w  rÍ\        P                  ! WÓ8H  4      ^ ,          pVP                  ^ 8”  g   K7  V^ ,          W¬&   KD  	  \        P                  ! \        P                  ! \        P                  ! V4      ^ 4      V^ R7      pV\        P                  ! V
4      P                  R	^4      8*  p\        P                  ! V\        P                  ! V	4      V	4      R
,          p	MRp	VRRR	13,          pVRRR	13,          p\        P                  ! V^R7      pVR,          R
,          pVP!                  4        UUu/ uF  w  ppVR9  g   K  VVbK  	  pppV ! WTV3/ VB pVP"                  P%                  \        P&                  4      pR pV! VV4      pVP                   ^,          p\        P(                  ! VV4      p\        P                  ! V4      R,          VR,          8  p\*        P,                  P/                  VVV	R7      V,          pVP                  4       pVP                  4       V,          pVV,          P                  4       VP                  4       ,          # u uppi )Úpixel_valuesÚ	input_idsÚattention_mask©Údtyper'   ºNNNNc                 ó€  € V P                   ^,          VP                   ^,          8  dL   VP                   ^,          V P                   ^,          ,
          pR^ V3R3p\        P                  ! WRRR7      # V P                   ^,          VP                   ^,          8”  d!   V RVP                   ^,          ) R1R3,          # V # )r!   Úconstant)ÚmodeÚconstant_valuesre   N)r   r   iœÿÿÿ)r   r   Úpad)ÚlogitsÚlabelsÚ
pad_lengthÚ	pad_widths   &&  r   Úalign_logits_with_labelsÚ9vision_language_loss_fn.<locals>.align_logits_with_labels§   s”   € Ø�<‰<˜�?˜VŸ\™\¨!�_Ô,ØŸ™ a�¨6¯<©<¸­?Õ:ˆJØ ! Z °&Ð9ˆIÜ—6’6˜&°*ÈdÔSÐSØ�\‰\˜!�_˜vŸ|™|¨A�Ô.Ø˜!˜fŸl™l¨1�oÐ-Ñ/°Ð2Õ3Ð3Øˆr   )Úweightsr   )re   r    )ra   r`   rb   )Nre   )re   N)r   r   Ú	ones_liker   ÚfullÚint32r   Ú	enumerateÚwhereÚsizeÚrepeatÚexpand_dimsÚaranger   Ú
zeros_likeÚsumÚitemsrk   ÚastypeÚfloat32ÚminimumÚnnÚlossesÚcross_entropy)ÚmodelÚbatchÚtrain_on_completionsÚassistant_idr`   ra   rb   r8   Ú
seq_lengthÚweight_maskÚassistant_response_indexÚinput_ids_npÚrow_idxÚrowÚ	positionsÚrange_matrixÚassistant_maskÚlengthsrl   Úkr#   ÚkwargsÚoutputsrk   ro   Úseq_lenÚlength_maskÚceÚntokss   &&&&                         r   Úvision_language_loss_fnr™   x   s•  € ð ˜Õ(€LØ�kÕ"€IØÐ+Õ,€Nà&Ÿ_™_Ñ€JçÐÜ—l’l >Ó2ˆä#%§7¢7¨J¨=¸"ÄBÇHÁHÔ#MÐ Ü—x’x 	Ó*ˆÜ% lÖ3‰LˆGÜŸš Ñ!4Ó5°aÕ8ˆIØ�~‰~ Ö!Ø4=¸aµLÐ(Ó1ñ 4ô
 —y’yÜ�NŠNœ2Ÿ9š9 ZÓ0°!Ó4°jÀqô
ˆð &¬¯ªÐ2JÓ)K×)SÑ)SØ�ó*
ñ 
ˆô —h’h˜~¬r¯}ª}¸[Ó/IÈ;ÓWØõ
‰ð ˆà˜!˜S˜b˜S˜&Õ!€IØ# A s¨ s FÕ+€Nä�fŠf�^¨!Ô,€Gà�;Õ Õ&€Fð —K‘K”Môá!‰DˆAˆqØÐCÑCô 	ˆˆ1ŠÙ!ð ñ ñ �I¨^ÑF¸vÑF€GØ�^‰^×"Ñ"¤2§:¡:Ó.€Fòñ & f¨fÓ5€Fà�o‰o˜aÕ €GÜ�jŠj˜ 'Ó*€GÜ—)’)˜GÓ$ WÕ-°¸Õ0@Ñ@€Kô 	�	‰	×ÑØØØð 	 ó 	
ð
 õ	ð ð �O‰OÓ€EØ	�‰‹�EÕ	€Bà�Õ×!Ñ!Ó# k§o¡oÓ&7Õ7Ð7ùóGs   ÇK5ÇK5c           
   #   ó²  "  € \        \        \        V 4      4      4      p\        V 4      V8  d   \        R V R24      h\        P
                  P                  4       P                  4       \        P
                  P                  4       P                  4       reW,          ^ 8w  d   \        R4      h\        ^ \        V4      V,
          ^,           V4       Uu. uF"  pWGV,           Wu,           V,           V1,          NK$  	  pp V'       d)   \        P                  P                  \        V4      4      M\        \        V4      4      p	V	 EFÄ  p
WŠ,           Uu. uF  q°V,          NK  	  ppV Uu. uF  p\        \        VR,          4      V4      NK!  	  pp\        \        V4      V4      p^ p^VVV,           ^,
          V,          ,          ,           p\        VV4      p\        P                  ! \        V4      V3\        P                   R7      p\        P                  ! \        V4      V3\        P                   R7      p\#        V4       F¯  w  pp\        P$                  ! \'        VR,          4      4      P)                  R4      p\        \        V4      V4      pVRV VVRV13&   RV9   dD   \        P$                  ! \'        VR,          4      4      P)                  R4      pVRV VVRV13&   K¦  ^VVRV13&   K±  	  RpRV^ ,          9   d>   V^ ,          R,          e,   \+        V Uu. uF  p\'        VR,          4      NK  	  up4      pR\        P$                  ! V4      R\        P$                  ! V4      RV/pV^ ,           Uu. uF  pVR	9  g   K  VNK  	  ppV Fh  pV Uu. uF  p\'        VV,          4      NK  	  pp\-        V^ ,          \        P$                  4      '       d    \+        V4      VV&   K\  V^ ,          VV&   Kj  	  Vx € EKÇ  	  V'       d   EK  R# u upi u upi u upi u upi u upi u upi   \.         d    T^ ,          TT&    Kº  i ; i5i)
zDataset must have at least z	 examplesz1Batch size must be divisible by number of workersra   rc   Nrb   r`   r   )ra   rb   r`   )ÚlistÚrangeÚlenr*   r   ÚdistributedÚinitÚrankrw   r   ÚrandomÚpermutationÚminr   ÚmaxÚzerosrt   ru   r   r   r   r.   r   Ú	Exception)Údatasetr8   r>   ÚtrainÚindicesÚoffsetÚstepÚiÚbatch_indicesÚorderÚbÚidxr}   Úxr‘   Úmax_lenÚpad_toÚ
padded_lenÚinput_ids_batchÚattention_mask_batchÚitemÚarrÚLÚmaskÚpixel_values_batchr…   r’   Ú
extra_keysÚvalss   &&&&                         r   Úiterate_batchesr¾   Ä   s÷  é € Ü”5œ˜W›Ó&Ó'€GÜ
ˆ7ƒ|�jÔ ÜÐ6°z°lÀ)ÐLÓMÐMä—>‘>×&Ñ&Ó(×-Ñ-Ó/´·±×1DÑ1DÓ1F×1KÑ1KÓ1MˆDØÕ˜AÔÜÐLÓMÐMô �qœ#˜g›,¨Õ3°aÕ7¸ÔDóáDˆAð 	�F•
˜Q�Z¨*Õ4°tÐ;×<Ð<ÙDð ð ð
 ÷ ô �I‰I×!Ñ!¤# mÓ"4Ô5ä”s˜=Ó)Ó*ð 	ô
 ˆAØ-:Ö-=Ó>Ñ-= c˜S—\�\Ñ-=ˆEÐ>áLQóÙLQÀq””M ! K¥.Ó1°>ÖBÉEð ð ô œ#˜g›,¨Ó7ˆGØˆFØ˜V¨°&Õ(8¸1Õ(<ÀÕ'GÕHÕHˆJÜ˜Z¨Ó8ˆJä Ÿhšh¬¨E«
°JÐ'?ÄrÇxÁxÔPˆOÜ#%§8¢8¬S°«Z¸Ð,DÌBÏHÉHÔ#UÐ ä$ UÖ+‘��4Ü—h’hÔ9¸$¸{Õ:KÓLÓM×UÑUØó�ô œ˜C› *Ó-�Ø),¨R¨a¨�  2 A 2 Ñ&à# tÔ+ÜŸ8š8Ü2°4Ð8HÕ3IÓJóç‘g˜b“kð ð 37°r¸°(Ð(¨¨B¨Q¨B¨Ó/à23Ð(¨¨B¨Q¨B¨Ó/ñ ,ð "&ÐØ  q¥Ô)¨e°A­h°~Õ.FÒ.RÜ%4ÙRWÓXÑRWÈ$Ô/°°^Õ0DÖEÑRWÑXó&Ð"ð
 œRŸXšX oÓ6Ø ¤"§(¢(Ð+?Ó"@ØÐ 2ðˆEð ˜qžóá!�AØÐKÑK÷ �Ù!ð ð ó
  �ÙHMÓNÉÀÔ2°4¸µ7Ö;É�ÐNÜ˜d 1�g¤r§x¡x×0Ò0ð+Ü#2°4Ó#8˜˜a›ð  $ A�w�E˜!“Hñ  ð �Kñq ÷r ŠuÙùòKùò ?ùòùò< Yùòùò Oøô %ô +Ø#'¨¥7˜˜aœð+üs‡   ‚CQÃ(PÃ<
QÄAQÅP Å$QÅ*%P%ÆFQÌ$P*
Ì?AQÎ	P/ÎP/ÎQÎ P4Î;)QÏ%P9Ï3 QÐ QÐ9QÑQÑQÑQr4   c                óF  € V P                  4        \        P                  ! R4      p\        P                  ! ^ 4      p	\        WVVR7      p
VR
8w  d   \	        \        V4      4      M\	        \        ^4      p\        \        V\        VVVR7      4      RVR
8w  d   \        \        V4      V,          V4      M\        V4      V,          R7       F´  w  rÍRV9   d   VR,          P                  ^R7      pMH\        P                  ! VR,          P                  ^ ,          3VR,          P                  ^,          4      pVP                  4       pV
! W4      pVVV,          ,          pWŸ,          p	\        P                   ! W‰4       K¶  	  \        P                  P!                  V\        P"                  R	7      p\        P                  P!                  V	\        P"                  R	7      p	\        P$                  ! 4        V\        P&                  ! V	^4      ,          P)                  4       # )z+
Evaluate the model on validation dataset.
g        ©r†   r‡   )r§   r8   r>   zCalculating loss...)ÚdescÚtotalrb   r'   ra   ©Ústreamr   )Úevalr   r   r   Úiterrœ   rF   r	   Úzipr¾   r£   r�   r|   rs   r   rž   Úall_sumÚcpuÚclear_cacheÚmaximumr·   )r„   r§   r8   Únum_batchesr>   Úloss_fnr†   r‡   Ú
all_lossesÚntokensÚloss_fn_partialÚindex_iteratorÚ_r…   r‘   r˜   r‚   s   &&&&&&&&         r   ÚevaluaterÓ     s«  € ð 
‡J�J„LÜ—’˜#“€JÜ�hŠh�q‹k€GäØÈô€Oð 2=ÀÔ1B”Tœ% Ó,Ô-ÌÌSÐRSË€NÜÜØÜØØ%Ø-ôó	
ð #ð ˜bÔ ô ”�G“ 
Õ*¨KÔ8ä�W“ Õ+÷‰ˆð" ˜uÔ$ØÐ,Õ-×1Ñ1°qÐ1Ó9‰Gä—g’gØ�{Õ#×)Ñ)¨!Õ,Ð.°°kÕ0B×0HÑ0HÈÕ0KóˆGð —‘“ˆÙ  Ó.ˆà�f˜u•nÕ$ˆ
ØÕˆÜ
�Š�
Ö$ñ;ô> —‘×'Ñ'¨
¼2¿6¹6Ð'ÓB€JÜ�n‰n×$Ñ$ W´R·V±VÐ$Ó<€Gä‡N‚NÔØœŸš G¨QÓ/Õ/×5Ñ5Ó7Ð7r   c                ó$   € V ^8„  d   QhR\         /# )r7   rW   )r0   )rJ   s   "r   rL   rL   Q  s   € ÷ A
ñ A
ô
 ñA
r   c                ó$  a aaa'a(€ \         P                  P                  4       '       dA   \         P                  ! 4       pVP	                  R4      p	V	e   \         P
                  ! V	4       \        \        P                   RSP                   \        P                   24       \         P                  P                  4       p
V
P                  4       pV
P                  4       pV^8”  d   \        RV RV 24       Vf4   V^ 8X  d-   \        \        P                   R\        P                   24       \!        S4      pSP"                  '       dV   S P%                  4       P'                  4        F3  p\)        VR4      '       g   K  \#        VP*                  ^ ,          4       K5  	  SP,                  o'S'^8  d   S'       d   \/        R4      h\1        WVVR	7      pS P2                  SP2                  \         P4                  P2                  .pVV'V(V V3R
 lp\6        P8                  ! S V4      o(S P;                  4        ^ p^ p^ p^ p^ pRp\=        \?        ^SP                  ^,           4      \A        VSPB                  SPD                  RR7      4       EF½  w  pp\F        PH                  ! 4       pVeø   V^8X  g*   VSPJ                  ,          ^ 8X  g   VSP                  8X  dÈ   \F        PH                  ! 4       p\M        S VSPB                  SPN                  SPD                  VVVR7      pS P;                  4        \F        PH                  ! 4       V,
          pV^ 8X  d:   \        \        PP                   RV RVR RVR R\        P                   2	RR7       \F        PH                  ! 4       pV! VVVS',          ^ 8H  4      w  ppp\         PR                  ! 4        VV,          pVV,          pV^,          p\         PT                  ! VVVV4       V\F        PH                  ! 4       V,
          ,          pVSPV                  ,          ^ 8X  g   VSP                  8X  Edn   \         P                  PY                  V\         PZ                  R7      P]                  4       p V VV,          ,          p \         P                  PY                  V\         PZ                  R7      P]                  4       p!\)        SP^                  R4      '       d   SP^                  P]                  4       MSP^                  p"SPV                  V,          p#\a        V!4      V,          p$VV!,          p\         Pb                  ! 4       R,          p%V^ 8X  dI   \        RV R\        Pd                   V R \        P                   RV"R RV#R RV$R RV RV%R R2RR7       ^ p^ p^ p^ pVSPf                  ,          ^ 8X  g   EKM  V^ 8X  g   EKW  \i        S V4       VPj                  VR  R!2,          p&\i        S V&4       \        \        P                   RV R"V R#V& R$\        P                   2	RR7       EKÀ  	  V^ 8X  d>   \i        S V4       \        \        Pd                   R%V R$\        P                   24       R# R# )&z4
Main training function for vision-language models.
Ú max_recommended_working_set_sizeNz"Starting training..., iterations: zNode z of uH   No validation dataset provided â€” training will run without validation.Úlayersz.gradient_accumulation_steps must be at least 1rÀ   c                 óî  <€ R V 9   d   V R ,          P                  ^R7      pMH\        P                  ! V R,          P                  ^ ,          3V R,          P                  ^,          4      pVP                  4       pS	! S
V 4      w  rVSP                  e   \        V3R lV4      pVe   \        R Wa4      pV'       d7   \        V4      pS^8”  d   \        V3R lV4      pSP                  S
V4       RpWTV3# )rb   r'   ra   Nc                 ó^   <€ \         P                  ! V SP                  ) SP                  4      # ©N)r   ÚcliprA   )ÚgrW   s   &€r   Ú<lambda>Ú%train.<locals>.step.<locals>.<lambda>“  s   ø€ ¤b§g¢g¨a°$·.±.°À$Ç.Á.Ô&Qr   c                 ó   € W,           # rÚ   rN   )r±   Úys   &&r   rÝ   rÞ   –  s   € ¨®r   c                 ó   <€ V S,          # rÚ   rN   )r±   Úgrad_accum_stepss   &€r   rÝ   rÞ   ›  s   ø€ ¨!Ð.>Ö*>r   )r|   r   rs   r   rA   r   r   Úupdate)r…   Ú	prev_gradÚ	do_updater‘   ÚtoksÚlvalueÚgradrW   râ   Úloss_value_and_gradr„   Ú	optimizers   &&&    €€€€€r   r«   Útrain.<locals>.step…  sä   ø€ à˜uÔ$ØÐ,Õ-×1Ñ1°qÐ1Ó9‰Gä—g’gØ�{Õ#×)Ñ)¨!Õ,Ð.°°kÕ0B×0HÑ0HÈÕ0KóˆGð �{‰{‹}ˆÙ*¨5°%Ó8‰ˆð �>‰>Ò%ÜÔQÐSWÓXˆDàÒ ÜÑ.°Ó@ˆDçÜ$ TÓ*ˆDØ !Ô#ÜÔ >ÀÓE�Ø×Ñ˜U DÔ)ØˆDà˜TÐ!Ð!r   T)r§   r8   r>   r¨   )r„   r§   r8   rÌ   r>   rÍ   r†   r‡   zIter z: Val loss z.3fz, Val took Ús)ÚflushrÃ   r·   g    eÍÍAz: Train loss z.8fz, Learning Rate z.3ez	, It/sec z, Tokens/sec z, Trained Tokens z, Peak mem z GBÚ07dz_adapters.safetensorsz: Saved adapter weights to z and Ú.zSaved final adapter weights to )6r   ÚmetalÚis_availableÚdevice_infoÚgetÚset_wired_limitÚprintr
   ÚHEADERr9   ÚENDCrž   rŸ   rw   r    ÚOKBLUEr]   r   Úchildrenr-   Úhasattrr×   rE   r*   r   Ústater¡   r�   Úvalue_and_gradr¨   rÇ   rœ   r¾   r8   r>   ÚtimeÚperf_counterr<   rÓ   r:   ÚOKCYANrÊ   rÅ   r;   rÈ   rÉ   r·   r@   rI   Úget_peak_memoryÚOKGREENr=   r   Úparent))r„   rê   Útrain_datasetÚval_datasetrW   rÍ   r†   r‡   rò   Úmax_working_set_sizeÚworldÚ
world_sizer    r?   ÚmodulerÐ   rû   r«   r‚   Ún_tokensÚstepsÚtrained_tokensÚ
train_timeÚ
grad_accumÚitr…   ÚticÚtic_valÚval_lossÚval_timerç   ræ   Ú
train_lossÚn_tokens_totalr@   Úit_secÚ
tokens_secÚpeak_memÚ
checkpointrâ   ré   s)   ff&&f&&&                               @@r   r¨   r¨   Q  sÈ  ü€ ô 
‡x�x×Ñ×ÒÜ—n’nÓ&ˆØ*Ÿ™Ð/QÓRÐØÒ+Ü×ÒÐ3Ô4Ü	ŒV�]‰]ˆOÐ=¸d¿j¹j¸\Ì&Ï+É+ÈÐ
WÔXô �N‰N×ÑÓ!€EØ—‘“€JØ�:‰:‹<€DØ�A„~Ü��d�V˜4 
˜|Ð,Ô-àÒ˜t qœyÜÜ�}‰}ˆoÐeÔfl×fqÑfqÐerÐsô	
ô )¨Ó.€Lð ××ÐØ—n‘nÓ&×-Ñ-Ö/ˆFÜ�v˜x×(Ô(Ü §¡¨aÕ 0Ö1ñ 0ð ×7Ñ7ÐØ˜!Ô§ÜÐIÓJÐJô ØÈô€Oð �[‰[˜)Ÿ/™/¬2¯9©9¯?©?Ð;€E÷"ñ "ô: ×+Ò+¨E°?ÓCÐð 
‡K�K„MØ€FØ€HØ€EØ€NØ€JØ€Jô Üˆa�—‘˜a•Ó ÜØ!Ø—‘Ø×.Ñ.Øô		
÷‰	ˆˆEô ×ÒÓ!ˆð Ò"Ø�!ŒG�r˜D×/Ñ/Õ/°1Ô4¸¸d¿j¹jÔ8Hä×'Ò'Ó)ˆGÜØØ#ØŸ?™?Ø ×,Ñ,Ø#×2Ñ2Ø'Ø%9Ø)ô	ˆHð �K‰KŒMÜ×(Ò(Ó*¨WÕ4ˆHà�qŒyÜÜ—}‘}�o U¨2¨$ð / Ø (¨˜~ð . Ø (¨˜~¨Q¬v¯{©{¨mð=ð õ	ô ×#Ò#Ó%ˆCñ $(ØØØÐ!Õ! QÑ&ó$
Ñ ˆ��jô
 	�ŠÔØ�&ÕˆØ�DÕˆØ��
ˆÜ
�Š��v˜x¨Ô4Ø”d×'Ò'Ó)¨CÕ/Õ/ˆ
ð �×%Ñ%Õ%¨Ô*¨b°D·J±JÕ.>ÜŸ™×/Ñ/°¼r¿v¹vÐ/ÓF×KÑKÓMˆJØ˜% *Õ,Õ,ˆJÜŸ^™^×3Ñ3°HÄRÇVÁVÐ3ÓL×QÑQÓSˆNô ˜9×2Ñ2°F×;Ò;ð ×'Ñ'×,Ñ,Ô.à×'Ñ'ð ð
 ×*Ñ*¨ZÕ7ˆFÜ˜~Ó.°Õ;ˆJØ˜nÕ,ˆNÜ×)Ò)Ó+¨cÕ1ˆHà�qŒyÜØ˜B˜4˜}¬V¯^©^Ð,<¸ZÈÐ<LÌVÏ[É[ÈMð Z%Ø%2°3Ð$7ð 8Ø$ S˜\ð *"Ø",¨SÐ!1ð 2&Ø&4Ð%5ð 6 Ø (¨˜~¨Sð2ð õð ˆFØˆHØˆEØˆJð �×#Ñ#Õ# q×(¨T°Q¯YÜ˜ Ô-Ø%×,Ñ,°"°S°Ð9NÐ/OÕOˆJÜ˜ 
Ô+ÜÜ—=‘=�/  r dÐ*EØ�.  j \°´6·;±;°-ðAà÷ð ñsð@ ˆq„yÜ�U˜LÔ)ÜÜ�~‰~ÐÐ=¸l¸^È1ÌVÏ[É[ÈMÐZö	
ñ r   )Fr^   )F)!rý   Údataclassesr   r   Ú	functoolsr   Úpathlibr   Úmlx.coreÚcorer   Úmlx.nnr�   Únumpyr   Úmlx.nn.utilsr   Ú	mlx.utilsr   r	   Úutilsr
   r   r   r   r   r.   r0   r]   r™   r¾   rÓ   r¨   rN   r   r   Ú<module>r#     sœ   ðó ß (Ý Ý å Ý Û Ý *Ý Ý ç 8Ñ 8òòLò
ð( ÷5ð 5ó ð5õp	KôI8ôXNðl Ø#ØØô98ð@ Ù%›Ø#ØØ÷A
ñ A
r   