+
    TV-j· ã                   ó  € ^ RI t ^ RIt^ RI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H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HtHtHtHtHtHtH t H!t!H"t"H#t# ^ RI$H%t& ^ R
I'H(t( ^RI)H*t* ^RI+H,t,H-t-H.t. ^RI/H0t0H1t1 ^RI2H3t3H4t4 ^RI5H6t6H7t7H8t8 R t9 ! R R4      t:R8R R llt;R t<] ! R R4      4       t=] ! R R4      4       t>] ! R R4      4       t?] ! R R4      4       t@] ! R R4      4       tA] ! R  R!4      4       tB] ! R" R#4      4       tCR$ tD ! R% R&4      tE ! R' R(4      tFR) tGR* tHR+ R, ltI ! R- R.4      tJ ! R/ R0]4      tK]]K3R1 R2 lltL]]K3R3 R4 lltMR5 tN]OR68X  d   ]P! R74       ]N! 4        R# R# )9é    N)Údeque)Ú	dataclassÚreplace)ÚBaseHTTPRequestHandlerÚThreadingHTTPServer)ÚPath)ÚEmpty)ÚQueue)ÚThread)
ÚAnyÚCallableÚDictÚListÚLiteralÚ
NamedTupleÚOptionalÚSequenceÚTupleÚUnion)Úscan_cache_dir)Ú__version__)ÚBatchGeneratorÚSequenceStateMachineÚstream_generate)ÚLRUPromptCacheÚmake_prompt_cache)Úmake_logits_processorsÚmake_sampler)Ú_parse_sizeÚloadÚsharded_loadc                  óž   € \         P                  ! 4       R ,          p \         R\         P                   R\        P                  ! 4        RV  2# )ÚarchitectureÚ-)ÚmxÚdevice_infor   Úplatform)Úgpu_archs    Ú^/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_lm/server.pyÚget_system_fingerprintr*   1   s?   € Ü�~Š~Ó Õ/€HÜˆ]˜!œBŸN™NÐ+¨1¬X×->Ò->Ó-@Ð,AÀÀ8À*ÐMÐMó    c                   ó6   a € ] tR t^6t o RR ltR tR tRtV tR# )ÚToolCallFormatterc                ó8   € ^ V n         Wn        W n        W0n        R# ©r   N)Ú_idxÚ_tool_parserÚ_toolsÚ
_streaming)ÚselfÚtool_parserÚtoolsÚ	streamings   &&&&r)   Ú__init__ÚToolCallFormatter.__init__7   s   € ØˆŒ	Ø'ÔØŒØ#Žr+   c                ó>  € VP                  R R4      ;'       g    \        \        P                  ! 4       4      p\        P
                  ! VR,          RR7      VR&   RVRRR V/pV P                  '       d)   V P                  VR&   V ;P                  ^,          un        V# )ÚidNÚ	argumentsF)Úensure_asciiÚfunctionÚtypeÚindex)ÚpopÚstrÚuuidÚuuid4ÚjsonÚdumpsr3   r0   )r4   ÚtcÚtc_idÚouts   &&  r)   Ú_formatÚToolCallFormatter._format=   s}   € Ø—‘�t˜TÓ"×7Ð7¤c¬$¯*ª*«,Ó&7ˆÜŸ*š* R¨¥_À5ÔIˆˆ;‰à˜Ø�JØ�%ð
ˆð
 �?�?ˆ?ØŸ9™9ˆC�‰LØ�IŠI˜�N�IØˆ
r+   c           	     ó†  a € V'       g   . # . pV FT  p S P                  VS P                  4      p\        T\        4      '       g   T.pTP                  T 3R lT 4       4       KV  	  V#   \        \        P                  3 d<   p\
        P                  ! R \        T4      P                   RT R24        Rp?K«  Rp?ii ; i)zFailed to parse tool call (ú: u4   ) â€” tool text was likely truncated mid-generation.Nc              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5i©N)rJ   )Ú.0rG   r4   s   & €r)   Ú	<genexpr>Ú-ToolCallFormatter.__call__.<locals>.<genexpr>Z   s   øé € Ð<±V¨r˜$Ÿ,™, r×*Ð*³Vùs   ƒ!)r1   r2   Ú
