+
    UV-j–c  ã                   ó¶  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHt ^ RIHt ^ RIHtHtHt ^ RIHt ^ RIHt ^ R	IHt ^R
IHt  ^RI!H"t"H#t#H$t$ ^RI%H&t& ^RI'H(t(H)t) ^RI*H+t+ ^RI,H-t- ^RI.H/t/ ^RI0H1t1 ^RI2H3t4 ^RI5H6t6H7t7H8t8H9t9H:t:H;t;H<t<H=t=H>t>H?t?H@t@HAtAHBtBHCtCHDtD ^RIEH3tF ^RIGHHtI ^RIJHJtJ ^RIKHLtLHMtMHNtN RtORtP]P¢                  ! R4      tRR R ltSRbR R lltTR R ltUR  R! ltVR" R# ltWR$RR%R/R& R' lltXR( tYR) R* ltZR+ t[RbR, R- llt\RbR. R/ lltHR0 R1 lt]RcR2 R3 llt^]9! 4       ]Jn_        RdR4 lt`R5 ta]R6 4       tb]! R7R8]/]bR97      tc]cPÉ                  ]R:.R;R:.R:.R<7       ^
te]f! 4       tg]g3R=R>/R? R@ lllthRA ti]! ]gRB RC RD RE RF RG ]T]W]X]Y]H]\]^RH7      tj]4! ]c]j4       ]F! ]c]j4       ]cP×                  RI]MRJ7      ]cP×                  RK]MRLRM7      RN 4       4       tl]cPÛ                  RO4      RP RQ l4       tn]cP×                  RR4      RS 4       to]cP×                  RT4      ]cP×                  RURLRV7      RW 4       4       tp]cP×                  RX4      ]cP×                  RYRLRV7      RZ 4       4       tq]cPå                  R[4      ]cPå                  R\RLRV7      R] 4       4       ts]cPå                  R^4      R_ 4       ttR` tu]vRa8X  d
   ]u! 4        R# R# )eé    N)Úasynccontextmanager)ÚLock)ÚSimpleNamespace)ÚListÚOptionalÚTupleÚUnion)ÚFastAPIÚHTTPExceptionÚRequest)ÚCORSMiddleware)Úscan_cache_dir)ÚCacheNotFound)Úapc)ÚDEFAULT_REPETITION_CONTEXT_SIZEÚDEFAULT_TEMPERATUREÚDEFAULT_TOP_P)Úload_image_edit_model)Úis_image_generation_modelÚload_image_generation_model)Ú"build_json_schema_logits_processor©Ú!_infer_tool_parser_from_processor)Ú__version__)ÚVisionFeatureCache)Úregister_routes)ÚGenerationArgumentsÚPromptTooLongErrorÚResponseGeneratorÚServerMetricsStoreÚget_configured_context_limitÚget_kv_group_sizeÚget_kv_quant_schemeÚget_quantized_kv_bitsÚget_quantized_kv_startÚget_server_enable_thinkingÚget_server_max_tokensÚget_server_thinking_budgetÚget_server_thinking_end_tokenÚget_server_thinking_start_tokenÚget_top_logprobs_k)Ú_split_thinking©Úruntime)ÚChatLogprobContentÚModelsResponseÚ
TopLogprobz0.0.0.0i�  zmlx_vlm.serverc                ó$   € V ^8„  d   QhR\         /# ©é   Úreturn)Údict)Úformats   "Úc/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/server/app.pyÚ__annotate__r9   ;   s   € ÷ %ñ %¤$ñ %ó    c                  ó°  € \         P                  P                  R 4      p \        V RR4      p\        VRR4      p\	        4       pVe   Ve   \        W#4      MT;'       g    Tp^ p\         P                  eJ   \        \         P                  R4      '       d*    \         P                  P                  P                  4       pR\         P                  P                  RR4      R\         P                  P                  RR4      R	\         P                  P                  R	R
4      RTRTRTR\         P                  P                  R4      '       d)   \        \         P                  P                  R4      4      MRR\         P                  RJRTR\         P                  f   RR//
# RR/\         P                  P                  4       C/
#   \         d    ^ p ELi ; i)ÚconfigÚtext_configNÚmax_position_embeddingsÚrequestsÚloaded_modelÚ
model_pathÚloaded_adapterÚadapter_pathÚ
model_kindÚtext_generationÚloaded_context_sizeÚconfigured_context_limitÚeffective_context_limitÚloaded_tool_parserÚ	processorÚcontinuous_batching_enabledÚrequest_queue_depthr   ÚenabledFT)r.   Úmodel_cacheÚgetÚgetattrr!   ÚminÚresponse_generatorÚhasattrr?   ÚqsizeÚ	Exceptionr   Úapc_managerÚstats_snapshot)r<   r=   Únative_context_sizerG   rH   Úqueue_depths         r8   Ú_server_runtime_snapshotrZ   ;   s½  € Ü× Ñ ×$Ñ$ XÓ.€FÜ˜& -°Ó6€KÜ! +Ð/HÈ$ÓOÐÜ;Ó=Ðð Ò*Ð/GÒ/Sô 	ÐÔ:à%×<Ð<Ð)<ð ð
 €KÜ×!Ñ!Ò-´'Ü×"Ñ" J÷3ò 3ð	Ü!×4Ñ4×=Ñ=×CÑCÓEˆKð 	œ×+Ñ+×/Ñ/°¸dÓCØœ'×-Ñ-×1Ñ1°.À$ÓGØ”g×)Ñ)×-Ñ-¨lÐ<MÓNØÐ2Ø"Ð$<Ø!Ð#:Øä×"Ñ"×&Ñ& {×3Ò3ô .¬g×.AÑ.A×.EÑ.EÀkÓ.RÔSàà%¤w×'AÑ'AÈÐ'MØ˜{Øä×"Ñ"Ò*ð ˜Ððð ð" ˜TÐJ¤W×%8Ñ%8×%GÑ%GÓ%IÐJð#ð øô ô 	Ø‹Kð	ús   Â(G ÇGÇGc                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r4   Ú	tenant_idr5   )r   Ústrr   )r7   s   "r8   r9   r9   c   s$   € ÷ Cñ CÜ(0´­ðCäñCr:   c                ó  € \        V RR4      pVf   \        V RR4      pVf   \        4       p\        V RR4      pVeD   \        V\        4      '       d.   VP	                  4        UUu/ uF  w  rV\        V4      VbK  	  ppp\        V R\        4       4      p\        VR\        4      p\        VR\        4      p	\        VR^ 4      p
\        VR	R4      R
J d   Rp\        R/ RVbR\        V RV4      bR\        V RV	4      bR\        V RV
4      bR\        V RR4      bR\        V RR4      bR\        \        V RR
4      4      bR\        V RR4      bR\        V R\        4      bR\        V RR4      bR\        V R\        4      bR\        V RR4      bR\        V R\        4      bRVbRVbR\        V R\        4       4      bR\        V R\        4       4      bR\        V R\!        4       4      bRVb pVe   \#        W4      Vn        V# u uppi )z?Build GenerationArguments from an OpenAIRequest or ChatRequest.Ú
max_tokensNÚmax_output_tokensÚ
logit_biasÚenable_thinkingÚtemperatureÚtop_pÚtop_kÚ	do_sampleFg        Úmin_pÚseedÚlogprobsÚrepetition_penaltyÚrepetition_context_sizeÚpresence_penaltyÚpresence_context_sizeÚfrequency_penaltyÚfrequency_context_sizeÚthinking_budgetÚthinking_start_tokenÚthinking_end_tokenr\   © )rP   r'   Ú
isinstancer6   ÚitemsÚintÚ_request_field_or_defaultr&   Ú_model_config_field_or_defaultr   r   r   Úboolr   r(   r*   r)   Ú#_build_structured_logits_processorsÚlogits_processors)ÚrequestrJ   r\   r_   ra   ÚkÚvrb   Údefault_temperatureÚdefault_top_pÚdefault_top_kÚargss   &&&         r8   Ú_build_gen_argsrƒ   c   s„  € ô ˜ ,°Ó5€JØÒÜ˜WÐ&9¸4Ó@ˆ
ØÒÜ*Ó,ˆ
Ü˜ ,°Ó5€JØÒ¤*¨Z¼×">Ò">Ø,6×,<Ñ,<Ô,>Ô?Ñ,>¡D A”c˜!“f˜a’iÑ,>ˆ
Ñ?Ü/ØØÜ"Ó$ó€Oô
 9Ø�=Ô"5óÐô 3°9¸gÄ}ÓU€MÜ2°9¸gÀqÓI€MÜ% i°¸dÓCÀuÓLØ!ÐÜò (Ùð(ä-Ø�]Ð$7ô
ð(ô
 (¨°¸-ÔHð(ô (¨°¸-ÔHð(ô �g˜w¨Ô,ð(ô �W˜f dÔ+ð(ô ”g˜g z°5Ó9Ô:ð(ô # 7Ð,@À$ÔGð(ô !:ØØ%Ü+ô!
ð(ô  ! Ð*<¸dÔCð!(ô" 8ØØ#Ü+ô
ð#(ô, " 'Ð+>ÀÔEð-(ô.  9ØØ$Ü+ô 
ð/(ñ8 ð9(ñ: (ð;(ô< 2ØÐ&Ô(BÓ(Dô
ð=(ôB 7ØÐ+Ô-LÓ-Nô
ðC(ôH 5ØÐ)Ô+HÓ+Jô
ðI(ñN ðO(€DðR ÒÜ!DÀWÓ!XˆÔØ€Kùóq @s   Á'Hc                ó$   € V ^8„  d   QhR\         /# ©r4   Ú
field_name©r]   )r7   s   "r8   r9   r9   ©   s   € ÷ /ñ /´3ñ /r:   c                 ó\   € \        V R R4      pVe	   W9  d   V# \        WV4      pVf   V# T# )Úmodel_fields_setN)rP   )r|   r†   ÚdefaultÚ
fields_setÚvalues   &&&  r8   rw   rw   ©   s<   € Ü˜Ð"4°dÓ;€JØÒ *Ô">ØˆÜ�G¨Ó1€EØ’mˆ7Ð.¨Ð.r:   c                ó$   € V ^8„  d   QhR\         /# r…   r‡   )r7   s   "r8   r9   r9   ±   s   € ÷ 0ñ 0¼#ñ 0r:   c                 ó‚   € \         P                  P                  R 4      pVf   V e   \        V R R4      p\        W1V4      # )r<   N)r.   rN   rO   rP   )rJ   r†   rŠ   r<   s   &&& r8   rx   rx   ±   s=   € Ü× Ñ ×$Ñ$ XÓ.€FØ‚~˜)Ò/Ü˜ H¨dÓ3ˆÜ�6 wÓ/Ð/r:   c                ó:   € V ^8„  d   QhR\         \        ,          /# r3   )r   r]   )r7   s   "r8   r9   r9   ¸   s   € ÷ Añ A¤X¬c¥]ñ Ar:   c                ó²   € V e   \        V R4      '       g   R# V P                  pVP                  R4      ;'       g    VP                  R4      ;'       g    R# )zvPull a per-tenant APC salt from the request headers.

Honoured headers (in order): ``X-APC-Tenant``, ``X-Tenant-Id``.
NÚheaderszx-apc-tenantzx-tenant-id)rS   r‘   rO   )Úhttp_requestÚhs   & r8   Ú_read_tenant_idr”   ¸   sL   € ð
 Ò¤7¨<¸×#CÒ#CÙØ×Ñ€AØ�5‰5�Ó ×@Ð@ A§E¡E¨-Ó$8×@Ð@¸DÐ@r:   ÚimagesÚaudioc                óŒ   € V ^8„  d   QhR\         R\         R\         R\        \        ,          R\        \        ,          R\        /# )r4   ÚendpointÚmodelÚpromptr•   r–   r‚   )r]   r   r   r   )r7   s   "r8   r9   r9   Ã   sN   € ÷ <ñ <äð<ô ð<ô ð	<ô
 ”T�Nð<ô ”D�>ð<ô ñ<r:   c           	   ƒ  ó®  "  € \         P                  f   R#  \        P                  ! \         P                  P                  VVVV4      G Rj  x€L
  R#  L  \
         dr   p\         P                  P                  T TR\        T4      R7       \        P                  ! 4        \        P                  ! 4        \        R\        T4      R7      hRp?ii ; i5i)zDReject over-budget streaming requests before the HTTP stream starts.NT)r˜   r™   ÚstreamÚerroré�  ©Ústatus_codeÚdetail)r.   rR   ÚasyncioÚ	to_threadÚvalidate_context_budgetr   ÚmetricsÚrecord_failurer]   ÚmxÚclear_cacheÚgcÚcollectr   )r˜   r™   rš   r•   r–   r‚   Úes   $$$$$$ r8   Ú _preflight_stream_context_budgetr¬   Ã   s¬   é € ô ×!Ñ!Ò)Ùð<Ü×ÒÜ×&Ñ&×>Ñ>ØØØØó
÷ 	
ô 	
øô ô 	<Ü�‰×&Ñ&ØØØÜ�a“&ð	 	'ô 	
ô 	�ŠÔÜ
�
Š
ŒÜ¨´C¸³FÔ;Ð;ûð	<üs;   ‚C˜5A ÁAÁA ÁCÁA ÁCÁ!A,CÃCÃCc                 óŠ   € V f   R # \        V \        4      '       d   V # \        V R4      '       d   V P                  RR7      # V # )NÚ
model_dumpT)Úexclude_none)rt   r6   rS   r®   )rŒ   s   &r8   Ú_as_plain_dictr°   ã   sB   € Ø‚}ÙÜ�%œ×ÒØˆÜˆu�l×#Ò#Ø×Ñ¨TÐÓ2Ð2Ø€Lr:   c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# r3   )r   r	   r]   r6   )r7   s   "r8   r9   r9   í   s!   € ÷ ñ ´¼¼sÄD¸yÕ9IÕ0Jñ r:   c                 óø  € \        \        V R R4      4      p\        \        V RR4      4      pVf1   \        V\        4      '       d   \        VP	                  R4      4      pVf   R# VP	                  R4      pVR
9   d   R# VR9   d   RR/# VR8w  d   \        RV: 24      h\        VP	                  R4      4      pVf   Tp\        V\        4      '       d   VP	                  R4      MRpVf   \        R	4      hV# )Úresponse_formatNÚtextr7   ÚtypeÚobjectÚjson_schemaz"Unsupported response_format type: Úschemaz7response_format json_schema must include a schema field)Nr´   )Újson_objectr¶   )r°   rP   rt   r6   rO   Ú
ValueError)r|   r³   r=   Úformat_typer·   r¸   s   &     r8   Ú_extract_response_format_schemar¼   í   só   € Ü$¤W¨WÐ6GÈÓ%NÓO€Oä ¤¨°&¸$Ó!?Ó@€KØÒ¤:¨k¼4×#@Ò#@Ü(¨¯©¸Ó)BÓCˆàÒÙà!×%Ñ% fÓ-€KØ�nÔ$ÙØÐ/Ô/Ø˜Ð!Ð!Ø�mÔ#ÜÐ=¸k¹_ÐMÓNÐNä  ×!4Ñ!4°]Ó!CÓD€KØÒà%ˆä*4°[Ä$×*GÒ*Gˆ[�_‰_˜XÔ&ÈT€FØ‚~ÜÐRÓSÐSØ€Mr:   c                 ó–   € \        V 4      pVf   R # \        VR4      '       d   VP                  MTp\        R\        4      ! W24      pV.# )NÚ	tokenizerr   )r¼   rS   r¾   Ú_server_package_attrr   )r|   rJ   r¸   r¾   Úlogits_processors   &&   r8   rz   rz   
  sS   € Ü,¨WÓ5€FØ‚~Ùä'.¨y¸+×'FÒ'F�	×#Ò#ÈI€IÜ+Ø,Ü*ôð óÐð ÐÐr:   c                ót   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        /# ©r4   r´   rq   rr   r5   )r]   r   rv   )r7   s   "r8   r9   r9     s8   € ÷ ñ Ü
ðä"¤3�-ðô !¤�ðô 	ñ	r:   c                óŠ   € ^ pV'       d   V'       d   W9   d	   W 9   d   ^# RV 9   d   RV 9   d   ^pV# RV 9   d
   RV 9   d   ^pV# )zICount tokens consumed by thinking tags (excluded from completion_tokens).z<|channel>thoughtz
<channel|>z<think>z</think>rs   )r´   rq   rr   Úcounts   &&& r8   Ú_count_thinking_tag_tokensrÅ     sT   € ð €EçßØ Ô(ØÔ&áà˜dÔ" |°tÔ';Øˆð €Lð 
�dÔ	˜z¨TÔ1ØˆØ€Lr:   c          
      ó¬   € V ^8„  d   QhR\         R\        \         ,          R\        \         ,          R\        \        \         ,          \         3,          /# rÂ   )r]   r   r   )r7   s   "r8   r9   r9   -  sL   € ÷ Pñ PÜ
ðPä"¤3�-ðPô !¤�ðPô Œ8”C�=œ#ÐÕñ	Pr:   c                ó   € \        WV4      # )z?Split thinking tags from content. Returns (reasoning, content).)Ú_split_thinking_text)r´   rq   rr   s   &&&r8   r,   r,   -  s   € ô   Ð<NÓOÐOr:   c                ó~   € V ^8„  d   QhR\         R\        \        \        \        \         ,          ,          3,          /# )r4   Útoken_idr5   )rv   r   r]   r   r   )r7   s   "r8   r9   r9   6  s-   € ÷ 
ñ 
¤sð 
¬u´S¼(Ä4ÌÅ9Õ:MÐ5MÕ/Nñ 
r:   c                óÆ   €  V P                  \        V4      .4      p \        VP	                  R4      4      pW#3#   \         d    Rp L-i ; i  \         d    Rp Y#3# i ; i)z5Decode a single token id to its string + UTF-8 bytes.Ú zutf-8N)Údecoderv   rU   ÚlistÚencode)r¾   rÊ   r´   Útoken_bytess   &&  r8   Ú_decode_tokenrÑ   6  st   € ðØ×Ñ¤ X£ Ó0ˆðÜ˜4Ÿ;™; wÓ/Ó0ˆð ÐÐøô ô ØŠðûô ô Ø‰ØÐÐðús    ‚; žA »AÁ
AÁA ÁA c          
      óš   € V ^8„  d   QhR\         R\        R\        \        \        \         \        3,          ,          ,          R\         RR/# )r4   rÊ   ÚlogprobÚtop_logprobsre   r5   r/   )rv   Úfloatr   r   r   )r7   s   "r8   r9   r9   C  sO   € ÷ ñ äðô ðô œ4¤¤c¬5 jÕ 1Õ2Õ3ð	ô
 ðð ñr:   c           	     óð   € \        W4      w  rV. pV^ 8”  dJ   V'       dB   VRV  F8  w  r‰\        W4      w  r«VP                  \        V
\        V	4      VR7      4       K:  	  \	        V\        V4      VVR7      # )z7Build an OpenAI-style logprob entry for a single token.N)ÚtokenrÓ   Úbytes)r×   rÓ   rØ   rÔ   )rÑ   Úappendr1   rÕ   r/   )r¾   rÊ   rÓ   rÔ   re   Ú
token_textrÐ   Útop_listÚtidÚlpÚt_textÚt_bytess   &&&&&       r8   Ú_make_logprob_contentrà   C  sv   € ô ,¨IÓ@Ñ€JØ!#€HØˆq„y—\Ø# F UÓ+‰GˆCÜ+¨IÓ;‰OˆFØ�O‰OœJ¨V¼UÀ2»YÈgÔVÖWñ ,ô ØÜ�g“ØØô	ð r:   c                 ó¶   € \         P                  P                  \        4      pVe   \	        W 4      '       d   \        W 4      # Ve   V# \        4       V ,          # ©N)ÚsysÚmodulesrO   Ú__package__rS   rP   Úglobals)ÚnameÚfallbackÚpackages   && r8   r¿   r¿   ]  sF   € Ü�k‰k�o‰oœkÓ*€GØÒœw w×5Ò5Ü�wÓ%Ð%ØÒØˆÜ‹9�T�?Ðr:   c                 ó|   € R R RRRRRR/pW9   d   \        \        W,          4      # \        R\        : RV : 24      h)rN   rR   rV   Úserver_metricsr¥   zmodule z has no attribute )rP   r.   ÚAttributeErrorÚ__name__)rç   Úlegacy_runtime_attrss   & r8   Ú__getattr__rï   f  sQ   € à�}ØÐ2Ø�}Ø˜)ð	Ðð Ô#Ü”wÐ 4Õ :Ó;Ð;Ü
˜7¤8¡,Ð.@ÀÁÐIÓ
JÐJr:   c                óÎ  "  € \         P                  P                  R R4      pV'       d´   \         P                  P                  RR4      p\        P	                  RV4       \        W4       \         P                  P                  R4      p\         P                  P                  RR4      pV'       d   \        P	                  RW44       \        P	                  R4       R5x € R# 5i)	ÚMLX_VLM_PRELOAD_MODELNÚMLX_VLM_PRELOAD_ADAPTERzPre-loading model: %sÚKV_BITSÚKV_QUANT_SCHEMEÚuniformz(KV cache quantization: bits=%s scheme=%sz)Model ready, continuous batching enabled.)ÚosÚenvironÚpopÚloggerÚinfoÚget_cached_modelrO   )ÚapprA   rC   Úkv_bitsÚ	kv_schemes   &    r8   Úlifespanrÿ   r  s’   é € ä—‘—‘Ð 7¸Ó>€JßÜ—z‘z—~‘~Ð&?ÀÓFˆÜ�‰Ð+¨ZÔ8Ü˜Ô2Ü—*‘*—.‘. Ó+ˆÜ—J‘J—N‘NÐ#4°iÓ@ˆ	ßÜ�K‰KÐBÀGÔWÜ�‰Ð?Ô@Þ	ùs   ‚C#C%zMLX-VLM Inference APIzgAPI for using Vision Language Models (VLMs) and Omni Models (Vision, Audio and Video support) with MLX.)ÚtitleÚdescriptionÚversionrÿ   Ú*T)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersrD   Úautoc                ó0   € V ^8„  d   QhR\         R\         /# )r4   rA   rD   r‡   )r7   s   "r8   r9   r9   –  s"   € ÷ Q$ñ Q$ÜðQ$ô ñ	Q$r:   c               óà  € V\         J dA   \        P                  P                  R4      pV'       d   V^ ,          V 8X  d
   V^,          MRpWV3p\        P                  P                  R4      V8X  dV   \	        RV  RV 24       \        P                  R,          \        P                  R,          \        P                  R,          3# \        P                  '       d   \	        R4       \        4        VR	8H  pV'       d‚   Ve   \        R
RR7      h\	        RV  24        \        V 4      p\        \        TRR	4      RR7      pR\        n        R\        n        RTRT RRRTRRRTRR	R\        4       /\        n        TRT3# VR8H  ;'       g    VR8H  ;'       d    \        V 4      p	V	'       d‚   Ve   \        R
RR7      h\	        RV  24        \!        V 4      p\        \        TRR4      RR7      pR\        n        R\        n        RTRT RRRTRRRTRRR\        4       /\        n        TRT3# \#        \$        P&                  P                  RR4      4      p
\)        V
R7      p\*        P,                  ! V R 7      \        n        \/        V 4      p\1        4       p\3        4       p\5        4       p\7        V VVVVVV\9        4       \        P                  R!7	      \        n         \        P                  P;                  4       w  pppRTRT RTRTRTRTR"T/\        n        TTT3#   \         d   p\        R
RT 2R7      ThRp?i\         d   p\        RRT 2R7      ThRp?ii ; i  \         d   p\        R
RT 2R7      ThRp?i\         d   p\        RRT 2R7      ThRp?ii ; i  \         d<    \        P                  P=                  4        R\        n        TP?                  4        h i ; i)#zŸ
Factory function to get or load the appropriate model resources from cache or by loading.
Also creates/updates the ResponseGenerator for continuous batching.
Ú	cache_keyNzUsing cached model: ú, Adapter: r™   rJ   r<   z-New model request, clearing existing cache...Ú
image_editrž   z1Adapters are not supported for image edit models.rŸ   zLoading image edit model from: zUnsupported image edit model: iô  z!Failed to load image edit model: Úfamily)Ú
model_typer=   rA   rC   rD   Úgeneration_lockÚimage_generationr  z7Adapters are not supported for image generation models.z%Loading image generation model from: z$Unsupported image generation model: z'Failed to load image generation model: ÚMLX_VLM_VISION_CACHE_SIZEÚ20)Úmax_size)Úmodel_namespace)	rA   rC   Úvision_cacherý   Úkv_group_sizeÚkv_quant_schemeÚquantized_kv_startÚtop_logprobs_krV   r  ) Ú_INHERIT_ADAPTERr.   rN   rO   ÚprintÚunload_model_syncr   r   rº   rU   r   rP   rR   rV   r   r   r   rv   rö   r÷   r   Ú_apcÚfrom_envr$   r"   r%   r#   r   r+   Úwait_until_readyÚstop_and_joinÚclear)rA   rC   rD   Úcachedr  Úload_as_editr™   r«   r<   Úload_as_imageÚvision_cache_sizer  rý   r  r  r  rJ   s   &&$              r8   rû   rû   –  s5  € ð Ô'Ó'Ü×$Ñ$×(Ñ(¨Ó5ˆß$*¨v°a­y¸JÔ/F�v˜a–yÈDˆà¨:Ð6€Iô ×Ñ×Ñ˜{Ó+¨yÔ8ÜÐ$ Z L°¸L¸>ÐJÔKä×Ñ Õ(Ü×Ñ Õ,Ü×Ñ Õ)ð
ð 	
ô ××ÐÜÐ=Ô>ÜÔà Ñ-€LßØÒ#ÜØØJôð ô 	Ð/°
¨|Ð<Ô=ð		Ü)¨*Ó5ˆEô !Ü˜u h°Ó=Øô
ˆð &*ŒÔ"Ø"ŒÔà˜Ø˜*Ø˜DØ�UØ˜Ø�fØ˜,Øœt›vð	
ŒÔð �d˜FÐ"Ð"àÐ"4Ñ4÷ ð Ø�fÑ×FÐFÔ!:¸:Ó!Fð ÷ ØÒ#ÜØØPôð ô 	Ð5°j°\ÐBÔCð		Ü/°
Ó;ˆEô !Ü˜u hÐ0BÓCØô
ˆð &*ŒÔ"Ø"ŒÔà˜Ø˜*Ø˜DØ�UØ˜Ø�fØÐ,Øœt›vð	
ŒÔð �d˜FÐ"Ð"äœBŸJ™JŸN™NÐ+FÈÓMÓNÐÜ%Ð/@ÔA€Lô Ÿ-š-¸
ÔC„GÔô $ JÓ/€GÜ%Ó'€MÜ/Ó1ÐÜ)Ó+€Oä!2ØØ!Ø!ØØ#Ø'Ø-Ü)Ó+Ü×'Ñ'ô
"„GÔðÜ#*×#=Ñ#=×#NÑ#NÓ#PÑ ˆˆy˜&ð 	�YØ�jØ˜Ø�Ø�YØ�&Ø˜ð„GÔð �)˜VÐ#Ð#øôS ô 	ÜØÐ*HÈÈÐ(Lôàðûô ô 	ÜØÐ*KÈAÈ3Ð(Oôàðûð	ûôD ô 	ÜØÐ*NÈqÈcÐ(Rôàðûô ô 	ÜØÐ*QÐRSÐQTÐ(Uôàðûð	ûô^ ô Ü×"Ñ"×0Ñ0Ô2Ø%)ŒÔ"Ø×ÑÔØð	úsa   Ä L! ÇM$ Ë!"N' Ì!M!Ì,L=Ì=M!Í
M!ÍMÍM!Í$N$Í/N Î N$ÎN$ÎNÎN$Î'AO-c                  óÂ  € \         P                  '       g   R # \        R\         P                  P                  R4       R\         P                  P                  R4       24       \         P                  e5   \        R4       \         P                  P                  4        R\         n        \         P                  e*   \         P                  P                  4        R\         n        R\         P                  9   d&   \         P                  R,          P                  4        / \         n        \        P                  ! 4        \        P                  ! 4        \        R4       R	# )
FzUnloading model: rA   r  rC   NzStopping ResponseGenerator...r  z!Model unloaded and cache cleared.T)r.   rN   r  rO   rR   r!  rV   r"  r©   rª   r§   r¨   rs   r:   r8   r  r  +  sõ   € Ü××ÐÙä	Ø
œG×/Ñ/×3Ñ3°LÓAÐBÀ+Ìg×NaÑNa×NeÑNeÐftÓNuÐMvÐwôô
 ×!Ñ!Ò-ÜÐ-Ô.Ü×"Ñ"×0Ñ0Ô2Ø%)ŒÔ"ô ×ÑÒ&Ü×Ñ×!Ñ!Ô#Ø"ŒÔð œ×,Ñ,Ô,Ü×Ñ˜NÕ+×1Ñ1Ô3Ø„GÔä‡J‚J„LÜ‡N‚NÔÜ	Ð
-Ô.Ùr:   c                  ó$   € \        R 4      ! V / VB # )rû   ©r¿   ©r‚   Úkwargss   *,r8   Ú<lambda>r,  K  ó   € Ô-AÐBTÔ-UØ	ð.Øò.r:   c                  ó$   € \        R 4      ! V / VB # )Úgenerater)  r*  s   *,r8   r,  r,  N  s   € Ô%9¸*Ô%EÀtÐ%VÈvÒ%Vr:   c                  ó$   € \        R 4      ! V / VB # )Ústream_generater)  r*  s   *,r8   r,  r,  O  s   € Ô,@ÐARÔ,SØ	ð-Øò-r:   c                  ó$   € \        R 4      ! V / VB # )Úapply_chat_templater)  r*  s   *,r8   r,  r,  R  s   € Ô0DØô1àð1àò1r:   c                  ó$   € \        R 4      ! V / VB # r   r)  r*  s   *,r8   r,  r,  U  s   € Ô=QØ+ô>àð>àò>r:   c                  ó$   € \        R 4      ! V / VB # )Úload_tool_moduler)  r*  s   *,r8   r,  r,  X  r-  r:   )ÚINHERIT_ADAPTERrû   r/  r1  r3  Ú infer_tool_parser_from_processorr6  Úbuild_gen_argsÚread_tenant_idÚpreflight_stream_context_budgetÚas_plain_dictÚsplit_thinkingÚcount_thinking_tag_tokensÚmake_logprob_contentz/models)Úresponse_modelz
/v1/modelsF)r@  Úinclude_in_schemac                 ó€  aa€ RR0oV3R lp  \        R\        4      ! 4       pVP                   Uu. uF  q ! V4      '       g   K  VNK  	  ppV Uu. uF(  pRVP                  RRR\        VP                  4      /NK*  	  pp\        P                  P                  R	4      oS'       dt   \        ;QJ d    V3R
 lV 4       F  '       d   K   RM	  RM! V3R
 lV 4       4      '       d4   VP                  RSRRR\        \        P                  ! 4       4      /4       RRRV/pV# u upi   \         d    . p Lêi ; iu upi )z/
Return list of locally downloaded MLX models.
zconfig.jsonztokenizer_config.jsonc                 ó�  <€ V P                   R 8w  d   R# RV P                  9  d   R# V P                  R,          P                   Uu0 uF  qP                  P                  kK  	  ppRV9   ;'       g5    \
        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      pSP                  V4      ;'       d    T# u upi )r™   FÚmainzmodel.safetensors.index.jsonc              3   óB   "  € T F  qP                  R 4      x € K  	  R# 5i)z.safetensorsN)Úendswith)Ú.0Ú	file_names   & r8   Ú	<genexpr>Ú;models_endpoint.<locals>.probably_mlx_lm.<locals>.<genexpr>v  s    é € ð J
Ù@J°9×Ñ˜~×.Ð.Ã
ùs   ‚T)Ú	repo_typeÚrefsÚfilesÚ	file_pathrç   ÚanyÚissubset)ÚrepoÚfÚ
file_namesÚhas_weightsÚrequired_filess   &   €r8   Úprobably_mlx_lmÚ(models_endpoint.<locals>.probably_mlx_lmp  s±   ø€ Ø�>‰>˜WÔ$ÙØ˜Ÿ™Ô"ÙØ04·	±	¸&Õ0A×0GÒ0GÓHÑ0G¨1—k‘k×&Ô&Ñ0Gˆ
ÐHØ4¸
ÑB÷ 
ð 
ÇcÃcñ J
Ù@JóJ
ÇcÇcÂcñ J
Ù@JóJ
ó G
ˆð ×&Ñ& zÓ2×BÐB°{ÐBùò	 Is   ÁCr   Úidr¶   r™   ÚcreatedrA   c              3   ó:   <"  € T F  qR ,          S8g  x € K  	  R# 5i)rX  Nrs   )rG  r™   r@   s   & €r8   rI  Ú"models_endpoint.<locals>.<genexpr>Š  s   øé € ÐLÁV¸E $�K¨<Ö7ÃVùs   ƒFTrÎ   Údata)r¿   r   Úreposr   Úrepo_idrv   Úlast_modifiedr.   rN   rO   ÚallrÙ   Útime)rV  Úhf_cache_inforQ  Údownloaded_modelsÚmodelsÚresponser@   rU  s         @@r8   Úmodels_endpointrf  g  s,  ù€ ð $Ð%<Ð=€Nõ	CðÜ,Ð-=¼~ÔNÓPˆà*×0Ò0ó
Ù0�T°OÀD×4I�DˆDÑ0ð 	ð 
ñ &óá%ˆDð 
ˆt�|‰|˜X w°	¼3¸t×?QÑ?QÓ;RÓSÙ%ð ð ô ×&Ñ&×*Ñ*¨<Ó8€LßŸ›ÔLÁVÓLŸŸšÔLÁVÓL×LÒLØ�‰Ø�< ¨7°I¼sÄ4Ç9Â9Ã;Ó?OÐPô	
ð ˜& &¨&Ð1€Hà€Oùò'
øô ô ØÒðüòs.   Ž#D( ±D#ÁD#ÁD( Á.D;Ä#D( Ä(D8Ä7D8Úhttpc                ó$   € V ^8„  d   QhR\         /# )r4   r|   )r   )r7   s   "r8   r9   r9   ˜  s   € ÷ ñ ¤Wñ r:   c              ƒ   ó^   "  € V! V 4      G R j  x€L
 pR\          2VP                  R&   V#  L5i)Nzmlx_vlm/ÚServer)r   r‘   )r|   Ú	call_nextre  s   && r8   Úadd_server_headerrl  —  s3   é € á˜wÓ'×'€HØ#+¬K¨=Ð!9€H×Ñ�XÑØ€Oñ (ùs   ‚-Ž+�-z/healthc               ƒ  óÄ   "  € \        4       p RRRV R,          RV R,          RV R,          RV R,          RV R,          RV R,          R	V R	,          R
V R,          R,          /	# 5i)z:
Check if the server is healthy and what model is loaded.
ÚstatusÚhealthyr@   rB   rF   rG   rH   rI   rK   Úapc_enabledr   rM   )rZ   r-   s    r8   Úhealth_checkrq  ž  sx   é € ô
 'Ó(€Gà�)Ø˜ Õ/Ø˜'Ð"2Õ3Ø˜wÐ'<Õ=Ø" GÐ,FÕ$GØ! 7Ð+DÕ#EØ˜gÐ&:Õ;Ø% wÐ/LÕ'MØ�w˜u•~ iÕ0ð
ð 
ùs   ‚AA z/metricsz/v1/metrics)rA  c               ƒ   ód   "  € \         P                  P                  4       p \        4       V R &   V # 5i)Úserver)r.   r¥   ÚsnapshotrZ   )Úpayloads    r8   Úmetrics_endpointrv  ±  s+   é € ô �o‰o×&Ñ&Ó(€GÜ0Ó2€GˆHÑØ€Nùs   ‚.0z/v1/cache/statsz/cache/statsc               ƒ  ó€   "  € \         P                  f   RR/# \         P                  P                  4       p RV R&   V # 5i)z@Return Automatic Prefix Cache statistics (or ``enabled=false``).rM   FT)r.   rV   rW   )Úsnaps    r8   Úapc_cache_statsry  ¹  s@   é € ô ×ÑÒ"Ø˜5Ð!Ð!Ü×Ñ×-Ñ-Ó/€DØ€Dˆ�OØ€Kùs   ‚<>z/v1/cache/resetz/cache/resetc               ƒ   ó~   "  € \         P                  f   RR/# \         P                  P                  4        RRRR/# 5i)NrM   FTrn  Úcleared)r.   rV   r"  rs   r:   r8   Úapc_cache_resetr|  Ä  s?   é € ô ×ÑÒ"Ø˜5Ð!Ð!Ü×Ñ×ÑÔØ�t˜X yÐ1Ð1ùs   ‚;=z/unloadc               ƒ  óÊ   "  € R\         P                  P                  RR4      R\         P                  P                  RR4      /p \        4       '       g   RRRR	/# RR
RRRV /# 5i)z0
Unload the currently loaded model from memory.
Ú
model_namerA   NÚadapter_namerC   rn  Úno_model_loadedÚmessagezNo model is currently loadedÚsuccesszModel unloaded successfullyÚunloaded)r.   rN   rO   r  )Úunloaded_infos    r8   Úunload_model_endpointr…  Í  sv   é € ð 	”g×)Ñ)×-Ñ-¨l¸DÓAØœ×+Ñ+×/Ñ/°ÀÓEð€Mô
 ×ÒØÐ+¨YÐ8VÐWÐWð 	�)ØÐ0Ø�Mðð ùs   ‚A!A#c                  ó    € ^RI Hp  V ! 4        R# )é   )rD  N)ÚclirD  )Úcli_mains    r8   rD  rD  á  s
   € Ý%á†Jr:   Ú__main__)NN)Nr   râ   )wr¢   r©   Úloggingrö   rã   ra  Ú
contextlibr   Ú	threadingr   Útypesr   Útypingr   r   r   r	   Úmlx.coreÚcorer§   Úfastapir
   r   r   Úfastapi.middleware.corsr   Úhuggingface_hubr   Úhuggingface_hub.errorsr   rÌ   r   r  r/  r   r   r   Úgenerate.edit_imager   Úgenerate.imager   r   Ú
structuredr   Útool_parsersr   r  r   r  r   Ú	anthropicr   Úregister_anthropic_routesÚ
generationr   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   ÚopenaiÚregister_openai_routesÚresponses_stater,   rÈ   r.   Úschemasr/   r0   r1   ÚDEFAULT_SERVER_HOSTÚDEFAULT_SERVER_PORTÚ	getLoggerrù   rZ   rƒ   rw   rx   r”   r¬   r°   r¼   rz   rÅ   rÑ   rà   r¥   r¿   rï   rÿ   rü   Úadd_middlewareÚ
MAX_IMAGESr¶   r  rû   r  Ú_protocol_depsrO   rf  Ú
middlewarerl  rq  rv  ry  Úpostr|  r…  rD  rí   rs   r:   r8   Ú<module>r©     s;  ðÛ Û 	Û Û 	Û 
Û Ý *Ý Ý !ß /Ó /å ß 3Ñ 3Ý 2Ý *Ý 0å ÷ñ õ
 8ß SÝ ;Ý <Ý !Ý -Ý C÷÷ ÷ ÷ ñ õ" >Ý DÝ ß CÑ CàÐ ØÐ à	×	Ò	Ð+Ó	,€õ%÷PCõL/õ0õAð<ð
 "ð<ð !÷<ò@õò:
÷÷,Põ
÷ñ. %Ó&€„ôò	Kð ñ
ó ð
ñ Ø
!ØyØØô	€ð × Ñ ØØ�%ØØ�%Ø�%ð ô ð €
ñ “8Ð ð
 "ñQ$ð ÷	Q$ð Q$òjñ< !Ø$ññ Wñññ&ñð #Ø"Ø$DØ Ø"Ø8Ø.ô1€ñ4 ˜#˜~Ô .Ù �s˜NÔ +ð ‡�ˆ >€Ó2Ø‡�ˆ nÈ€ÓNñ(ó Oó 3ð(ð\ ‡��Óôó ðð ‡�ˆÓñó ðð$ ‡�ˆÓØ‡�ˆ¨%€Ó0ñó 1ó ðð ‡�Ð	ÓØ‡�ˆ¨5€Ó1ñó 2ó ðð ‡�Ð
ÓØ‡�ˆ.¨E€Ó2ñ2ó 3ó ð2ð ‡�ˆ)Óñó ðò&ð ˆzÔÙ†Fñ r:   