+
    UV-j&   ã                   ó  a € R t0 t R t^ RIt^ RIHtHt ^ RIHtHt  ! R R]4      t	]P                   ! R R4      4       t/ t] ^ k RR R	 lltR
 R lt]! ]! RRRRR^ ]	P                  RRR.RR.R7      4       ]! ]! RRRRR^ ]	P                   RRR.RR.R7      4       ]! ]! RRRR R^ ]	P"                  RRR.R.R7      4       ]! ]! RRRR R^ ]	P$                  RRR.R.R7      4       ]R8X  d   ]! R4       ]! R4      tR# R# )!zL
From https://github.com/lm-sys/FastChat/blob/main/fastchat/conversation.py
N)ÚIntEnumÚauto)ÚDictÚListc                   óR   € ] tR t^
tRt]! 4       t]! 4       t]! 4       t]! 4       t	Rt
R# )ÚSeparatorStylezSeparator styles.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   ÚDeepSeekÚ
DeepSeekV2ÚPLAINÚ	ALIGNMENTÚ__static_attributes__r   ó    Úx/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/mlx_vlm/models/deepseekocr/conversation.pyr   r   
   s!   † Ùá‹v€HÙ“€JÙ‹F€EÙ“„Ir   r   c                   óÒ   a € ] tR t^t o RtRtRtRtRt^ t	]