ValueErrorrE   ÚJSONDecodeErrorÚloggingÚwarningr?   Ú__name__Ú
isinstanceÚlistÚextend)r4   Ú
tool_callsÚresultÚ	tool_textÚparsedÚes   f&    r)   Ú__call__ÚToolCallFormatter.__call__J   s·   ø€ ßØˆIàˆÛ#ˆIðØ×*Ñ*¨9°d·k±kÓB�ô ˜f¤d×+Ò+Ø ˜�Ø�M‰MÔ<±VÓ<Ö<ñ $ð ˆøô ¤× 4Ñ 4Ð5ô Ü—’Ø1´$°q³'×2BÑ2BÐ1CÀ2ÀaÀSð IEð Fôõ ûðús   ”A*Á*C Â0B;Â;C )r0   r3   r1   r2   N)F)	rW   Ú
__module__Ú__qualname__Ú__firstlineno__r8   rJ   r`   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r)   r-   r-   6   s   ø‡ € ô$ò÷ð r+   r-   c                ó\   € V ^8„  d   QhR\         \        ,          R\        \        ,          /# )é   ÚmessagesÚrole_mapping)r   Údictr   )Úformats   "r)   Ú__annotate__ro   ^   s"   € ÷ ñ œ4¤�:ð ´X¼dµ^ñ r+   c           
      ó.  € R RRRRRRRRR	/pT;'       g    TpR
pV  FN  pVP                  VR,          R
4      pVP                  RR
4      pVP                  RR
4      pW5 V V 2,          pKP  	  W1P                  RR
4      ,          pVP                  4       # )Úsystem_promptz}A chat between a curious user and an artificial intelligence assistant. The assistant follows the given rules no matter what.ÚsystemzASSISTANT's RULE: ÚuserzUSER: Ú	assistantzASSISTANT: ÚstopÚ
Ú ÚroleÚcontent)ÚgetÚrstrip)rk   rl   Údefault_role_mappingÚpromptÚlineÚrole_prefixru   ry   s   &&      r)   Úconvert_chatr€   ^   s¹   € àðOð 	Ð&Ø�Ø�]Ø�ð	Ðð  ×7Ð7Ð#7€Là€FÛˆØ"×&Ñ& t¨F¥|°RÓ8ˆØ×Ñ ¨Ó+ˆØ—(‘(˜9 bÓ)ˆØ�M ' ¨4¨&Ð1Õ1Šñ	 ð ×Ñ˜{¨BÓ/Õ/€FØ�=‰=‹?Ðr+   c                ó,  € V  EF  pVP                  R4      p\        V\        4      '       da   V Uu. uF  q3R,          R8X  g   K  VR,          NK  	  pp\        V4      \        V4      8w  d   \	        R4      hRP                  V4      VR&   M	Vf   RVR&   VP                  R4      ;p'       g   K¯  V FR  pVP                  R4      ;p'       g   K  VP                  R	4      ;p'       g   K9  \        P                  ! V4      VR	&   KT  	  EK
  	  R# u upi )
aÓ  
Convert message content to a format suitable for `apply_chat_template`.

The function operates on messages in place. It converts the 'content' field
to a string instead of a list of text fragments.

Args:
    message_list (list): A list of dictionaries, where each dictionary may
      have a 'content' key containing a list of dictionaries with 'type' and
      'text' keys.

Raises:
    ValueError: If the 'content' type is not supported or if 'text' is missing.

ry   r?   Útextz&Only 'text' content type is supported.rw   Nr[   r>   r<   )rz   rX   rY   ÚlenrS   ÚjoinrE   Úloads)	rk   Úmessagery   ÚfragmentÚtext_fragmentsr[   Ú	tool_callÚfuncÚargss	   &        r)   Úprocess_message_contentrŒ   v   s  € ô  ˆØ—+‘+˜iÓ(ˆÜ�gœt×$Ò$á18óÙ18 XÀVÕ<LÐPVÑ<VÔ �˜× Ð ±ð ð ô �>Ó"¤c¨'£lÔ2Ü Ð!IÓJÐJØ!#§¡¨Ó!8ˆG�IÒØŠ_Ø!#ˆG�IÑà Ÿ™ \Ó2Ð2ˆ:×2Ð2Û'�	Ø$Ÿ=™=¨Ó4Ð4�4×4Ð4Ø#Ÿx™x¨Ó4Ð4�t×4Ð4Ü,0¯JªJ°tÓ,<˜˜[Ó)ô (ó ùòs   ²DÁDc                   ó,   a € ] tR t^™t o V 3R ltRtV tR# )ÚModelDescriptionc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   # )rj   ÚmodelÚdraftÚadapter)rB   )rn   rh   s   "€r)   ro   ÚModelDescription.__annotate__™   s'   ø‡ ‚ á�Jñ ñ �Jñ ñ �Lò	 r+   © N©rW   rb   rc   rd   Ú__annotate_func__re   rf   rg   s   @r)   rŽ   rŽ   ™   ó   ø‡ ‡ „ r+   rŽ   c                   ó,   a € ] tR t^ t o V 3R ltRtV tR# )ÚSamplingArgumentsc                ób   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[;R&   S[ ;R&   S[ ;R&   S[ ;R&   # )rj   ÚtemperatureÚtop_pÚtop_kÚmin_pÚxtc_probabilityÚxtc_threshold)ÚfloatÚint)rn   rh   s   "€r)   ro   ÚSamplingArguments.__annotate__    sN   ø‡ ‚ áÑñ ñ �Lñ ñ �Jñ	 ñ
 �Lñ ñ Ññ ñ Ñò r+   r”   Nr•   rg   s   @r)   r™   r™       r—   r+   r™   c                   ó,   a € ] tR t^ªt o V 3R ltRtV tR# )ÚLogitsProcessorArgumentsc                ó”   <€ V ^8„  d   Qh/ S[ S[S[S[3,          ,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   # )rj   Ú
logit_biasÚrepetition_penaltyÚrepetition_context_sizeÚpresence_penaltyÚpresence_context_sizeÚfrequency_penaltyÚfrequency_context_size)r   r   r¢   r¡   )rn   rh   s   "€r)   ro   Ú%LogitsProcessorArguments.__annotate__ª   sl   ø‡ ‚ á™™c¡5˜jÕ)Õ*Ñ*ñ ñ Ññ ñ !Ñ ñ	 ñ
 Ññ ñ Ññ ñ Ññ ñ  Ñò r+   r”   Nr•   rg   s   @r)   r¥   r¥   ª   r—   r+   r¥   c                   ó,   a € ] tR t^µt o V 3R ltRtV tR# )ÚGenerationArgumentsc                óØ   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[S[,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[S[,          ;R	&   S[S[S[S[	3,          ,          ;R
&   # )rj   r�   ÚsamplingÚlogitsÚ
stop_wordsÚ
max_tokensÚnum_draft_tokensÚlogprobsÚtop_logprobsÚseedÚchat_template_kwargs)
rŽ   r™   r¥   r   rB   r¢   Úboolr   r   r   )rn   rh   s   "€r)   ro   Ú GenerationArguments.__annotate__µ   s˜   ø‡ ‚ áÑñ ñ  Ññ ñ %Ñ$ñ	 ñ ‘S•	Ññ ñ �Oñ ñ Ññ ñ �Nñ ñ Ññ ñ ‘3�-Ññ ñ #¡4©©S¨¥>Õ2Ñ2ò r+   r”   Nr•   rg   s   @r)   r°   r°   µ   r—   r+   r°   c                   ó,   a € ] tR t^Åt o V 3R ltRtV tR# )ÚCompletionRequestc                óº   <€ V ^8„  d   Qh/ S[ R,          ;R&   S[;R&   S[S[,          ;R&   S[S[S[,          ,          ;R&   S[S[S[S[3,          ,          ;R&   # )rj   Úrequest_typer}   rk   r6   rl   )Úchatr‚   )r   rB   r   r   r   r   )rn   rh   s   "€r)   ro   ÚCompletionRequest.__annotate__Å   sb   ø‡ ‚ á˜.Õ)Ñ)ñ ñ �Kñ	 ñ ‘3�iÑñ ñ ‘D™•IÕÑñ ñ ™4¡¡S �>Õ*Ñ*ò r+   r”   Nr•   rg   s   @r)   r¾   r¾   Å   r—   r+   r¾   c                   ó:   a € ] tR t^Ðt o RtRtR tV 3R ltRtV t	R# )ÚGenerationContextFc                ó   € R V n         R# ©TN©Ú_should_stop©r4   s   &r)   ru   ÚGenerationContext.stopÝ   s
   € Ø ˆÖr+   c                óÀ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[S[.S[3,          ;R&   S[S[S[,          S[3,          ;R&   S[S[,          ;R&   S[;R&   S[ ;R&   # )rj   Úhas_tool_callingÚhas_thinkingr5   Ú	sequencesr}   Úprompt_cache_countrÈ   )r»   r   rB   r   r   r   r¢   r   )rn   rh   s   "€r)   ro   ÚGenerationContext.__annotate__Ð   s}   ø‡ ‚ áÑñ ñ Ññ ñ ™3¡˜*¡dÐ*Õ+Ñ+ñ	 ñ ‘E™#•J¡�OÕ$Ñ$ñ ñ ‘�IÑñ ñ Ñ ñ ñ Ñò r+   rÇ   Néÿÿÿÿ)
rW   rb   rc   rd   rÏ   rÈ   ru   r–   re   rf   rg   s   @r)   rÄ   rÄ   Ð   s   ø‡ € ð !Ðà€Lò!÷ ƒ r+   rÄ   c                   ó,   a € ] tR t^át o V 3R ltRtV tR# )ÚResponsec                ó´   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[ ;R&   S[S[,          ;R&   S[;R&   S[S[ ,          ;R&   S[S[S[ S[3,          ,          ;R&   # )rj   r‚   ÚtokenÚstateÚmatchÚlogprobÚfinish_reasonÚ
top_tokens)rB   r¢   r   r¡   r   r   r   )rn   rh   s   "€r)   ro   ÚResponse.__annotate__á   so   ø‡ ‚ á
�Iñ ñ �Jñ ñ �Jñ	 ñ
 ‘�:Ññ ñ �Nñ ñ ™C•=Ñ ñ ñ ‘d™3¡˜8•nÕ%Ñ%ò r+   r”   Nr•   rg   s   @r)   rÓ   rÓ   á   r—   r+   rÓ   c           	   #   óð  "  € \        R  V P                   4       4      p\        4       pV Fœ  pVP                  V4       VP                  eW   VP                   Uu. uF  qSP                  4       NK  	  pp\        V4       F  pVP                  \        VRR7      4       K!  	  \        V4      V8¼  g   KŠ  VP                  4       x € Kž  	  \        V4      ^ 8”  d   VP                  4       x € K$  R# u upi 5i)c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5irO   )rƒ   )rP   Úss   & r)   rQ   Ú*_process_control_tokens.<locals>.<genexpr>í   s   é € Ð4¡m ”c˜!—f�f£mùó   ‚Nrw   ©r‚   )
ÚmaxrÎ   r   Úappendr×   rA   Úreversedr   rƒ   Úpopleft)ÚctxÚtoken_streamÚbuffer_sizeÚbuffered_streamÚtokÚ_ÚpoppedÚts   &&      r)   Ú_process_control_tokensrî   ì   sÊ   é € ÜÑ4 c§m¢mÓ4Ó4€KÜ“g€OãˆØ×Ñ˜sÔ#Ø�9‰9Ò Ø58·Y²YÓ?±Y°×)Ñ)Ö+±YˆFÐ?Ü˜fÖ%�Ø×&Ñ&¤w¨q°rÔ':Ö;ñ &äˆÓ ;Ö.Ø!×)Ñ)Ó+Ô+ñ ô ˆoÓ
 Ô
"Ø×%Ñ%Ó'Ô'ñ #ùò @ùs   ‚AC6ÁC1Á3=C6Â5AC6c                   ó6   a € ] tR t^üt o RR ltR tR tRtV tR# )Ú
TimeBudgetc                óÊ   € \         P                  P                  4       P                  4       ^8„  V n        Wn        W n        W0n        RV n        RV n	        ^ V n
        ^ V n        R# )é   N)r%   ÚdistributedÚinitÚsizeÚ_is_distributedÚ_budgetÚ_iterationsÚ_sync_frequencyÚ_startÚ_current_iterationsÚ_loopsÚ_time_spent)r4   ÚbudgetÚ
iterationsÚsync_frequencys   &&&&r)   r8   ÚTimeBudget.__init__ý   sT   € Ü!Ÿ~™~×2Ñ2Ó4×9Ñ9Ó;¸aÑ?ˆÔØŒØ%ÔØ-ÔØˆŒØ#'ˆÔ ØˆŒØˆÖr+   c                óH   € \         P                   ! 4       V n        ^ V n        V # )r   )Útimerú   rû   rÉ   s   &r)   Ú__iter__ÚTimeBudget.__iter__  s   € Ü—i’i“kˆŒØ#$ˆÔ Øˆr+   c                ó¦  € V P                   '       gB   \        P                  ! 4       V P                  ,
          V P                  8”  d   \	        4       hR # V ;P
                  ^,          un        V P
                  V P                  8:  d   R # V ;P                  ^,          un        V ;P                  \        P                  ! 4       V P                  ,
          ,          un        V P                  V P                  ,          ^ 8X  dÈ   \        P                  P                  V P                  4      P                  4       pV\        P                  P                  4       P                  4       V P                  ,          ,          pV P                  V,          p\!        \#        V P                  V,          4      ^4      V n        ^ V n        ^ V n        \	        4       hrO   )rö   r  rú   r÷   ÚStopIterationrû   rø   rü   rý   rù   r%   ró   Úall_sumÚitemrô   rõ   râ   Úround)r4   Ú	loop_timeÚavg_loop_timeÚfactors   &   r)   Ú__next__ÚTimeBudget.__next__  s8  € Ø×#×#Ð#Ü�yŠy‹{˜TŸ[™[Õ(¨4¯<©<Ô7Ü#“oÐ%Ùà× Ò  AÕ%Õ Ø×#Ñ# t×'7Ñ'7Ô7Ùà�Š�qÕ�Ø×ÒœDŸIšI›K¨$¯+©+Õ5Õ5ÕØ�;‰;˜×-Ñ-Õ-°Ô2ÜŸ™×.Ñ.¨t×/?Ñ/?Ó@×EÑEÓGˆIØ%Ü—‘×#Ñ#Ó%×*Ñ*Ó,¨t×/CÑ/CÕCõˆMð —\‘\ MÕ1ˆFÜ"¤5¨×)9Ñ)9¸FÕ)BÓ#CÀQÓGˆDÔØˆDŒKØ ˆDÔÜ‹oÐr+   )r÷   rû   rö   rø   rü   rú   rù   rý   N)g      à?é   é
   )	rW   rb   rc   rd   r8   r  r  re   rf   rg   s   @r)   rð   rð   ü   s   ø‡ € ôò÷
ð r+   rð   c                   óL   a € ] tR tRt o V 3R lR ltR	R ltR tR	R ltRtV t	R# )
ÚModelProvideri$  c                ó4   <€ V ^8„  d   QhRS[ P                  /# )rj   Úcli_args)ÚargparseÚ	Namespace)rn   rh   s   "€r)   ro   ÚModelProvider.__annotate__%  s   ø€ ÷ Mñ M¡×!3Ñ!3ñ Mr+   c                ó  € Wn         RV n        RV n        RV n        RV n        RV n        \        P                  P                  4       pVP                  4       ^8”  d   VP                  '       d   TMRV n        VP                  4       ^8”  d   VP                  '       g   TMRV n        VP                  4       ^8„  V n        / V n        / V n        / V n        V P                   P                  V P                  R&   V P                   P"                  V P                  R&   V P                   P                  V P                   R&   RVP$                  '       d   RMR/V n        VP(                  '       d   VP(                  V P&                  R&   R# R# )z@Load models on demand and persist them across the whole process.NFÚdefault_modelÚtrust_remote_codeTÚchat_template)r  Ú	model_keyr�   Ú	tokenizerÚdraft_modelÚis_batchabler%   ró   rô   rõ   ÚpipelineÚpipeline_groupÚtensor_groupÚis_distributedÚ
_model_mapÚ_adapter_mapÚ_draft_model_mapÚadapter_pathr  Ú_tokenizer_configr  )r4   r  Úgroups   && r)   r8   ÚModelProvider.__init__%  sG  € à ŒØˆŒØˆŒ
ØˆŒØˆÔØ!ˆÔä—‘×#Ñ#Ó%ˆØ',§z¡z£|°aÔ'7¸H×<M×<MÐ<M™eÐSWˆÔà—Z‘Z“\ AÔ%¨h×.?×.?Ð.?‰EÀTð 	Ôð $Ÿj™j›l¨QÑ.ˆÔð
 ˆŒØˆÔØ "ˆÔØ+/¯=©=×+>Ñ+>ˆ�‰˜Ñ(Ø-1¯]©]×-GÑ-Gˆ×Ñ˜/Ñ*Ø15·±×1JÑ1Jˆ×Ñ˜oÑ.ð  ¨×)C×)CÐ)C¡Èð"
ˆÔð ×!×!Ð!Ø6>×6LÑ6LˆD×"Ñ" ?Ó3ñ "r+   Nc                ó(  € V P                   '       d   Vf   Ve   \        R4      hR V n        R V n        R V n        R V n        V P                   '       d1   \        VV P                  V P                  V P                  R7      w  rEM\        VVV P                  R7      w  rEV P                  P                  '       d    VP                  f   VP                  Vn        R pVe?   \        V4      w  rgVP                  VP                  8w  d   \         P"                  ! R4       VR J pT;'       dG    \$        ;QJ d%    R \'        V4       4       F  '       d   K   RM	  RM! R \'        V4       4       4      pWV3V n        W@n        WPn        W`n        W€n        R # )NzGLoading with adapters or draft models not supported in distributed mode)r"  r#  Útokenizer_config)r(  r-  zdDraft model tokenizer does not match model tokenizer. Speculative decoding may not work as expected.c              3   ó:   "  € T F  p\        VR 4      x € K  	  R# 5i)ÚmergeN)Úhasattr)rP   Úcs   & r)   rQ   Ú&ModelProvider._load.<locals>.<genexpr>t  s   é € ð ,
Ù)A AŒG�A�w×ÐÓ)Aùs   ‚FT)r$  rS   r  r�   r  r  r!   r"  r#  r)  r    r  Úuse_default_chat_templater  Údefault_chat_templateÚ
vocab_sizerU   rV   Úallr   r   )	r4   Ú
model_pathr(  Údraft_model_pathr�   r  r  Údraft_tokenizerr   s	   &&&&     r)   Ú_loadÚModelProvider._loadF  s‚  € Ø××ÐØÒ$Ð(8Ò(DäØYóð ð
 ˆŒØˆŒ
ØˆŒØˆÔð ××ÐÜ+ØØ#×2Ñ2Ø!×.Ñ.Ø!%×!7Ñ!7ô	 ÑˆE�9ô  $ØØ)Ø!%×!7Ñ!7ô ÑˆEð �=‰=×2×2Ð2Ø×&Ñ&Ò.Ø*3×*IÑ*I�	Ô'ð ˆØÒ'Ü+/Ð0@Ó+AÑ(ˆKØ×)Ñ)¨Y×-AÑ-AÔAÜ—’ðEôð # dÐ*ˆØ#÷ 
ð 
¯«ñ ,
Ü):¸5Ô)Aó,
¯¯ªñ ,
Ü):¸5Ô)Aó,
ó )
ˆð
 %Ð4DÐEˆŒØŒ
Ø"ŒØ&ÔØ(Ör+   c                óZ   € V P                   R ,          e   V P                  R RR 4       R# R# )r  N)r%  r    rÉ   s   &r)   Úload_defaultÚModelProvider.load_default  s&   € Ø�?‰?˜?Õ+Ò7Ø�I‰I�o t¨_Ö=ñ 8r+   c                ó  € V P                   P                  W4      pV P                  P                  W4      pV P                  P                  W34      pWV3pV P                  V8w  d   V P
                  ! V!   V P                  V P                  3# rO   )r%  rz   r&  r'  r  r:  r�   r  )r4   r7  r(  r8  r  s   &&&& r)   r    ÚModelProvider.loadƒ  sz   € Ø—_‘_×(Ñ(¨Ó@ˆ
Ø×(Ñ(×,Ñ,¨ZÓFˆØ×0Ñ0×4Ñ4Ð5EÓXÐàÐ/?Ð@ˆ	Ø�>‰>˜YÔ&Ø�JŠJ˜	Ò"à�z‰z˜4Ÿ>™>Ð)Ð)r+   )r&  r'  r%  r)  r  r  r   r$  r�   r  r"  r#  r  )NN)
rW   rb   rc   rd   r8   r:  r=  r    re   rf   rg   s   @r)   r  r  $  s'   ø‡ € ÷Mð MôB7)òr>÷	*ò 	*r+   r  c                 óL  € \        V P                  P                  V P                  P                  V P                  P                  V P                  P
                  V P                  P                  V P                  P                  VP                  VP                  R 4      .R7      # )rv   )rœ   r�   rž   rŸ   r    Úxtc_special_tokens)
r   r²   r›   rœ   r�   rž   rŸ   r    Úeos_token_idÚencode)r‹   r  s   &&r)   Ú_make_samplerrE  �  sy   € ÜØ�‰×!Ñ!Ø�m‰m×!Ñ!Ø�m‰m×!Ñ!Ø�m‰m×!Ñ!ØŸ™×5Ñ5Ø—m‘m×1Ñ1à×"Ñ"Ø×Ñ˜TÓ"ð
ôð r+   c           	      ó<  € \        V P                  P                  V P                  P                  V P                  P                  V P                  P
                  V P                  P                  V P                  P                  V P                  P                  4      # rO   )	r   r³   r§   r¨   r©   rª   r«   r¬   r­   )r‹   s   &r)   Ú_make_logits_processorsrG  ž  sj   € Ü!Ø�‰×ÑØ�‰×&Ñ&Ø�‰×+Ñ+Ø�‰×$Ñ$Ø�‰×)Ñ)Ø�‰×%Ñ%Ø�‰×*Ñ*óð r+   c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# ©rj   Úreturn)r   r   rB   r   )rn   s   "r)   ro   ro   ª  s    € ÷ ñ ¼¼dÄ3ÌÀ8½nÕ8Mñ r+   c                óH  € V^ 8:  d   R# \         P                  ! V ) V^,
          R7      pVRV P                  4       pW,          P                  4       pVP                  V4      p\        ;QJ d    . R \        WFV4       4       F  NK  	  5# ! R \        WFV4       4       4      # )z=Returns info dicts for the top `top_n` tokens from `logprobs`)ÚkthNc              3   ó8   "  € T F  w  rpR VRVRV/x € K  	  R# 5i)r;   rÕ   rØ   Nr”   )rP   ÚirÞ   Úgs   &   r)   rQ   Ú'_format_top_logprobs.<locals>.<genexpr>²  s(   é € ð á8‰GˆA�!ð 
