§
    u�’j²  ã                  óš   — d dl mZ d dlZd dlmZ 	 d dlmZmZ dZn# e	$ r	 dZdZdZY nw xY w ej
        d¦  «        Z G d„ d	¦  «        ZdS )
é    )ÚannotationsN)ÚAny)ÚgenerateÚloadTFzdscons.llm.mlxc                  ó6   — e Zd ZdZdd„Zdd„Zd	d
d	d	dœdd„Zd	S )ÚMlxBackendMixinz0Local Apple Silicon MLX inference backend mixin.Úreturnútuple[Any, Any]c                ó¨   — t           st          d¦  «        ‚| j        �| j        €!t	          | j        ¦  «        \  | _        | _        | j        | j        fS )z5Load and cache the configured MLX model on first use.um   ThÆ° viá»‡n MLX khÃ´ng kháº£ dá»¥ng trÃªn mÃ´i trÆ°á»�ng hiá»‡n táº¡i (chá»‰ há»— trá»£ macOS Apple Silicon).)ÚHAS_MLXÚRuntimeErrorÚ_modelÚ
_tokenizerr   Ú_model_path)Úselfs    ú@C:\Projects\DSCons\app\modules\agents\application\mlx_backend.pyÚ_ensure_model_loadedz$MlxBackendMixin._ensure_model_loaded   sX   € åð 	ÝØñô ð ð Œ;Ð $¤/Ð"9Ý+/°Ô0@Ñ+AÔ+AÑ(ˆDŒK˜œØŒ{˜DœOÐ+Ð+ó    Úmessagesúlist[dict[str, str]]Ústrc                ó  — |                       ¦   «         \  }}t          |d¦  «        r/|                     |dd¬¦  «        }t          |t          ¦  «        r|S g }|D ]ˆ}t	          |                     dd¦  «        ¦  «                             ¦   «         pd}t	          |                     dd¦  «        ¦  «        }|                     |                     ¦   «         › d	|› �¦  «         Œ‰|                     d
¦  «         d 	                    |¦  «        S )z;Convert OpenAI-style messages into a prompt string for MLX.Úapply_chat_templateFT)ÚtokenizeÚadd_generation_promptÚroleÚuserÚcontentÚ z: z
ASSISTANT:z

)
r   Úhasattrr   Ú
isinstancer   ÚgetÚstripÚappendÚupperÚjoin)	r   r   Ú_Ú	tokenizerÚpromptÚrendered_messagesÚmessager   r   s	            r   Ú_build_promptzMlxBackendMixin._build_prompt   s  € à×0Ò0Ñ2Ô2‰ˆˆ9å�9Ð3Ñ4Ô4ð 	Ø×2Ò2ØØØ&*ð 3ñ ô ˆFõ
 ˜&¥#Ñ&Ô&ð Ø�à')ÐØð 	Cð 	CˆGÝ�w—{’{ 6¨6Ñ2Ô2Ñ3Ô3×9Ò9Ñ;Ô;ÐE¸vˆDÝ˜'Ÿ+š+ i°Ñ4Ô4Ñ5Ô5ˆGØ×$Ò$¨¯
ª
©¬Ð%AÐ%A¸Ð%AÐ%AÑBÔBÐBÐBØ× Ò  Ñ.Ô.Ð.Ø�{Š{Ð,Ñ-Ô-Ð-r   Ngš™™™™™É?)ÚmodelÚtemperatureÚ
max_tokensÚ
extra_bodyr-   ú
str | Noner.   Úfloatr/   ú
int | Noner0   údict[str, Any] | Noneúdict[str, Any]c               óL  — ~|r|| j         k    rt          |¦  «        \  }}n|                      ¦   «         \  }}|                      |¦  «        }|p| j        }	t          ||||	|d¬¦  «        }
t          |
t          ¦  «        st          |
¦  «        }
dd|p| j         ddd|
dœd	œgd
œS )zHRun synchronous MLX generation and map the result to OpenAI-like output.F)r)   r/   ÚtempÚverbosezmlx-chat-completionzchat.completionr   ÚstopÚ	assistant)r   r   )ÚindexÚfinish_reasonr+   )ÚidÚobjectr-   Úchoices)r   r   r   r,   Ú_default_max_tokensr   r!   r   )r   r   r-   r.   r/   r0   Úloaded_modelÚloaded_tokenizerr)   Úeffective_max_tokensÚtexts              r   Ú_generate_sync_mlxz"MlxBackendMixin._generate_sync_mlx4   s÷   € ð àð 	I�U˜dÔ.Ò.Ð.Ý-1°%©[¬[Ñ*ˆLÐ*Ð*à-1×-FÒ-FÑ-HÔ-HÑ*ˆLÐ*à×#Ò# HÑ-Ô-ˆØ)ÐE¨TÔ-EÐåØØØØ+ØØð
ñ 
ô 
ˆõ ˜$¥Ñ$Ô$ð 	Ý�t‘9”9ˆDð (Ø'ØÐ.˜dÔ.ð Ø%+à +Ø#'ð ð  ðð ð	ð	
ð 
ð 	
r   )r	   r
   )r   r   r	   r   )r   r   r-   r1   r.   r2   r/   r3   r0   r4   r	   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   rE   © r   r   r   r      sn   € € € € € Ø:Ð:ð,ð ,ð ,ð ,ð.ð .ð .ð .ð2 !Ø Ø!%Ø,0ð.
ð .
ð .
ð .
ð .
ð .
ð .
ð .
r   r   )Ú
__future__r   ÚloggingÚtypingr   Úmlx_lmr   r   r   ÚImportErrorÚ	getLoggerÚloggerr   rJ   r   r   ú<module>rR      sÕ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð ðØ%Ð%Ð%Ð%Ð%Ð%Ð%Ð%à€G€GøØð ð ð Ø€GØ€HØ€D€D€Dðøøøð
 
ˆÔ	Ð+Ñ	,Ô	,€ðP
ð P
ð P
ð P
ð P
ñ P
ô P
ð P
ð P
ð P
s   ’
 �+ª+