P                  tRtRtRtRtV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR ltR tR tR tR tR tV 3R ltRtV tR# )ÚConversationzIA class that manages prompt templates and keeps all conversation history.ú{system_message}Ú Ú
Nc                ó    <€ V ^8„  d   QhRS[ /# )é   Úreturn©Ústr)ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚConversation.__annotate__,   s   ø€ ÷ <Añ <A™Cñ <Ar   c                óÀ  € V P                   P                  V P                  R7      pV P                  \        P
                  8X  dœ   V P                  V P                  .pVR8X  g   Vf   RpMW^ ,          ,           p\        V P                  4       FK  w  pw  rVV'       d-   W5R,           V,           W$^,          ,          ,           ,          pK<  W5R,           ,          pKM  	  V# V P                  \        P                  8X  d¨   V P                  V P                  .pVR8X  g   Vf   RpMW^ ,          ,           p\        V P                  4       FW  w  pw  rVV'       dF   VR8X  d$   VRV,           V P                  ,           ,          pK:  W6V P                  ,           ,          pKU  TpKY  	  V# V P                  \        P                  8X  d²   V P                  V P                  .pRp\        V P                  4       F|  w  pw  rVV'       dd   \        V4      \        J d   Vw  p pV^,          ^ 8X  d   W6W$^,          ,          ,           ,          pKU  W6W$^,          ,          ,           ,          pKs  VR,          pK~  	  V# V P                  \        P                  8X  d³   V P                  V P                  .pRp\        V P                  4       F}  w  pw  rVV'       de   \        V4      \        J d   Vw  p pV^,          ^ 8X  d    VRW$^,          ,          ,           ,          pKV  W6W$^,          ,          ,           ,          pKt  VR,          pK  	  V# \        RV P                   24      h)	zGet the prompt for generation.©Úsystem_messager   z: Ú:ÚUseru   <ï½œsftâ–�beginï½œ>
z<image>
zInvalid style: )Úsystem_templater   r%   Ú	sep_styler   r   ÚsepÚsep2Ú	enumerateÚmessagesr   r   ÚtypeÚtupler   Ú
ValueError)ÚselfÚsystem_promptÚsepsÚretÚiÚroleÚmessageÚ_s   &       r   Ú
get_promptÚConversation.get_prompt,   s   € à×,Ñ,×3Ñ3À4×CVÑCVÐ3ÓWˆØ�>‰>œ^×4Ñ4Ô4Ø—H‘H˜dŸi™iÐ(ˆDØ Ô" mÒ&;Ø‘à#¨1¥gÕ-�Ü&/°·±Ö&>Ñ"�‘?�DßØ $�;¨Õ0°4¸A½µ;Õ>Õ>’Cà #�:Õ%’Cñ	 '?ð
 ˆJØ�^‰^œ~×8Ñ8Ô8Ø—H‘H˜dŸi™iÐ(ˆDØ Ô" mÒ&;Ø‘à#¨1¥gÕ-�Ü&/°·±Ö&>Ñ"�‘?�DßØ˜v”~ØÐ6¸Õ@À4Ç8Á8ÕKÕKšà¨¯©Õ2Õ2šà’Cñ '?ð ˆJà�^‰^œ~×3Ñ3Ô3Ø—H‘H˜dŸi™iÐ(ˆDØˆCÜ&/°·±Ö&>Ñ"�‘?�DßÜ˜G“}¬Ó-Ø(/™˜  AØ˜1•u ”zØ¨°!­e­Õ4Õ4šà¨°!­e­Õ4Õ4šà˜2•I’Cñ '?ð ˆJØ�^‰^œ~×7Ñ7Ô7Ø—H‘H˜dŸi™iÐ(ˆDØˆCÜ&/°·±Ö&>Ñ"�‘?�DßÜ˜G“}¬Ó-Ø(/™˜  AØ˜1•u ”zØ˜{¨T°aµ%­[Õ8Õ8šà¨°!­e­Õ4Õ4šà˜2•I’Cñ '?ð ˆJä˜¨t¯~©~Ð.>Ð?Ó@Ð@r   c                ó    <€ V ^8„  d   QhRS[ /# )r   r%   r   )r   r    s   "€r   r!   r"   j   s   ø€ ÷ -ñ -±ñ -r   c                ó   € Wn         R# )zSet the system message.Nr$   )r1   r%   s   &&r   Úset_system_messageÚConversation.set_system_messagej   s   € à,Ör   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   r6   r7   r   )r   r    s   "€r   r!   r"   n   s   ø€ ÷ .ñ .¡3ð .±ñ .r   c                ó>   € V P                   P                  W.4       R# )zAppend a new message.N)r-   Úappend)r1   r6   r7   s   &&&r   Úappend_messageÚConversation.append_messagen   s   € à�‰×Ñ˜d˜_Ö-r   c                ó    <€ V ^8„  d   QhRS[ /# )r   r7   r   )r   r    s   "€r   r!   r"   r   s   ø€ ÷ 'ñ '©3ñ 'r   c                ó0   € WP                   R,          ^&   R# )z®Update the last output.

The last message is typically set to be None when constructing the prompt,
so we need to update it in-place after getting the response from a model.
Néÿÿÿÿ©r-   )r1   r7   s   &&r   Úupdate_last_messageÚ Conversation.update_last_messager   s   € ð  '�‰�bÕ˜!Ór   c                ó   € . V n         R# )zReset a new message.NrG   ©r1   s   &r   Úreset_messageÚConversation.reset_messagez   s	   € àˆŽr   c                óÂ   € . p\        V P                  V P                  R 4       F6  w  pw  r4V^,          ^ 8X  d   VP                  VR.4       K+  WAR,          R&   K8  	  V# )z2Convert the conversation to gradio chatbot format.NrF   )r,   r-   ÚoffsetrA   )r1   r4   r5   r6   Úmsgs   &    r   Úto_gradio_chatbotÚConversation.to_gradio_chatbot~   sY   € àˆÜ'¨¯©°d·k±k°mÐ(DÖE‰NˆA‰{�Ø�1�u˜ŒzØ—
‘
˜C ˜;Ö'à!�B•˜“ñ	 Fð
 ˆ
r   c                ó<  € V P                   P                  V P                  R7      pRRRV/.p\        V P                  V P
                  R 4       FH  w  pw  rEV^,          ^ 8X  d   VP                  RRRV/4       K-  Vf   K3  VP                  RRRV/4       KJ  	  V# )z:Convert the conversation to OpenAI chat completion format.r$   r6   ÚsystemÚcontentNÚuserÚ	assistant)r(   r   r%   r,   r-   rO   rA   )r1   r2   r4   r5   r8   rP   s   &     r   Úto_openai_api_messagesÚ#Conversation.to_openai_api_messagesˆ   s˜   € à×,Ñ,×3Ñ3À4×CVÑCVÐ3ÓWˆØ˜ )¨]Ð;Ð<ˆä$ T§]¡]°4·;±;°=Ð%AÖB‰KˆA‰x�Ø�1�u˜ŒzØ—
‘
˜F F¨I°sÐ;Ö<à”?Ø—J‘J ¨°YÀÐDÖEñ Cð ˆ
r   c                ó@  € \        V P                  V P                  V P                  V P                  V P
                   UUu. uF  w  rW.NK
  	  uppV P                  V P                  V P                  V P                  V P                  V P                  R 7      # u uppi ))Únamer(   r%   Úrolesr-   rO   r)   r*   r+   Ústop_strÚstop_token_ids)r   r[   r(   r%   r\   r-   rO   r)   r*   r+   r]   r^   )r1   ÚxÚys   &  r   ÚcopyÚConversation.copy•   sz   € ÜØ—‘Ø ×0Ñ0Ø×.Ñ.Ø—*‘*Ø)-¯ªÔ7©¡ �q“f©Ò7Ø—;‘;Ø—n‘nØ—‘Ø—‘Ø—]‘]Ø×.Ñ.ô
ð 	
ùó
 8s   ÁBc           
     ó~   € R V P                   RV P                  RV P                  RV P                  RV P                  /# )Útemplate_namer%   r\   r-   rO   )r[   r%   r\   r-   rO   rK   s   &r   ÚdictÚConversation.dict¤   s;   € à˜TŸY™YØ˜d×1Ñ1Ø�T—Z‘ZØ˜Ÿ™Ø�d—k‘kð
ð 	
r   c                óÞ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   S[S[ ,          ;R&   S[S[S[ ,          ,          ;R&   S[;R&   S[;R&   S[ ;R&   S[ ;R	&   S[ ;R
&   S[S[,          ;R&   # )r   r[   r(   r%   r\   r-   rO   r)   r*   r+   r]   r^   )r   r   Úintr   )r   r    s   "€r   r!   r"      s¡   ø‡ ‚ ñ
 �Iñ ñ Ñ-ñ ñ Ññ ñ ‘�9Ñ/ñ ñ ‘4™•9�oÑ"ñ ñ �Oñ ñ" Ñ7ñ# ñ$ 
�Oñ% ñ& Ññ' ñ* Ññ+ ñ. ™•IÑ$ò/ r   )r-   r%   ))ÚUSERÚ	ASSISTANTr   )r	   r
   r   r   r   r(   r%   r\   r-   rO   r   r   r)   r*   r+   r]   r^   r9   r=   rB   rH   rL   rQ   rX   ra   re   Ú__annotate_func__r   Ú__classdictcell__)r    s   @r   r   r      sŽ   ø‡ € áSð
 .€Oà€Nà/€Eà "€Hà€Fà .× 7Ñ 7€IØ€CØ€Dà€Hà $€N÷<Að <A÷|-ð -÷.ð .÷'ð 'òòòò
ò
÷c ƒ r   r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚtemplateÚoverride)r   Úbool)r   s   "r   r!   r!   ²   s   € ÷ -ñ -¤\ð -¼Tñ -r   c                óŽ   € V'       g*   V P                   \        9  g   Q V P                    R24       hV \        V P                   &   R# )z%Register a new conversation template.z has been registered.N)r[   Úconv_templates)rn   ro   s   &&r   Úregister_conv_templaters   ²   s=   € çà�M‰M¤Ô/ð	3à�m‰mˆ_Ð1Ð2ó	3Ø/ð %-„N�8—=‘=Ó!r   c                ó0   € V ^8„  d   QhR\         R\        /# )r   r[   r   )r   r   )r   s   "r   r!   r!   ¼   s   € ÷ 'ñ 'œCð '¤Lñ 'r   c                ó8   € \         V ,          P                  4       # )zGet a conversation template.)rr   ra   )r[   s   &r   Úget_conv_templaterv   ¼   s   € ä˜$Õ×$Ñ$Ó&Ð&r   Údeepseekr   r   z

u   <ï½œendâ–�ofâ–�sentenceï½œ>i¡† zUser:)r[   r(   r%   r\   r-   rO   r)   r*   r+   r^   r]   Ú
deepseekv2u   
<ï½œsftâ–�endï½œ>Úplainz</s>Ú	alignmentÚ__main__zdeepseek template:c                ób   € V ^8„  d   Qh/ ^ \         9   d   \        \        \        3,          ;R&   # )r   rr   )Ú__conditional_annotations__r   r   r   )r   s   "r   r!   r!      s*   € ÷ ñ ÷\ -Ò ,””Sœ,Ð&Õ'Ñ ,ò]r   )F)z<|User|>z<|Assistant|>r   )z|<User>|z|<Assistant>|)r   r   )r}   r   ÚdataclassesÚenumr   r   Útypingr   r   r   Ú	dataclassr   rr   rs   rv   r   r   r   r   r	   ÚprintÚconvr!   )r}   s   @r   Ú<module>r„      sy  øðöó ß ß ô�Wô ð ×Ñ÷W
ð W
ó ðW
ðv +-€Ó ,÷-õ'ñ
 ÙØØ*ð Ø+ØØØ ×)Ñ)ØØ*Ø�xØÐ8Ð9ôôñ$ ÙØØ*ØØ+ØØØ ×+Ñ+Ø!Ø*Ø�xØÐ8Ð9ôôñ" ÙØØØØØØØ ×&Ñ&ØØØ�xØ�ôôñ" ÙØØØØØØØ ×*Ñ*ØØØ�xØ�ôôð" ˆzÔÙ	Ð
ÔÙ˜ZÓ(‚Dñ r   