ˆq�'˜1˜i¨Õ+Û8ùrà   r”   )r%   ÚargpartitionÚtolistÚconvert_ids_to_tokensÚtupleÚzip)r·   Útop_nr  Úsorted_indicesÚtop_indicesÚ	top_probsÚtxtss   &&&    r)   Ú_format_top_logprobsr[  ª  sš   € à�„zØˆ	Ü—_’_ h Y°E¸AµIÔ>€NØ   %Ð(×/Ñ/Ó1€KØÕ%×,Ñ,Ó.€IØ×*Ñ*¨;Ó7€DßŒ5ñ ä˜;¨iÔ8ó�5ð ˆ5ñ ä˜;¨iÔ8óó ð r+   c                   ó¢   a € ] tR tRt o V 3R lR ltR tR tR tRR ltR	 t	R
 t
R tRR ltR tR tR tRV 3R lR llt]R 4       tRtV tR# )ÚResponseGeneratori¸  c                ó&   <€ V ^8„  d   QhRS[ RS[/# )rj   Úmodel_providerÚprompt_cache)r  r   )rn   rh   s   "€r)   ro   ÚResponseGenerator.__annotate__¹  s   ø€ ÷ (ñ (¡}ð (ÁNñ (r+   c                óª  € Wn         W n        \        4       V n        / V n        \        4       V n        \        P                  P                  4       P                  4       ^8„  V n        \        P                  P                  4       P                  4       V n        RV n        \        V P                   R7      V n        V P"                  P%                  4        R# )rò   F)ÚtargetN)r_  r`  r
   ÚrequestsÚ_state_machine_cacherð   Ú_time_budgetr%   ró   rô   rõ   rö   ÚrankÚ_rankÚ_stopr   Ú	_generateÚ_generation_threadÚstart)r4   r_  r`  s   &&&r)   r8   ÚResponseGenerator.__init__¹  s“   € Ø,ÔØ(ÔÜ›ˆŒØ$&ˆÔ!ä&›LˆÔÜ!Ÿ~™~×2Ñ2Ó4×9Ñ9Ó;¸aÑ?ˆÔÜ—^‘^×(Ñ(Ó*×/Ñ/Ó1ˆŒ
ØˆŒ
Ü"(°·±Ô"?ˆÔØ×Ñ×%Ñ%Ö'r+   c                óH   € R V n         V P                  P                  4        R# rÆ   )ri  rk  r„   rÉ   s   &r)   Ústop_and_joinÚResponseGenerator.stop_and_joinÆ  s   € ØˆŒ
Ø×Ñ×$Ñ$Ö&r+   c                ó:   € V P                   P                  4        R # rO   )rk  r„   rÉ   s   &r)   r„   ÚResponseGenerator.joinÊ  s   € Ø×Ñ×$Ñ$Ö&r+   c           
     ó|  € \        V P                  4      pV P                  P                  p\        P                  ! R V RVR,          R R24       V P                  P                  4       P                  4        F?  w  r4VR,          pVR,          p\        P                  ! RV RV RVR,          R R24       KA  	  R	# )
zPrompt Cache: z sequences, g    eÍÍAz.2fz GBÚn_sequencesÚn_bytesz- rM   N)rƒ   r`  ÚnbytesrU   ÚinfoÚstats_by_typeÚitems)r4   rt  ru  Ú
cache_typeÚstatss   &    r)   Ú_log_cache_statsÚ"ResponseGenerator._log_cache_statsÍ  s«   € Ü˜$×+Ñ+Ó,ˆØ×#Ñ#×*Ñ*ˆÜ�Š�~ k ]°,¸wÈ½}ÈSÐ>QÐQTÐUÔVØ!%×!2Ñ!2×!@Ñ!@Ó!B×!HÑ!HÖ!JÑˆJØ Õ.ˆKØ˜IÕ&ˆGÜ�LŠLØ�Z�L  ; -¨|¸GÀc½MÈ#Ð;NÈcÐRöó "Kr+   Nc                ó
  € R pV P                   '       d   V P                  ^ 8X  d>    Ve   V P                  P                  VR7      pMV P                  P	                  4       p V P                  V4      #   \
         d     Li ; i)N©Útimeout)rö   rh  rd  rz   Ú
get_nowaitÚ
QueueEmptyÚ_share_request)r4   r€  Úrequests   && r)   Ú_next_requestÚResponseGenerator._next_requestØ  sx   € ØˆØ×#×#Ð# t§z¡z°Q¤ðØÒ&Ø"Ÿm™m×/Ñ/¸Ð/Ó@‘Gà"Ÿm™m×6Ñ6Ó8‘Gð ×"Ñ" 7Ó+Ð+øô ô Ùðús   § A4 ÁA4 Á4BÂBc                ó  € V P                   '       g   V# V P                  ^ 8X  dÖ   Vf6   \        P                  ! \        P                  P                  ^ 4      4       R# \        P                  ! \        P                  ! V4      4      p\        P                  ! \        P                  P                  VP                  4      4       \        P                  ! \        P                  P                  V4      4       V# \        P                  P                  ^ 4      P                  4       pV^ 8X  d   R# \        P                  ! V\        P                  R7      p\        P                  P                  V4      p\        P                  ! V4      # )r   N)Údtype)rö   rh  r%   Úevalró   r  ÚarrayÚpicklerF   rõ   r	  ÚzerosÚuint8r…   )r4   ÚobjÚdatarõ   s   &&  r)   Ú_share_objectÚResponseGenerator._share_objectä  sõ   € Ø×#×#Ð#ØˆJà�:‰:˜Œ?ØŠ{Ü—’œŸ™×.Ñ.¨qÓ1Ô2ÙÜ—8’8œFŸLšL¨Ó-Ó.ˆDÜ�GŠG”B—N‘N×*Ñ*¨4¯9©9Ó5Ô6Ü�GŠG”B—N‘N×*Ñ*¨4Ó0Ô1ØˆJä—>‘>×)Ñ)¨!Ó,×1Ñ1Ó3ˆDØ�qŒyÙÜ—8’8˜D¬¯©Ô1ˆDÜ—>‘>×)Ñ)¨$Ó/ˆDÜ—<’< Ó%Ð%r+   c                ó°   € V P                   '       g   V# Ve
   VR,          MR pV P                  V4      pVf   R # Ve
   V^ ,          M	\        4       pV.VO5# )N:rò   NN)rö   r�  r
   )r4   r„  Ú	shareableÚrqs   &&  r)   rƒ  Ú ResponseGenerator._share_requestø  sZ   € Ø×#×#Ð#ØˆNà#*Ò#6�G˜B–K¸Dˆ	Ø×&Ñ& yÓ1ˆ	ØÒÙà"Ò.ˆW�QŽZ´E³GˆØˆ~�I‰~Ðr+   c                ó(  € VP                   R8X  Ed   VP                  pVP                  pVP                  pVP                  '       d¾   \        V4       V'       d)   VP                  '       g   \        P                  ! R4       V P                  P                  P                  pVP                  '       d,   VP                  4       pVP                  VP                  4       \        RRVRR/VB pVP                   ! V3RR/VB p	MCVP#                  \%        WF4      4      p	W™.R.R3# VP#                  VP&                  4      p	W™.R.R3# Rp
VP(                  '       d+   VP+                  V	4      pVP-                  V	4      pW¼8”  d   R	p
VR,          R
,          R8w  d   W™.R.V
3# . p. p^ p^ pV F  pVR
,          R8X  d   V^,          pK   M	  V^ 8”  dŽ   VP                   ! VRV R
RRR/.,           3RR/VB p\/        \1        VV	4      4       F  w  pw  ppVV8w  g   K  Tp M	  V^ 8”  d6   V\3        V	4      8  d&   VP5                  V	RV 4       VP5                  R4       \3        V	4      pVP(                  '       d$   VP+                  V	V^,
          R7      pV^ 8¼  d   TpVV8  d&   VP5                  V	VV 4       VP5                  R4       V\3        V	4      8  d&   VP5                  V	VR 4       VP5                  R4       V'       g   V	.pR.pW�Wê3# )aú  Tokenize a request and split the prompt into segments.

Returns a tuple

  * prompt - Full list of tokens
  * segments - A list of lists of tokens. Up to 3 segments that
    correspond to system prompt, context, thinking tail.
  * segment_types - A string per segment indicating if the segment is a
    system prompt or a user prompt or nothing special.
  * initial state - A string that contains the initial state of the
    state machine (normal or thinking depending on whether we have tail
    or not)
rÁ   z–Received tools but model does not support tool calling. If you think this is an error, file an issue here: https://github.com/ml-explore/mlx-lm/issuesr6   ÚtokenizeTÚadd_generation_promptrt   ÚnormalÚ	reasoningrx   rs   rr   Nry   rw   F)rl  r”   rÑ   )rÀ   rk   r6   rl   Úhas_chat_templaterŒ   rÌ   rU   rV   r_  r  Úchat_template_argsrº   ÚcopyÚupdaterm   Úapply_chat_templaterD  r€   r}   rÍ   Úrfind_think_startÚrfind_think_endÚ	enumeraterU  rƒ   rã   )r4   r  r„  r‹   rk   r6   rl   rœ  Útemplate_kwargsr}   Úinitial_stateÚthink_startÚ	think_endÚsegmentsÚsegment_typesÚ
num_systemÚsys_endÚmÚ
sys_tokensrN  ÚaÚbÚ
tail_starts   &&&&                   r)   Ú	_tokenizeÚResponseGenerator._tokenize  s=  € ð ×Ñ 6Õ)Ø×'Ñ'ˆHØ—M‘MˆEØ"×/Ñ/ˆLà×*×*Ð*Ü'¨Ô1ß ×!;×!;Ð!;Ü—O’OðFôð &*×%8Ñ%8×%AÑ%A×%TÑ%TÐ"Ø×,×,Ð,Ø);×)@Ñ)@Ó)BÐ&Ø&×-Ñ-¨d×.GÑ.GÔHÜ"&ñ #Øð#à!ð#ð )ñ#�ð
 #×6Ò6Øñà*.ðð &ñ‘ð #×)Ñ)¬,°xÓ*NÓO�Ø˜x¨+¨¸Ð@Ð@à×%Ñ% g§n¡nÓ5ˆFØ˜8 k ]°HÐ<Ð<ð !ˆØ×!×!Ð!Ø#×5Ñ5°fÓ=ˆKØ!×1Ñ1°&Ó9ˆIØÔ&Ø +�ð �B�<˜Õ 6Ô)Ø˜8 k ]°MÐAÐAàˆØˆð ˆ
ØˆÛˆAØ��y˜HÔ$Ø˜a•’
áñ	 ð
 ˜Œ>Ø"×6Ò6Ø˜˜*Ð%¨&°&¸)ÀRÐ)HÐ(IÕIñà&+ðð "ñˆJô
 '¤s¨:°vÓ'>Ö?‘	�‘6�A�qØ˜–6Ø�GÙñ @ð ˜Œ{˜w¬¨V«Ô4Ø—‘  x¨Ð 0Ô1Ø×$Ñ$ XÔ.ô ˜“[ˆ
Ø×!×!Ð!Ø#×5Ñ5°fÀJÐQSÅOÐ5ÓTˆKØ˜aÔØ(�
ð �ZÔØ�O‰O˜F 7¨:Ð6Ô7Ø× Ñ  Ô(Øœ˜F›Ô#Ø�O‰O˜F : ;Ð/Ô0Ø× Ñ  Ô-ßØ�xˆHØ(˜MˆMà Ð=Ð=r+   c                ó@  € V\        V4      V3pV P                  P                  V4      pVe   V# / p/ p. p	VP                   F+  p
VP	                  V
4      WŠ3&   V	P                  V
3R34       K-  	  V F6  p\        VP                  VRR7      4      p
W¸V
&   V	P                  V
R34       K8  	  \        V	4      VR&   VP                  '       do   VP                  pVP                  pVR,          P                  VR34       VR3.VR&   VR,          P                  V	4       VP                  WŒ&   VP                  W�&   VP                  '       d�   VP                  pVP                   pVR,          P                  VR34       V'       d   VR3.M. VR&   VR,          P                  V	4       VP"                  WŒ&   V'       d   VP$                  W�&   \'        WtR7      p\)        V P                  4      ^d8”  d   V P                  P+                  4        Wè3V P                  V&   Wè3# )z¥Make a new SequenceStateMachine or fetch it if we 've made it before.

Return also a dictionary that maps the token sequences in the state
machine to their strings.
NF)Úadd_special_tokensr™  rš  Útool)Úinitial)rT  re  rz   Úeos_token_idsrS  rã   rD  rY   rÍ   Úthink_start_tokensÚthink_end_tokensrZ   r¥  r¦  rÌ   Útool_call_start_tokensÚtool_call_end_tokensÚtool_call_startÚtool_call_endr   rƒ   Úclear)r4   r  r  r´   r¤  Ú	cache_keyÚrsÚtransitionsrÎ   Úcommon_stopsrí   ÚwÚtsÚteÚsms   &&&&&          r)   Ú_make_state_machineÚ%ResponseGenerator._make_state_machiner  s  € ð ¤ jÓ 1°=ÐAˆ	Ø×&Ñ&×*Ñ*¨9Ó5ˆØŠ>ØˆIð ˆØˆ	ð ˆØ×(Ô(ˆAØ'×=Ñ=¸aÓ@ˆI�d‰OØ×Ñ !  t Ö-ñ )ó ˆAÜ�i×&Ñ& q¸UÐ&ÓCÓDˆAØ�a‰LØ×Ñ  D 	Ö*ñ ô !% \Ó 2ˆ�HÑð ×!×!Ð!Ø×-Ñ-ˆBØ×+Ñ+ˆBØ˜Õ!×(Ñ(¨"¨kÐ):Ô;Ø)+¨X¨Ð'7ˆK˜Ñ$Ø˜Õ$×+Ñ+¨LÔ9Ø%×1Ñ1ˆI‰MØ%×/Ñ/ˆI‰Mð ×%×%Ð%Ø×1Ñ1ˆBØ×/Ñ/ˆBØ˜Õ!×(Ñ(¨"¨f¨Ô6ß68 B¨ >Ñ"2¸bˆK˜ÑØ˜Õ×&Ñ& |Ô4Ø%×5Ñ5ˆI‰MßØ )× 7Ñ 7�	‘ä! +ÔEˆÜˆt×(Ñ(Ó)¨CÔ/Ø×%Ñ%×+Ñ+Ô-Ø02¨ˆ×!Ñ! )Ñ,àˆ}Ðr+   c                óZ   € V P                   P                  ;'       d    VP                  R J # rO   )r_  r   r¹   )r4   r‹   s   &&r)   Ú_is_batchableÚResponseGenerator._is_batchable­  s%   € Ø×"Ñ"×/Ñ/×EÐE°D·I±IÀÐ4EÐEr+   c                óŠ  a a)€ \         P                  ! \         P                  ! 4       4      pS P                  P	                  4        R pR pR pR pR pRp/ p. o)RV V)3R llp	S P
                  '       d‰   \         P                  P                  \         P                  P                  ^ ,          4      P                  \         P                  4      P                  4       p
\         P                  P                  V
4       S P                  '       Eg]   R pV'       g"   Ve   \        V4      ^ 8”  d   R MRpV	! VR7      pVEe€   Vw  rÛpVEeG   W.P                   8X  Ed6   S P#                  V4      '       Ed    S P%                  WKV4      w  ppppS P+                  S P                  P,                  XTP.                  T4      w  ppS P1                  4        S P2                  P5                  Y_4      w  pp\        T4      \        T4      ,
          pTpT^ 8”  d\   T\        T^ ,          4      8¼  d5   T\        TP7                  ^ 4      4      ,          pTP7                  ^ 4       KR  T^ ,          TR  T^ &    \9        TP:                  TP<                  TP>                  TTTR7      pTP)                  T4       TPA                  T.TPB                  .T.TR T .\E        TT4      .\G        T4      .T.R7      w  pRTRTR	TPH                  R
TR R R1,          RTPJ                  /TT&   ?S P                  PL                  PN                  eP   S P                  PL                  PN                  pTPP                  pS P2                  PS                  TT,
          R7       EK“  VEf    S P                  PU                  VP                   P                   VP                   PV                  VP                   PX                  4      w  ppS P#                  T4      '       g   S P[                  YÛT34       EK"  TP                   pTpS P                  P,                  p/ p\]        TS PL                  P^                  S PL                  P`                  S PL                  Pb                  TR7      pS)Pe                  YÛT34       EKª  RpS)Pe                  WÛV34       EKÂ  Vf   EKÉ  \        V4      ^ 8X  d(   V'       d   R pR pR pR pVPg                  4        R pRpEK   . p S Ph                   EF  p!VPk                  4       w  p"p#V"'       g   V#'       g    EMìV" Fn  p$VV$Pl                  ,          p%V%R,          P)                  V$Pn                  4       V%R,          Pp                  '       g   KS  V Pe                  V$Pl                  4       Kp  	  V" U$u. uFY  p$V$Pr                  '       g   K  V$Pt                  '       d   K+  VV$Pl                  ,          R
,          '       g   KM  V$Pl                  NK[  	  p&p$VPw                  V&4      p'V'Py                  4        F_  w  pw  pp(S P2                  P{                  S P                  P,                  V(R,          VVV,          R
,          P7                  4       R7       Ka  	  ?'V# EF‚  p$VV$Pl                  ,          p%V%R	,          P}                  V$P~                  4       V%R,          P)                  \�        V%R	,          P‚                  V$P~                  V$P„                  V$P†                  V$Pˆ                  V$P~                  ,          P                  4       V$PŠ                  \�        V$Pˆ                  V%R,          V4      4      4       V$PŠ                  e`   V%R,          P)                  R 4       S P2                  P{                  VV$PŽ                  R,          V$P2                  RR7       VV$Pl                   V%R,          Pp                  '       g   EKg  V Pe                  V$Pl                  4       EK…  	  EK  	  S P‘                  V 4      p V '       g   EK@  VP“                  V 4       V  F  pVP7                  VR 4       K  	  EKo  R #   \&         d   pTP)                  T4        R p?EK”  R p?ii ; i  \&         d   pTP)                  T4        R p?EK¿  R p?ii ; iu up$i )NFc                 óV   <€ S'       d   SP                  4       # SP                  V 4      # rO   )rA   r…  )r€  r4   Úunprocessed_requestss   &€€r)   Úget_next_requestÚ5ResponseGenerator._generate.<locals>.get_next_requestÃ  s&   ø€ ß#Ø+×/Ñ/Ó1Ð1à×)Ñ)¨'Ó2Ð2r+   gš™™™™™¹?r  )rÌ   rÍ   r5   rÎ   r}   rÏ   )r§  rµ   ÚcachesÚ
all_tokensÚsamplersÚlogits_processorsÚstate_machinesræ   ÚrqueueÚdetokenizerr¨  r¸   )ru  )Úcompletion_batch_sizeÚprefill_batch_sizeÚprefill_step_sizeÚstreamTºNNN)rz  rt   rO   rÑ   )Jr%   Údefault_streamÚdefault_devicer_  r=  rö   ró   r  ÚrandomrÖ   ÚviewÚuint64r	  r¹   ri  rƒ   r�   rÉ  r°  Ú	ExceptionÚputrÆ  r  r´   r|  r`  Úfetch_nearest_cacherA   rÄ   rÌ   rÍ   r5   Úinsert_segmentsrµ   rE  rG  rÖ  r¸   r  Úprompt_cache_bytesÚprompt_cache_nbytesÚtrim_tor    r’   r‘   Ú_serve_singler   Údecode_concurrencyÚprompt_concurrencyrÙ  rã   Úcloserf  ÚnextÚuidÚprogressrÈ   Úend_of_segmentÚend_of_promptÚextract_cachery  Úinsert_cacheÚ	add_tokenrÕ   rÓ   Úlast_segmentÚcurrent_stateÚmatch_sequencer·   rÙ   r[  rÑ  r�  Úremove)*r4   Úgeneration_streamÚcurrent_modelÚcurrent_samplingÚcurrent_tokenizerÚcurrent_model_keyÚbatch_generatorÚdrain_batchÚbatch_resultsrÎ  r¹   r„  r€  rÕ  r‹   r}   r§  r¨  r¤  r_   r  rÅ  rÎ   ÚcacheÚrestrÏ   ÚNræ   rí  ÚtotalÚactiver�   Úuids_to_removerë   Úprompt_responsesÚgen_responsesÚrr\   Úeos_idsrÐ  r¾  rÍ  s*   f                                        @r)   rj  ÚResponseGenerator._generate°  s¨  ù€ ô ×-Ò-¬b×.?Ò.?Ó.AÓBÐð 	×Ñ×(Ñ(Ô*àˆØÐØ ÐØ ÐØˆØˆØˆà!Ð÷	3ð 	3ð ××ÐÜ—>‘>×)Ñ)¬"¯)©)¯/©/¸!Õ*<Ó=×BÑBÄ2Ç9Á9ÓM×RÑRÓTˆDÜ�I‰I�N‰N˜4Ô à—*—*‘*ØˆGßð (Ò3¼¸MÓ8JÈQÔ8Nñ àð ñ
 +°7Ô;�ð Ó"Ø(/Ñ%� ð $Ó/Ø%¯©Õ3Ø×*Ñ*¨4×0Ó0ð!ØIMÏÉØ-¸óJÑF˜ ¨-¸ð %)×$<Ñ$<Ø×+Ñ+×5Ñ5Ø!ØŸ™Ø%ó	%‘M�B˜	ð ×)Ñ)Ô+Ø"&×"3Ñ"3×"GÑ"GØ)ó#‘K�E˜4ô *-¨V«´s¸4³yÕ)@Ð&Ø*�AØ˜aœ%Ø¤ H¨Q¥KÓ 0Ô0Ø¤ X§\¡\°!£_Ó!5Õ5˜AØ)×-Ñ-¨aÖ0à*2°1­+°a°b¨/˜H Q™KØ!ä+Ø)2×)CÑ)CØ%.×%;Ñ%;Ø$-×$9Ñ$9Ø"+Ø%Ø+=ô�Cð —J‘J˜s”Oà,×<Ñ<Ø"* Ø$(§O¡OÐ#4Ø %˜wØ$*Ð+>Ð,>Ð$?Ð#@Ü"/°°iÓ"@Ð!AÜ+BÀ4Ó+HÐ*IØ(* tð =ó ‘F�Sð ˜sØ  &Ø% y×'<Ñ'<Ø'¨±t¸°tÕ)<Ø&¨×(9Ñ(9ð*�M #Ñ&ð à×*Ñ*×3Ñ3×FÑFÒRØ $× 3Ñ 3× <Ñ <× OÑ O˜Ø!0×!DÑ!D˜Ø×)Ñ)×1Ñ1¸%À&½.Ð1ÔIÚð
 %Ó,ð!Ø+/×+>Ñ+>×+CÑ+CØ ŸJ™J×,Ñ,¨d¯j©j×.@Ñ.@À$Ç*Á*×BRÑBRó,Ñ(˜˜yð  ×-Ñ-¨d×3Ò3Ø×*Ñ*¨F¸TÐ+BÔCÚ à$(§J¡J�MØ(1Ð%Ø(,×(;Ñ(;×(EÑ(EÐ%Ø$&�MÜ&4ØØ.2¯m©m×.NÑ.NØ+/¯=©=×+KÑ+KØ*.¯-©-×*IÑ*IØ0ô'�Oð )×/Ñ/°À$Ð0GÔHÚð
 #'�KØ(×/Ñ/°À$Ð0GÔHÚð !Õ,Ü�}Ó%¨Ô*ß"Ø(,˜Ø+/Ð(Ø,0Ð)Ø,0Ð)Ø'×-Ñ-Ô/Ø*.˜Ø&+˜Úà!#�Ø×*Õ*�AØ6E×6JÑ6JÓ6LÑ3Ð$ mß+·MÚó .˜Ø!.¨q¯u©uÕ!5˜Ø˜xÕ(×,Ñ,¨Q¯Z©ZÔ8Ø! %�=×5×5Ò5Ø*×1Ñ1°!·%±%Ö8ñ	 .ñ "2óá!1˜AØ×+Õ+ô ð !"§¥ô ð *¨!¯%©%Õ0°×AÑAô	 ˜ŸœÙ!1ð ð ð -×:Ñ:¸7ÓC�FØ39·<±<¶>Ñ/˜Ñ/˜e YØ×)Ñ)×6Ñ6Ø ×/Ñ/×9Ñ9Ø% a�LØ!Ø'4°SÕ'9¸/Õ'J×'NÑ'NÓ'Pð	 7ö ñ 4Bð ä*˜Ø!.¨q¯u©uÕ!5˜Ø˜}Õ-×7Ñ7¸¿¹Ô@Ø˜xÕ(×,Ñ,Ü$Ø & }Õ 5× BÑ BØ !§¡Ø !§¡Ø !× 0Ñ 0Ø !§
¡
¨1¯7©7Õ 3× 8Ñ 8Ó :Ø !§¡Ü 4Ø$%§J¡JØ$*¨>Õ$:Ø$5ó!"óôð  Ÿ?™?Ò6Ø" 8Õ,×0Ñ0°Ô6Ø ×-Ñ-×:Ñ:Ø 1Ø !§¡¨Q¥Ø !§¡Ø+6ð	 ;ô ð !.¨a¯e©eÐ 4à! %�=×5×5Ó5Ø*×1Ñ1°!·%±%×8ô= +ñ= +ð| "&×!3Ñ!3°NÓ!C�ß!’>Ø#×*Ñ*¨>Ô:Û-˜ð &×)Ñ)¨#¨tÖ4ô  .ñQ øô0 %ô !ØŸ
™
 1œÞ ûð!ûôH %ô !ØŸ
™
 1œÞ ûð!üòpsI   Å0a* ÎAb Ö)c ×c ×c ×8c á*bá5bâbâb=â b8â8b=c                óx  a€ Vw  orV3R  lp V P                   P                  pV P                   P                  pV P                   P                  pV P	                  WQV4      w  p r‰V P                  V P                   P                  VVP                  V	R7      w  r«V
P                  4       p\        VP                  VP                  VP                  VVR7      pSP                  V4       VP                  e*   \        P                   P                  VP                  4       \#        W%4      p\%        V4      pV P'                  4        V P(                  P+                  V P                   P                  V4      w  pp\-        V4      \-        V4      ,
          Vn        VR,          pVf^   \1        V P                   P                  4      pV P                   P                  e'   V\1        V P                   P                  4      ,          p\3        VVVVP4                  VVVVVP6                  VV P8                  P:                  R7       EF  pVP<                  pV
P?                  VVP@                  4      w  pppVe   Vf   RpSP                  \C        VPD                  VP@                  VVVPF                  VP@                  ,          PI                  4       V\K        VPF                  VPL                  V4      4      4       VPO                  VP@                  4       VPP                  '       d   V PR                  '       d   \U        4       h MVf   EK   M	  SP                  R4       V P(                  PW                  V P                   P                  VV4       R#   \X         d   pSP                  T4        Rp?R# Rp?ii ; i)c                 ó,   <€ SP                  W34       R # rO   )râ  )Útokens_processedÚtokens_totalrÕ  s   &&€r)   rî  Ú1ResponseGenerator._serve_single.<locals>.progressž  s   ø€ Ø�J‰JÐ(Ð7Ö8r+   )r¤  )rÍ   rÌ   r5   rÎ   r}   NrÛ  )r�   r  r}   rµ   ÚsamplerrÓ  r`  r  r¶   Úprompt_progress_callbackrÙ  ru   )-r_  r�   r  r  r°  rÆ  r  r´   Ú
make_staterÄ   rÍ   rÌ   r5   râ  r¹   r%   rÞ  rE  rG  r|  r`  rã  rƒ   rÏ   r   r   rµ   r¶   r  rÙ  rÙ   r×   rÕ   rÓ   r‚   r·   r	  r[  r¸   rã   rÈ   rö   ÚNotImplementedErrorrò  rá  )r4   r„  r‹   rî  r�   r  r  r}   rë   r¤  rÅ  rÎ   Úsm_stateræ   r  rÓ  r   r  r¾  ÚgenrÙ   rö  rõ  r_   rÕ  s   &&                      @r)   rè  ÚResponseGenerator._serve_singleš  s0  ø€ Ø 'Ñˆ�õ	9ð_	à×'Ñ'×-Ñ-ˆEØ×+Ñ+×5Ñ5ˆIØ×-Ñ-×9Ñ9ˆKð +/¯.©.¸ÈTÓ*RÑ'ˆF�A�qØ ×4Ñ4Ø×#Ñ#×-Ñ-ØØ—‘Ø+ð	 5ó ‰MˆBð —}‘}“ˆHô $Ø&×3Ñ3Ø!*×!;Ñ!;Ø%×1Ñ1Ø#ØôˆCð �J‰J�sŒOð �y‰yÒ$Ü—	‘	—‘˜tŸy™yÔ)ô $ DÓ4ˆGÜ 7¸Ó =Ðð ×!Ñ!Ô#Ø×+Ñ+×?Ñ?Ø×#Ñ#×-Ñ-¨vó‰KˆE�4ô &)¨£[´3°t³9Õ%<ˆCÔ"Ø˜q�	ˆIØŠ}Ü)¨$×*=Ñ*=×*CÑ*CÓD�Ø×&Ñ&×2Ñ2Ò>ØÔ.¨t×/BÑ/B×/NÑ/NÓOÕO�Eô 'ØØ#ØØŸ?™?ØØ"3Ø"Ø'Ø!%×!6Ñ!6Ø)1Ø"&§-¡-×"AÑ"A÷ð �ð !$× 1Ñ 1�Ø:<¿(¹(À8ÈSÏYÉYÓ:WÑ7�˜.¨-Ø!Ò-°-Ò2GØ$*�MØ—
‘
ÜØŸ™ØŸ	™	Ø%Ø&ØŸ™ S§Y¡YÕ/×4Ñ4Ó6Ø%Ü,ØŸL™L¨$×*;Ñ*;¸Yóó
ôð × Ñ  §¡Ô+à×#×#Ð#Ø×+×+Ð+Ü1Ó3Ð3Ùà Õ,ÙñMðP �J‰J�tÔð ×Ñ×*Ñ*Ø×#Ñ#×-Ñ-¨y¸%öøô ô 	Ø�J‰J�q�MŠMûð	ús%   ŽL(N Ì7N Í
AN ÎN9ÎN4Î4N9c          	      óV   <€ V ^8„  d   QhRS[ RS[RS[S[S[S[.R3,          ,          /# )rj   r„  Úgeneration_argsÚprogress_callbackN)r¾   r°   r   r   r¢   )rn   rh   s   "€r)   ro   ra    s<   ø€ ÷ ;ñ ;á"ð;ñ -ð;ñ $¡H©c±3¨Z¸Ð-=Õ$>Õ?ñ	;r+   c                óÖ   aa€ \        4       oV P                  P                  SW34       VV3R  lpSP                  4       p\	        V\
        4      '       d   VhV\        WT! 4       4      3# )c               3   óº   <"  €  SP                  4       p V f   R# \        V \        4      '       d   V h\        V \        4      '       d   Se   S! V !   KQ  V x € KW  5irÆ   )rz   rX   rá  rT  )Úresponser  Úresponse_queues    €€r)   Ú_innerÚ*ResponseGenerator.generate.<locals>._inner  sU   øé € ØØ)×-Ñ-Ó/�ØÒ#ÙÜ˜h¬	×2Ò2Ø"�NÜ˜h¬×.Ò.Ø(Ò4Ù)¨8Ò4ÙØ”ùs   ƒAA)r
   rd  râ  rz   rX   rá  rî   )r4   r„  r  r  r  ræ   r  s   &&&f  @r)   ÚgenerateÚResponseGenerator.generate  s_   ù€ ô ›ˆØ�‰×Ñ˜>¨7ÐDÔEö	ð × Ñ Ó"ˆÜ�cœ9×%Ò%ØˆIàÔ+¨C°³Ó:Ð:Ð:r+   c                ó.   € V P                   P                  # rO   )r_  r  rÉ   s   &r)   r  ÚResponseGenerator.cli_args  s   € à×"Ñ"×+Ñ+Ð+r+   )	rk  rö   rh  re  ri  rf  r_  r`  rd  rO   )r™  )rW   rb   rc   rd   r8   ro  r„   r|  r…  r�  rƒ  r°  rÆ  rÉ  rj  rè  r   Úpropertyr  re   rf   rg   s   @r)   r]  r]  ¸  sl   ø‡ € ÷(ð (ò'ò'ò	ô
,ò&ò(
òl>ô\9òvFòh5òTf÷P;ò ;ð8 ñ,ó ö,r+   r]  c                   ó  a a€ ] tR tRt oRR/V3R lV 3R llltR tRV3R lR lltRV3R	 lR
 lltR tR t	RR lt
R tRV3R lR lltV3R lR ltR V3R lR lltV3R lR ltV3R lR ltR tR tR tRtVtV ;t# )!Ú
APIHandleri#  Úsystem_fingerprintNc                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )rj   Úresponse_generatorr'  )r]  r   rB   )rn   rh   s   "€r)   ro   ÚAPIHandler.__annotate__$  s#   ø€ ÷ *ñ *á-ð*ñ %¡S�Mñ	*r+   c               ó¬   <€ \        \        P                  ! 4       4      V n        Wn        T;'       g    \	        4       V n        \        SV `  ! V/ VB  R# )z)
Create static request specific metadata
N)r¢   r  Úcreatedr)  r*   r'  Úsuperr8   )r4   r)  r'  r‹   ÚkwargsÚ	__class__s   &&$*,€r)   r8   ÚAPIHandler.__init__$  sC   ø€ ô œ4Ÿ9š9›;Ó'ˆŒØ"4ÔØ"4×"PÐ"PÔ8NÓ8PˆÔÜ‰Ò˜$Ð) &Ô)r+   c                óL  € V P                   P                  P                  pV P                  P	                  R 4      pRV9   d   V P                  RR4       M*W!9   d%   V P                  RV4       V P                  RR 4       V P                  RR4       V P                  RR4       R# )ÚOriginÚ*zAccess-Control-Allow-OriginÚVaryzAccess-Control-Allow-MethodszAccess-Control-Allow-HeadersN)r)  r  Úallowed_originsÚheadersrz   Úsend_header)r4   r5  Úorigins   &  r)   Ú_set_cors_headersÚAPIHandler._set_cors_headers3  s�   € Ø×1Ñ1×:Ñ:×JÑJˆØ—‘×!Ñ! (Ó+ˆØ�/Ô!Ø×ÑÐ:¸CÕ@ØÔ&Ø×ÑÐ:¸FÔCØ×Ñ˜V XÔ.Ø×ÑÐ7¸Ô=Ø×ÑÐ7¸Ö=r+   c                ó    <€ V ^8„  d   QhRS[ /# ©rj   Ústatus_code©r¢   )rn   rh   s   "€r)   ro   r*  >  s   ø€ ÷ !ñ !±3ñ !r+   c                ól   € V P                  V4       V P                  R R4       V P                  4        R# )úContent-typezapplication/jsonN©Úsend_responser7  r9  ©r4   r=  s   &&r)   Ú_set_completion_headersÚ"APIHandler._set_completion_headers>  s-   € Ø×Ñ˜;Ô'Ø×Ñ˜Ð);Ô<Ø×ÑÖ r+   c                ó    <€ V ^8„  d   QhRS[ /# r<  r>  )rn   rh   s   "€r)   ro   r*  C  s   ø€ ÷ !ñ !©sñ !r+   c                ó�   € V P                  V4       V P                  R R4       V P                  RR4       V P                  4        R# )r@  ztext/event-streamzCache-Controlzno-cacheNrA  rC  s   &&r)   Ú_set_stream_headersÚAPIHandler._set_stream_headersC  s=   € Ø×Ñ˜;Ô'Ø×Ñ˜Ð)<Ô=Ø×Ñ˜¨*Ô5Ø×ÑÖ r+   c                óH   € V P                  ^Ì4       V P                  4        R# )éÌ   N)rD  Úend_headersrÉ   s   &r)   Ú
do_OPTIONSÚAPIHandler.do_OPTIONSI  s   € Ø×$Ñ$ SÔ)Ø×ÑÖr+   c                ó   € RV P                   RV P                  RV P                  /pV P                  V9  d?   V P                  R4       V P	                  4        V P
                  P                  R4       R# V P                  P                  R4      pVfc   V P                  R4       V P	                  4        V P
                  P                  \        P                  ! R	R
/4      P                  4       4       R#  \        V4      pT P                  P                  T4      p \        P                   ! TP#                  4       4      T n        \(        P,                  ! 4       P/                  \(        P0                  4      '       d<   \        P                  ! T P$                  RR7      p\(        P2                  ! RT 24       \5        T P$                  \6        4      '       gž   \        P                  ! T P$                  RR7      p\(        P*                  ! RT 24       T P                  R4       T P	                  4        T P
                  P                  \        P                  ! R	R/4      P                  4       4       R# T P$                  P                  RR4      T n        T P$                  P                  RR4      T n        T P$                  P                  RR4      T n        T P$                  P                  RR4      T n        T P$                  P                  RT P@                  PB                  PD                  4      T n"        T P$                  P                  RR4      T n#        T P$                  P                  RR4      T n$        T PH                  f@   T P$                  P                  RT P@                  PB                  PH                  4      T n$        T P$                  P                  RT P@                  PB                  PJ                  4      T n&        T P$                  P                  R T P@                  PB                  PN                  4      T n'        T P$                  P                  R!T P@                  PB                  PP                  4      T n(        T P$                  P                  R"T P@                  PB                  PR                  4      T n)        T P$                  P                  R#R$4      T n*        T P$                  P                  R%^4      T n+        T P$                  P                  R&R$4      T n,        T P$                  P                  R'^4      T n-        T P$                  P                  R(R$4      T n.        T P$                  P                  R)^4      T n/        T P$                  P                  R*R$4      T n0        T P$                  P                  R+R$4      T n1        T P$                  P                  R,R4      T n2        T P$                  P                  R-R4      T n3        T P$                  P                  R.R24      T n4        T P$                  P                  R/R4      T n5        T P$                  P                  R04      T n6        T Po                  4        T P$                  P                  R14      pT;'       g    . p\5        T\p        4      '       d   T.MTpYP                  ,          ! 4       pT Ps                  Yv4       R#   \         de    T P                  R4       T P	                  4        T P
                  P                  \        P                  ! R	R/4      P                  4       4        R# i ; i  \        P&                   d™   p\(        P*                  ! RT RTP#                  4        24       T P                  R4       T P	                  4        T P
                  P                  \        P                  ! R	RT 2/4      P                  4       4        Rp?R# Rp?ii ; i)3z*
Respond to a POST request from a client.
z/v1/completionsz/v1/chat/completionsz/chat/completionsé”  ó	   Not FoundNúContent-Lengthi›  Úerrorz!Content-Length header is requiredi�  zInvalid Content-Length headerzJSONDecodeError: z - Raw body: zInvalid JSON in request body: Ú	©ÚindentzIncoming Request Body: zInvalid Request Body: z#Request should be a JSON dictionaryrÚ  FÚstream_optionsr�   r  r  r¶   ÚadaptersÚmax_completion_tokensrµ   r›   rœ   r�   rž   r¨   ç        r©   rª   r«   r¬   r­   rŸ   r    r§   r·   r¸   r¹   rº   ru   rÑ   ):Úhandle_text_completionsÚhandle_chat_completionsÚpathrD  rL  ÚwfileÚwriter6  rz   rE   rF   rD  r¢   rS   ÚrfileÚreadr…   ÚdecodeÚbodyrT   rU   rS  Ú	getLoggerÚisEnabledForÚDEBUGÚdebugrX   rm   rÚ  rW  Úrequested_modelÚrequested_draft_modelr)  r  r¶   r’   rµ   Útempr›   rœ   r�   rž   r¨   r©   rª   r«   r¬   r­   rŸ   r    r§   r·   r¸   r¹   rº   Úvalidate_model_parametersrB   Úhandle_completion)r4   Úrequest_factoriesÚcontent_lengthÚraw_bodyr_   Ú
debug_bodyr´   r„  s   &       r)   Údo_POSTÚAPIHandler.do_POSTM  sð  € ð
 ˜t×;Ñ;Ø" D×$@Ñ$@Ø ×!=Ñ!=ð
Ðð �9‰9Ð-Ô-Ø×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×Ñ˜\Ô*Ùð Ÿ™×)Ñ)Ð*:Ó;ˆØÒ!Ø×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×ÑÜ—
’
˜GÐ%HÐIÓJ×QÑQÓSôñ ð	Ü  Ó0ˆNð —:‘:—?‘? >Ó2ˆð		ÜŸ
š
 8§?¡?Ó#4Ó5ˆDŒIô ×ÒÓ×+Ñ+¬G¯M©M×:Ò:ÜŸš D§I¡I°dÔ;ˆJÜ�MŠMÐ3°J°<Ð@ÔAÜ˜$Ÿ)™)¤T×*Ò*ÜŸš D§I¡I°dÔ;ˆJÜ�MŠMÐ2°:°,Ð?Ô@Ø×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×ÑÜ—
’
˜GÐ%JÐKÓL×SÑSÓUôñ ð —i‘i—m‘m H¨eÓ4ˆŒØ"Ÿi™iŸm™mÐ,<¸dÓCˆÔØ#Ÿy™yŸ}™}¨W°oÓFˆÔØ%)§Y¡Y§]¡]°=À/Ó%RˆÔ"Ø $§	¡	§¡Ø × 7Ñ 7× @Ñ @× QÑ Qó!
ˆÔð —y‘y—}‘} Z°Ó6ˆŒØŸ)™)Ÿ-™-Ð(?ÀÓFˆŒØ�?‰?Ò"Ø"Ÿi™iŸm™mØ˜d×5Ñ5×>Ñ>×IÑIóˆDŒOð  Ÿ9™9Ÿ=™=Ø˜4×2Ñ2×;Ñ;×@Ñ@ó
ˆÔð —Y‘Y—]‘] 7¨D×,CÑ,C×,LÑ,L×,RÑ,RÓSˆŒ
Ø—Y‘Y—]‘] 7¨D×,CÑ,C×,LÑ,L×,RÑ,RÓSˆŒ
Ø—Y‘Y—]‘] 7¨D×,CÑ,C×,LÑ,L×,RÑ,RÓSˆŒ
Ø"&§)¡)§-¡-Ð0DÀcÓ"JˆÔØ'+§y¡y§}¡}Ð5NÐPRÓ'SˆÔ$Ø $§	¡	§¡Ð.@À#Ó FˆÔØ%)§Y¡Y§]¡]Ð3JÈBÓ%OˆÔ"Ø!%§¡§¡Ð/BÀCÓ!HˆÔØ&*§i¡i§m¡mÐ4LÈbÓ&QˆÔ#Ø#Ÿy™yŸ}™}Ð->ÀÓDˆÔØ!ŸY™YŸ]™]¨?¸CÓ@ˆÔØŸ)™)Ÿ-™-¨°dÓ;ˆŒØŸ	™	Ÿ™ j°%Ó8ˆŒØ ŸI™IŸM™M¨.¸"Ó=ˆÔØ—I‘I—M‘M &¨$Ó/ˆŒ	Ø$(§I¡I§M¡MÐ2HÓ$IˆÔ!Ø×&Ñ&Ô(ð —Y‘Y—]‘] 6Ó*ˆ
Ø×%Ð% 2ˆ
Ü%/°
¼C×%@Ò%@�j‘\Àjˆ
ð $§I¡IÖ.Ó0ˆØ×Ñ˜wÖ3øôU ô 	Ø×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×ÑÜ—
’
˜GÐ%DÐEÓF×MÑMÓOôò ð	ûô ×#Ñ#ô 	Ü�MŠMÐ-¨a¨S°¸h¿o¹oÓ>OÐ=PÐQÔRØ×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×ÑÜ—
’
˜GÐ'EÀaÀSÐ%IÐJÓK×RÑRÓTôõ ûð	ús,   Ã8[. Ä)]  Û.A+]Ý]Ý `Ý5B`à`c                ó’  € \        W4      pV'       d   Vf   R # \        Wr4      '       g>    \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p\        V RV 24      hVe	   Wv9   d   R # Ve   Ws8  d   \        V RV 24      hVe   Wt8”  d   \        V RV 24      hR # R #   \         d    TP                  p Lmi ; i)Nc              3   ó8   "  € T F  qP                   x € K  	  R # 5irO   )rW   )rP   Úets   & r)   rQ   Ú'APIHandler._validate.<locals>.<genexpr>Â  s   é € ÐD±m°§¦³mùrà   z must be of type z must be at least z must be at most )ÚgetattrrX   rT  Ú	TypeErrorrW   rS   )	r4   ÚnameÚexpected_typeÚmin_valÚmax_valÚoptionalÚ	whitelistÚvalueÚalloweds	   &&&&&&&  r)   Ú	_validateÚAPIHandler._validate´  sÓ   € ô ˜Ó#ˆß˜šÙÜ˜%×/Ò/ð1ßœ%ÑD±mÓDŸ%™%ÑD±mÓDÓD�ô  ˜vÐ%6°w°iÐ@ÓAÐAØÒ  UÔ%7ÙØÒ 5¤?Ü ˜vÐ%7¸°yÐAÓBÐBØÒ 5¤?Ü ˜vÐ%6°w°iÐ@ÓAÐAñ $3Ñøô ô 1Ø'×0Ñ0’ð1ús   ¬
B, ·!B, Â,CÃCc                ó&  € V P                  R\        4       V P                  R\        ^ R7       V P                  R\        \        3^ R7       V P                  R\        \        3^ ^R7       V P                  R\        ^ R7       V P                  R\        \        3^ ^R7       V P                  R	\        ^ R7       V P                  R
\        \        3^ R7       V P                  R\        ^ R7       V P                  R\        \        34       V P                  R\        ^ R7       V P                  R\        \        34       V P                  R\        ^ R7       V P                  R\        4       V P                  R\        ^ ^R.R7       V P                  R\        ^ ^R7       V P                  R\        ^ ^R7       V P                  R\        4       V P                  R\        RR7       V P                  R\        RR7       V P                  R\
        RR7       V P                  eJ    V P                  P                  4        UUu/ uF  w  r\        V4      \        V4      bK  	  uppV n        R# R# u uppi   \         d    \        R4      hi ; i)zHValidate that the passed model parameters have correct types and values.rÚ  rµ   )r{  r›   rœ   )r{  r|  r�   rž   r¶   r¨   r©   rª   r«   r¬   r­   r·   r¸   )r{  r|  r~  rŸ   r    rh  r’   T)r}  r¹   r§   Nz)logit_bias must be a dict of int to floatrÑ   )	r�  r»   r¢   r¡   rB   rm   r§   ry  rS   )r4   ÚkÚvs   &  r)   rk  Ú$APIHandler.validate_model_parametersÍ  s   € à�‰�x¤Ô&Ø�‰�|¤S°!ˆÔ4Ø�‰�}¤u¬c l¸AˆÔ>Ø�‰�w¤¬ °aÀˆÔCØ�‰�w¤¨QˆÔ/Ø�‰�w¤¬ °aÀˆÔCØ�‰Ð)¬3¸ˆÔ:Ø�‰Ð+¬e´S¨\À1ˆÔEØ�‰Ð0´#¸qˆÔAØ�‰Ð)¬E´3¨<Ô8Ø�‰Ð.´¸QˆÔ?Ø�‰Ð*¬U´C¨LÔ9Ø�‰Ð/´¸aˆÔ@Ø�‰�z¤4Ô(Ø�‰�~¤s°A¸rÈbÈTˆÔRØ�‰Ð(¬%¸ÀAˆÔFØ�‰�¬°qÀ!ˆÔDØ�‰Ð(¬#Ô.Ø�‰�y¤#°ˆÔ5Ø�‰�vœs¨TˆÔ2Ø�‰�|¤T°DˆÔ9à�?‰?Ò&ðNØ@DÇÁ×@UÑ@UÔ@WÔ"XÑ@W¹¸¤3 q£6¬5°«8Ò#3Ñ@WÒ"X�–ñ 'ùã"XøÜô NÜ Ð!LÓMÐMðNús   È)I9 É I3É&	I9 É3I9 É9Jc                ód  <€ V ^8„  d   QhRS[ RS[S[R,          R3,          RS[S[,          RS[S[,          RS[S[,          RS[S[S[,          ,          RS[S[S[S[S[ S[	3,          ,          ,          ,          R	S[S[S[,          ,          R
S[S[S[ ,          ,          RS[S[ ,          RS[
/# )rj   r‚   rÙ   NÚprompt_token_countÚcompletion_token_countrÏ   Útoken_logprobsrÚ   Útokensr[   Úreasoning_textrJ  )Úlengthru   )rB   r   r   r   r¢   r   r¡   r   r   r   rm   )rn   rh   s   "€r)   ro   r*  ë  sØ   ø€ ÷ kñ káðkñ ™WÐ%5Õ6¸Ð<Õ=ðkñ %¡S�Mð	kñ
 !)©¥ðkñ %¡S�Mðkñ !¡¡e¥Õ-ðkñ ™T¡%©©S±#¨X­Õ"7Õ8Õ9ðkñ ™™c�Õ#ðkñ ™T¡#�YÕ'ðkñ !¡�ðkñ 
ñkr+   c                óv  € T;'       g    . pT;'       g    . pT	;'       g    . p	RV P                   RV P                  RV P                  RV P                  RV P                  RR^ RV/./pV'       dB   R	V Uu. uF   qÝ'       d   \        V^ ,          VR
7      M/ NK"  	  up/VR,          ^ ,          R&   MDV'       d=   R	\        W†4       UUu. uF  w  rÞ\        WÞR7      NK  	  upp/VR,          ^ ,          R&   V P                  '       gb   \        V\        4      '       d   \        V\        4      '       g   \        R4      hRVRVRW4,           /VR&   Ve   V^ 8¼  d   RV/VR,          R&   VR,          ^ ,          pV P                  P                  R4      '       dY   V P                  '       d   RMRpRR/VV&   V'       d   WV,          R	&   V
'       d   W¯V,          R&   V	'       d   WŸV,          R&   V# V P                  R8X  d   VP                  VR7       V# \        RV P                   24      hu upi u uppi )a  
Generate a single response packet based on response type (stream or
not), completion type and parameters.

Args:
    text (str): Text generated by model
    finish_reason (Union[Literal["length", "stop"], None]): The reason the
      response is being sent: "length", "stop" or `None`.
    prompt_token_count (Optional[int]): The number of tokens in the prompt,
      used to populate the "usage" field (not used when stream).
    completion_token_count (Optional[int]): The number of tokens in the
      response, used to populate the "usage" field (not used when stream).
    prompt_cache_count (Optional[int]): The portion of prompt_token_count
      that was found in the cache when servicing the request.
    token_logprobs (Optional[List[float]]): The log probabilities per token,
      in token order.
    top_tokens (Optional[List[Tuple[Dict[str, Any]]]]): List of outputs from
      _format_top_logprobs, giving info on the top N tokens at each token position.
    tokens (Optional[List[int]]): List of tokens to return with logprobs structure
    tool_calls (Optional[List[str]]): List of tool calls.
    reasoning_text (Optional[str]): The reasoning text generated by the model.

Returns:
    dict: A dictionary containing the response, in the same format as
      OpenAI's API.
r;   r'  Úobjectr�   r,  Úchoicesr@   rÙ   ry   )r¸   r·   )r;   rØ   z8Response type is complete, but token counts not providedÚprompt_tokensÚcompletion_tokensÚtotal_tokensÚusageÚcached_tokensÚprompt_tokens_detailsúchat.completionÚdeltar†   rx   rt   rš  r[   Útext_completionrá   zUnsupported response type: )Ú
request_idr'  Úobject_typerh  r,  rm   rU  rÚ  rX   r¢   rS   Ú
startswithrž  )r4   r‚   rÙ   rˆ  r‰  rÏ   rŠ  rÚ   r‹  r[   rŒ  r¸   r  rN  rO  ÚchoiceÚkey_names   &&&&&&&&&&&      r)   Úgenerate_responseÚAPIHandler.generate_responseë  sW  € ðN (×-Ð-¨2ˆØ!×'Ð' RˆØ×%Ð% 2ˆ
ð �$—/‘/Ø  $×"9Ñ"9Ø�d×&Ñ&Ø�T×)Ñ)Ø�t—|‘|Øà˜QØ# ]ððð
ˆ÷ àÙEQóÙEQÀ¶!”D˜˜1�¨AÕ.¸Ò;Á\ñð2ˆH�YÕ Õ" :Ò.÷
 àÜ69¸&Ô6QôÙ6Q©d¨a”D˜A×)Ñ6Qòð2ˆH�YÕ Õ" :Ñ.ð �{�{ˆ{äÐ-¬s×3Ò3ÜÐ5´s×;Ò;ä ØNóð ð
  Ð!3Ø#Ð%;ØÐ 2Õ Kð!ˆH�WÑð
 "Ò-Ð2DÈÔ2Ià#Ð%7ð>�˜Õ!Ð"9Ñ:ð ˜)Õ$ QÕ'ˆð ×Ñ×&Ñ&Ð'8×9Ò9Ø"&§+§+ +‘w°9ˆHØ &¨Ð4ˆF�8ÑßØ.2�xÕ  Ñ+ßØ0>�xÕ  Ñ-ßØ1;�xÕ  Ñ.ð ˆð ×ÑÐ!2Ô2Ø�M‰M˜tˆMÔ$ð ˆô Ð:¸4×;KÑ;KÐ:LÐMÓNÐNùò[ùós   Á7&H0Ã
H5c                ó6   <€ V ^8„  d   QhRS[ RS[S[,          /# )rj   r„  r´   )r¾   r   rB   )rn   rh   s   "€r)   ro   r*  X  s$   ø€ ÷ xñ xÑ):ð xÉÉSÍ	ñ xr+   c                ó<  a € \        \        S P                  S P                  S P                  R7      \        S P                  S P                  S P                  S P                  S P                  S P                  R7      \        S P                  S P                  S P                  S P                   S P"                  S P$                  S P&                  R7      VS P(                  S P*                  S P,                  S P.                  S P0                  S P2                  R7
      pV 3R lp S P4                  P7                  VVVR7      w  rVS PJ                  '       d9   S PM                  ^È4       S P=                  4        \N        PP                  ! R
4       M'S P;                  ^È4       \N        PP                  ! R4       \S        TPT                  TPV                  S PJ                  4      pR	p	Rp
RpRpRp. pRp. p. p. p T EFÿ  p\N        PP                  ! TPX                  4       TPZ                  R8X  d   TTPX                  ,          pMeTPZ                  R8X  d   TTPX                  ,          pM@TPZ                  R8X  d0   T	R8X  d   TP]                  T4       RpRpTTPX                  ,          pTP]                  TP^                  4       TP,                  '       d   TP]                  TP`                  4       TP.                  ^ 8”  d   TP]                  TPb                  4       S PJ                  '       d¦   TPZ                  R8w  d•   T'       g   T'       g	   T'       d}   S Pe                  TR	T! T4      TR7      pS P>                  PA                  R\B        PD                  ! T4       R2PI                  4       4       S P>                  Pg                  4        RpRp. pTPh                  e   TPh                  p
TPZ                  p	EK  	  T	R8X  d   T'       d   TP]                  T4       RpT
R8X  d   T'       d   Rp
S PJ                  '       Edw   S Pe                  TT
T! T4      TR7      pS P>                  PA                  R\B        PD                  ! T4       R2PI                  4       4       S P>                  Pg                  4        S Pj                  e®   S Pj                  R,          '       d•   S Pm                  \o        TPp                  4      \o        T4      TPr                  4      pS P>                  PA                  R\B        PD                  ! T4       R2PI                  4       4       S P>                  Pg                  4        S P>                  PA                  RPI                  4       4       S P>                  Pg                  4        EM=S Pe                  TT
\o        TPp                  4      \o        T4      TPr                  TTTTT! T4      R7
      p\N        Pt                  ! 4       Pw                  \N        Px                  4      '       d2   \B        PD                  ! TRR7      p\N        PP                  ! RT 24       \B        PD                  ! T4      PI                  4       pS P{                  R\G        \o        T4      4      4       S P=                  4        S P>                  PA                  T4       S P>                  Pg                  4        TP}                  4        R	#   \8         du   pS P;                  R4       S P=                  4        S P>                  PA                  \B        PD                  ! R\G        T4      /4      PI                  4       4        R	p?R	# R	p?ii ; i  TP}                  4        i ; i)z´
Generate a response to a prompt and send it to the client in a single batch.

Args:
    prompt (List[int]): The tokenized prompt.
    stop_words (List[str]): A list of stop words
)r�   r‘   r’   )r›   rœ   r�   rž   rŸ   r    )r§   r¨   r©   rª   r«   r¬   r­   )
r�   r²   r³   r´   rµ   r¶   r·   r¸   r¹   rº   c                 ó   <€ \         P                  ! R V  RV 24       SP                  '       dO   RV  RV R2P                  4       pSP                  P                  V4       SP                  P                  4        R# R# )zPrompt processing progress: Ú/z: keepalive ú

N)rU   rw  rÚ  rD  r^  r_  Úflush)Ú	processedr  Úmsgr4   s   && €r)   Úkeepalive_callbackÚ8APIHandler.handle_completion.<locals>.keepalive_callback‚  sj   ø€ Ü�LŠLÐ7¸	°{À!ÀEÀ7ÐKÔLØ�{�{ˆ{Ø$ Y K¨q°°°tÐ<×CÑCÓE�Ø—
‘
× Ñ  Ô%Ø—
‘
× Ñ Ö"ñ r+   )r  rP  rS  NzStarting stream:zStarting completion:ru   rw   Frš  r´  r™  T)r[   rŒ  zdata: r¥  r[   Úinclude_usagezdata: [DONE]

)rŠ  rÚ   r‹  rŒ  r[   rT  rU  zOutgoing Response: rR  )?r°   rŽ   rh  ri  r’   r™   r›   rœ   r�   rž   rŸ   r    r¥   r§   r¨   r©   rª   r«   r¬   r­   rµ   r¶   r·   r¸   r¹   rº   r)  r   rá  rD  rL  r^  r_  rE   rF   rB   rD  rÚ  rH  rU   rg  r-   r5   r6   r‚   rÖ   rã   rÕ   rØ   rÚ   rŸ  r¦  rÙ   rW  Úcompletion_usage_responserƒ   r}   rÏ   rd  re  rf  r7  ru   )r4   r„  r´   r‹   r©  ræ   r  r_   Útool_formatterÚ
prev_staterÙ   rŒ  Úmade_tool_callr]   r[   r‚   r‹  rŠ  rÚ   r  ÚrespÚresponse_debugÚresponse_jsons   f&&                    r)   rl  ÚAPIHandler.handle_completionX  sù  ø€ ô #Ü"Ø×*Ñ*Ø×0Ñ0ØŸ™ôô
 'Ø ×,Ñ,Ø—j‘jØ—j‘jØ—j‘jØ $× 4Ñ 4Ø"×0Ñ0ôô ,ØŸ?™?Ø#'×#:Ñ#:Ø(,×(DÑ(DØ!%×!6Ñ!6Ø&*×&@Ñ&@Ø"&×"8Ñ"8Ø'+×'BÑ'Bôð "Ø—‘Ø!×2Ñ2Ø—]‘]Ø×*Ñ*Ø—‘Ø!%×!:Ñ!:ô;
ˆõD	#ð
	Ø ×3Ñ3×<Ñ<ØØØ"4ð =ó ‰MˆCð �;�;ˆ;Ø×$Ñ$ SÔ)Ø×ÑÔÜ�MŠMÐ,Õ-à×(Ñ(¨Ô-Ü�MŠMÐ0Ô1ô +¨3¯?©?¸G¿M¹MÈ4Ï;É;ÓWˆð ˆ
ØˆØˆØˆØˆ	Øˆ
ØˆØˆØˆØˆ
ðb	Ü�Ü—’˜cŸh™hÔ'ð —9‘9 Ô+Ø" c§h¡hÕ.‘NØ—Y‘Y &Ô(Ø §¡Õ)‘IØ—Y‘Y (Ô*Ø! VÔ+Ø"×)Ñ)¨)Ô4Ø$&˜	Ø)-˜Ø˜CŸH™HÕ$�Dð —‘˜cŸi™iÔ(Ø—=—=�=Ø"×)Ñ)¨#¯+©+Ô6Ø×$Ñ$ qÔ(Ø×%Ñ% c§n¡nÔ5ð —K—K�KØŸ	™	 VÔ+ß§¯~à×1Ñ1ØØÙ#1°*Ó#=Ø'5ð	 2ó �Dð —J‘J×$Ñ$ v¬d¯jªj¸Ó.>Ð-?¸tÐ%D×%KÑ%KÓ%MÔNØ—J‘J×$Ñ$Ô&Ø%'�NØ�DØ!#�Jà×$Ñ$Ò0Ø$'×$5Ñ$5�Mà ŸY™Y“
ñW  ðZ ˜VÔ#¯	Ø×!Ñ! )Ô,Ø!%�à Ô&¯>Ø ,�à�{�{‰{Ø×-Ñ-ØØ!Ù-¨jÓ9Ø#1ð	 .ó �ð —
‘
× Ñ  6¬$¯*ª*°TÓ*:Ð);¸4Ð!@×!GÑ!GÓ!IÔJØ—
‘
× Ñ Ô"à×'Ñ'Ò3Ø×+Ñ+¨O×<Ô<à×9Ñ9Ü˜CŸJ™J›Ü˜F›Ø×.Ñ.ó�Dð
 —J‘J×$Ñ$ v¬d¯jªj¸Ó.>Ð-?¸tÐ%D×%KÑ%KÓ%MÔNØ—J‘J×$Ñ$Ô&Ø—
‘
× Ñ Ð!3×!:Ñ!:Ó!<Ô=Ø—
‘
× Ñ Ö"à×-Ñ-ØØ!Ü˜Ÿ
™
“OÜ˜“KØ×*Ñ*Ø#1Ø)Ø!Ø#1Ù-¨jÓ9ð .ó �ô ×$Ò$Ó&×3Ñ3´G·M±M×BÒBÜ%)§Z¢Z°¸TÔ%B�NÜ—M’MÐ$7¸Ð7GÐ"HÔIä $§
¢
¨4Ó 0× 7Ñ 7Ó 9�Ø× Ñ Ð!1´3´s¸=Ó7IÓ3JÔKØ× Ñ Ô"Ø—
‘
× Ñ  Ô/Ø—
‘
× Ñ Ô"à�H‰HŽJøôA ô 	Ø×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×ÑœTŸZšZ¨´#°a³&Ð(9Ó:×AÑAÓCÔDÝûð		ûð@ �H‰H�Jús`   Ä% \ Ç6C^	 ËA^	 Ì,^	 Í^	 Í^	 ÍB5^	 Ð!^	 Ð-^	 ÑB^	 ÓH^	 Ü^ÜA)^Þ^Þ	^c                ó\   <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[ S[,          /# )rj   rˆ  r‰  rÏ   )r   r¢   )rn   rh   s   "€r)   ro   r*    s5   ø€ ÷ ñ á$¡S�Mðñ !)©¥ðñ %¡S�Mñ	r+   c                óÀ   € R V P                   RV P                  RRRV P                  RV P                  R. RRVR	VR
W,           //pVe   V^ 8¼  d   RV/VR,          R&   V# )r;   r'  r�  r—  r�   r,  r�  r”  r‘  r’  r“  r•  r–  )rš  r'  rh  r,  )r4   rˆ  r‰  rÏ   r  s   &&&& r)   r¬  Ú$APIHandler.completion_usage_response  sŠ   € ð �$—/‘/Ø  $×"9Ñ"9ØÐ'Ø�T×)Ñ)Ø�t—|‘|Ø�rØØÐ!3Ø#Ð%;ØÐ 2Õ Kðð
ˆð Ò)Ð.@ÀAÔ.EàÐ!3ð:ˆH�WÕÐ5Ñ6ð ˆr+   c                ó    <€ V ^8„  d   QhRS[ /# rI  ©r¾   )rn   rh   s   "€r)   ro   r*  +  s   ø€ ÷ 
ñ 
Ñ):ñ 
r+   c           	     ó"  € V P                   pRV9   g   Q R4       hR\        P                  ! 4        2V n        V P                  '       d   RMRV n        \        RRVR,          VP                  R4      ;'       g    R	VP                  R
4      4      # )zt
Handle a chat completion request.

Returns:
    mx.array: A mx.array of the tokenized prompt from the request body
rk   z Request did not contain messagesz	chatcmpl-zchat.completion.chunkr—  rÁ   rw   r6   Nrl   )rc  rC   rD   rš  rÚ  r›  r¾   rz   )r4   rc  s   & r)   r\  Ú"APIHandler.handle_chat_completions+  s†   € ð �y‰yˆØ˜TÔ!ÐEÐ#EÓEÐ!ð &¤d§j¢j£l ^Ð4ˆŒØ6:·k·k°kÑ2ÐGXˆÔä ØØØ�ÕØ�H‰H�WÓ×%Ð% Ø�H‰H�^Ó$ó
ð 	
r+   c                ó    <€ V ^8„  d   QhRS[ /# rI  r¸  )rn   rh   s   "€r)   ro   r*  A  s   ø€ ÷ 
ñ 
Ñ):ñ 
r+   c                óº   € R\         P                  ! 4        2V n        RV n        RV P                  9   g   Q R4       h\        RV P                  R,          . RR4      # )zt
Handle a text completion request.

Returns:
    mx.array: A mx.array of the tokenized prompt from the request body
zcmpl-r™  r}   z Request did not contain a promptr‚   N)rC   rD   rš  r›  rc  r¾   rÉ   s   &r)   r[  Ú"APIHandler.handle_text_completionsA  s]   € ð "¤$§*¢*£, Ð0ˆŒØ,ˆÔØ˜4Ÿ9™9Ô$ÐHÐ&HÓHÐ$Ü ØØ�I‰I�hÕØØØó
ð 	
r+   c                ó*  € V P                   P                  R4      '       d   V P                  4        R# V P                   R8X  d   V P                  4        R# V P	                  R4       V P                  4        V P                  P                  R4       R# )z)
Respond to a GET request from a client.
z
/v1/modelsz/healthrP  rQ  N)r]  rœ  Úhandle_models_requestÚhandle_health_checkrD  rL  r^  r_  rÉ   s   &r)   Údo_GETÚAPIHandler.do_GETT  si   € ð �9‰9×Ñ ×-Ò-Ø×&Ñ&Ö(Ø�Y‰Y˜)Ô#Ø×$Ñ$Ö&à×(Ñ(¨Ô-Ø×ÑÔØ�J‰J×Ñ˜\Ö*r+   c                óÎ   € V P                  ^È4       V P                  4        V P                  P                  RP	                  4       4       V P                  P                  4        R# )z0
Handle a GET request for the /health endpoint.
z{"status": "ok"}N)rD  rL  r^  r_  rD  r¦  rÉ   s   &r)   rÀ  ÚAPIHandler.handle_health_checka  sJ   € ð 	×$Ñ$ SÔ)Ø×ÑÔà�
‰
×ÑÐ+×2Ñ2Ó4Ô5Ø�
‰
×ÑÖr+   c           	     óº  aa€ V P                  ^È4       V P                  4        . ROoV P                  P                  R4      pRo\	        V4      ^8”  d   RP                  VR,          4      oVV3R lp\        4       pVP                   Uu. uF  qB! V4      '       g   K  VNK  	  ppV Uu. uF  pRVP                  RRRV P                  /NK!  	  ppV P                  P                  P                  '       dz   \        V P                  P                  P                  4      pVP                  4       '       d;   \        VP!                  4       4      pVP#                  RVRRRV P                  /4       RR	R
V/p	\$        P&                  ! V	4      P)                  4       p
V P*                  P-                  V
4       V P*                  P/                  4        R# u upi u upi )z3
Handle a GET request for the /v1/models endpoint.
r¤  N:é   NNc                 ó~  <a€ V P                   R 8w  d   R# RV P                  9  d   R# Se   V P                  S8w  d   R# V P                  R,          P                   Uu0 uF  qP                  P
                  kK  	  upo\        ;QJ d    V3R lS 4       F  '       d   K   R# 	  R# ! V3R lS 4       4      # u upi )r�   FÚmainc              3   ó,   <"  € T F	  qS9   x € K  	  R # 5irO   r”   )rP   ÚfÚ
file_namess   & €r)   rQ   ÚLAPIHandler.handle_models_request.<locals>.probably_mlx_lm.<locals>.<genexpr>�  s   øé € Ð6±¨1˜J–³ùs   ƒT)Ú	repo_typeÚrefsÚrepo_idÚfilesÚ	file_pathry  r6  )ÚreporÊ  rË  rÐ  Úfilter_repo_ids   & @€€r)   Úprobably_mlx_lmÚ9APIHandler.handle_models_request.<locals>.probably_mlx_lmy  s‘   ù€ Ø�~‰~ Ô(ÙØ˜TŸY™YÔ&ÙØÒ)¨d¯l©l¸nÔ.LÙØ48·I±I¸fÕ4E×4KÒ4KÓLÑ4K¨qŸ+™+×*Ô*Ñ4KÑLˆJß“3Ô6±Ó6—3”3Ð6’3Ð6�3Ô6±Ó6Ó6Ð6ùò Ms   ÁB:r;   r�  r�   r,  rY   r�  )zconfig.jsonzmodel.safetensors.index.jsonztokenizer_config.json)rD  rL  r]  Úsplitrƒ   r„   r   ÚreposrÏ  r,  r)  r  r�   r   ÚexistsrB   Úresolverã   rE   rF   rD  r^  r_  r¦  )r4   ÚpartsrÔ  Úhf_cache_inforÒ  Údownloaded_modelsÚmodelsr7  Úmodel_idr  r²  rÐ  rÓ  s   &          @@r)   r¿  Ú APIHandler.handle_models_requestk  s¡  ù€ ð 	×$Ñ$ SÔ)Ø×ÑÔâXˆà—	‘	—‘ Ó$ˆØˆÜˆu‹:˜Œ>Ø ŸX™X e¨B¥iÓ0ˆNö	7ô 'Ó(ˆà*×0Ò0ó
Ù0�T°OÀD×4I�DˆDÑ0ð 	ð 
ñ *ó
ñ *�ð	 �d—l‘lØ˜'Ø˜4Ÿ<™<óñ
 *ð 	ð 
ð ×"Ñ"×+Ñ+×1×1Ð1Ü˜d×5Ñ5×>Ñ>×DÑDÓEˆJØ× Ñ ×"Ò"Ü˜z×1Ñ1Ó3Ó4�Ø—‘à˜hØ  'Ø! 4§<¡<ðôð ˜f f¨fÐ5ˆäŸ
š
 8Ó,×3Ñ3Ó5ˆØ�
‰
×Ñ˜Ô'Ø�
‰
×ÑÖùò=
ùò

s   ÂGÂ GÂ,%G)r’   rc  rº   r,  r­   r¬   r§   r·   rµ   rž   r¶   r›  r«   rª   r©   r¨   rš  ri  rh  r)  r¹   rÚ  rW  r'  r›   r�   r¸   rœ   rŸ   r    )éÈ   )NNFN)NNNNNNNN)NNN)rW   rb   rc   rd   r8   r9  rD  rH  rM  rq  r�  rk  rŸ  rl  r¬  r\  r[  rÁ  rÀ  r¿  re   rf   Ú__classcell__)r/  rh   s   @@r)   r&  r&  #  s–   ù‡ € ð*ð -1÷	*õ *ò	>÷!ò !÷
!ò !òòe4ôNBò2N÷<kò k÷Zxð x÷tò ÷2
ð 
÷,
ð 
ò&+ò÷8ò 8r+   r&  c                ó0   € V ^8„  d   QhR\         R\        /# )rj   ÚhostÚport)rB   r¢   )rn   s   "r)   ro   ro   ¦  s   € ÷ +ñ +Ü
ð+ä
ñ+r+   c                 ó¼  aa€ W3p\         P                  ! VR \         P                  R\         P                  / p\	        \        V4      4      w  Vn          ruV! VVV3R l4      p\        P                  ! R4       \        P                  ! RV  RV R24        VP                  4        R#   \         d%    TP                  4        SP                  4         R# i ; i)r?   Úflagsc                  ó0   <€ S! S.V O5R \        4       /VB # )r'  )r*   )r‹   r.  Úhandler_classr)  s   *,€€r)   Ú<lambda>Ú"_run_http_server.<locals>.<lambda>´  s,   ø€ ¡Øð!
ð ò!
ä5Ó7ð!
ð ò	!
r+   z\mlx_lm.server is not recommended for production as it only implements basic security checks.zStarting httpd at z	 on port z...N)ÚsocketÚgetaddrinfoÚSOCK_STREAMÚ
AI_PASSIVErì  ÚiterÚaddress_familyÚwarningsÚwarnrU   rw  Úserve_foreverÚKeyboardInterruptÚshutdownro  )	rã  rä  r)  Úserver_classrè  Úserver_addressÚinfosrë   Úhttpds	   &&f&f    r)   Ú_run_http_serverrú  ¦  sÑ   ù€ ð �\€NÜ×ÒØ	ðÜ$×0Ñ0ðÜ8>×8IÑ8Iñ€Eô <@ÄÀUÃÓ;LÑ8€LÔ  A qÙØõ	
ó€Eô ‡M‚Mð	4ôô ‡L‚LÐ% d V¨9°T°F¸#Ð>Ô?ð+Ø×ÑÖøÜô +Ø�‰ÔØ×(Ñ(×*ð+ús   ÂB, Â,+CÃCc                ó<   € V ^8„  d   QhR\         R\        R\        /# )rj   rã  rä  r_  )rB   r¢   r  )rn   s   "r)   ro   ro   Ç  s&   € ÷ "ñ "Ü
ð"ä
ð"ô "ñ"r+   c                 óü   € \         P                  P                  4       p\        VP                  P
                  4      p\        W&4      pVP                  4       ^ 8X  d   \        WV4       R# VP                  4        R# r/   )
r%   ró   rô   r   r  Úprompt_cache_sizer]  rg  rú  r„   )rã  rä  r_  rö  rè  r*  r`  r)  s   &&&&&   r)   Úrunrþ  Ç  s\   € ô �N‰N×ÑÓ!€EÜ! .×"9Ñ"9×"KÑ"KÓL€LÜ*¨>ÓHÐØ‡z�zƒ|�qÔÜ˜Ð%7Ö8à×ÑÖ!r+   c                  óB  € \         P                  ! R R7      p V P                  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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. RGO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-\        ^ R.R
7       V P                  R/\
        R(R0R
7       V P                  R1\        R2R3R
7       V P                  R4\        P                  R5R6R7       V P                  R7\        ^ R8R
7       V P                  R9\        ^R:R
7       V P                  R;\        R<R=R
7       V P                  R>\        ^
R?R
7       V P                  R@\        RAR7       V P                  RBRRCR7       V P                  4       p\        P                  P                  4       '       d3   \        P                  ! 4       RD,          p\        P                  ! V4       \        P                   ! \#        \        VP$                  P'                  4       R4      RERF7       \)        VP*                  VP,                  \/        V4      4       R# )HzMLX Http Server.)Údescriptionz--modelz8The path to the MLX model weights, tokenizer, and config)r?   Úhelpz--adapter-pathz9Optional path for the trained adapter weights and config.z--hostz	127.0.0.1z-Host for the HTTP server (default: 127.0.0.1))r?   Údefaultr  z--porti�  z(Port for the HTTP server (default: 8080)z--allowed-originsc                 ó$   € V P                  R 4      # )Ú,)rÖ  )Úxs   &r)   ré  Úmain.<locals>.<lambda>ñ  s   € �q—w‘w˜s”|r+   r3  zAllowed origins (default: *)z--draft-modelz,A model to be used for speculative decoding.N)r?   r  r  z--num-draft-tokensz:Number of tokens to draft when using speculative decoding.z--trust-remote-codeÚ
store_truez)Enable trusting remote code for tokenizer)Úactionr  z--log-levelÚINFOz%Set the logging level (default: INFO))r?   r  r�  r  z--chat-templaterw   z)Specify a chat template for the tokenizerF)r?   r  r  Úrequiredz--use-default-chat-templatezUse the default chat templatez--temprZ  z+Default sampling temperature (default: 0.0)z--top-pg      ð?z-Default nucleus sampling top-p (default: 1.0)z--top-kz3Default top-k sampling (default: 0, disables top-k)z--min-pz5Default min-p sampling (default: 0.0, disables min-p)z--max-tokensi   z;Default maximum number of tokens to generate (default: 512)z--chat-template-argsznA JSON formatted string of arguments for the tokenizer's apply_chat_template, e.g. '{"enable_thinking":false}'z{}z--decode-concurrencyzFWhen a request is batchable then decode that many requests in parallelz--prompt-concurrencyzFWhen a request is batchable then process that many prompts in parallelz--prefill-step-sizei   z0Step size for prefill processing (default: 2048)z--prompt-cache-sizez@Maximum number of distinct KV caches to hold in the prompt cachez--prompt-cache-bytesz&Maximum size in bytes of the KV cachesz
--pipelinez,Use pipelining instead of tensor parallelismÚ max_recommended_working_set_sizez)%(asctime)s - %(levelname)s - %(message)s)Úlevelrn   )rf  r	  ÚWARNINGÚERRORÚCRITICAL)r  ÚArgumentParserÚadd_argumentrB   r¢   r¡   rE   r…   r   Ú
parse_argsr%   ÚmetalÚis_availabler&   Úset_wired_limitrU   ÚbasicConfigrw  Ú	log_levelÚupperrþ  rã  rä  r  )Úparserr‹   Úwired_limits      r)   rÈ  rÈ  ×  s‹  € Ü×$Ò$Ð1CÔD€FØ
×ÑØÜØGð ô ð
 ×ÑØÜØHð ô ð
 ×ÑØÜØØ<ð	 ô ð ×ÑØÜØØ7ð	 ô ð ×ÑØÙ#ØØ+ð	 ô ð ×ÑØÜØ;Øð	 ô ð ×ÑØÜØIØð	 ô ð ×ÑØØØ8ð ô ð
 ×ÑØÜØÚAØ4ð ô ð ×ÑØÜØØ8Øð ô ð ×ÑØ%ØØ,ð ô ð
 ×ÑØÜØØ:ð	 ô ð ×ÑØÜØØ<ð	 ô ð ×ÑØÜØØBð	 ô ð ×ÑØÜØØDð	 ô ð ×ÑØÜØØJð	 ô ð ×ÑØÜ�Z‰Zð BØð	 ô ð ×ÑØÜØØUð	 ô ð ×ÑØÜØØUð	 ô ð ×ÑØÜØØ?ð	 ô ð ×ÑØÜØØOð	 ô ð ×ÑØÜØ5ð ô ð
 ×ÑØØØ;ð ô ð
 ×ÑÓ€DÜ	‡x�x×Ñ×ÒÜ—n’nÓ&Ð'IÕJˆÜ
×Ò˜;Ô'ä×ÒÜ”g˜tŸ~™~×3Ñ3Ó5°tÓ<Ø:õô ˆ�	‰	�4—9‘9œm¨DÓ1Ö2r+   Ú__main__z}Calling `python -m mlx_lm.server...` directly is deprecated. Use `mlx_lm.server...` or `python -m mlx_lm server ...` instead.rO   )Qr  rE   rU   r‹  r'   rë  r  rC   rñ  Úcollectionsr   Údataclassesr   r   Úhttp.serverr   r   Úpathlibr   Úqueuer	   r‚  r
   Ú	threadingr   Útypingr   r   r   r   r   r   r   r   r   r   Úmlx.coreÚcorer%   Úhuggingface_hubr   Ú_versionr   r   r   r   r   Úmodels.cacher   r   Úsample_utilsr   r   Úutilsr   r    r!   r*   r-   r€   rŒ   rŽ   r™   r¥   r°   r¾   rÄ   rÓ   rî   rð   r  rE  rG  r[  r]  r&  rú  rþ  rÈ  rW   Úprintr”   r+   r)   Ú<module>r+     sÅ  ðó Û Û Û Û Û Û Û Û Ý ß *ß CÝ Ý %Ý Ý ÷÷ ÷ õ Ý *å !÷ñ ÷
÷ ?ß 2Ñ 2òN÷
%ñ %÷Pò0 =ðF ÷ð ó ðð ÷ð ó ðð ÷ ð  ó ð ð ÷3ð 3ó ð3ð ÷+ð +ó ð+ð ÷!ð !ó ð!ð  ÷&ð &ó ð&ò(÷ %ñ %÷Ph*ñ h*òVò	õ÷h	,ñ h	,ôV@
Ð'ô @
ðN %Ø÷+ðJ %Ø÷"ò Q3ðh ˆzÔÙ	ð	Lôñ 	†Fñ r+   