@@ -9,6 +9,8 @@ Needs[ "Wolfram`Chatbook`Common`" ];
99(* ::**************************************************************************************************************:: *)
1010(* ::Section::Closed:: *)
1111(*Configuration*)
12+ $endToken = "/end" ;
13+ $endTokenString := If [ StringQ @ $endToken && $endToken =!= "" , "\n " <> $endToken , "" ];
1214
1315(* ::**************************************************************************************************************:: *)
1416(* ::Section::Closed:: *)
@@ -72,100 +74,97 @@ $messageTemplateType = "Basic";
7274(* ::Subsubsubsection::Closed:: *)
7375(*Basic*)
7476$chatMessageTemplates [ "Basic" ] = < | |> ;
75- $chatMessageTemplates [ "Basic" , "User" ] = "User: %%1%% " ;
76- $chatMessageTemplates [ "Basic" , "Assistant" ] = "Assistant: %%1%% \n /end " ;
77- $chatMessageTemplates [ "Basic" , "System" ] = "System: %%1%% " ;
77+ $chatMessageTemplates [ "Basic" , "User" ] = "User: `Content` " ;
78+ $chatMessageTemplates [ "Basic" , "Assistant" ] = "Assistant: `Content``EndToken` " ;
79+ $chatMessageTemplates [ "Basic" , "System" ] = "System: `Content` " ;
7880
7981(* ::**************************************************************************************************************:: *)
8082(* ::Subsubsubsection::Closed:: *)
8183(*Instruct*)
8284$chatMessageTemplates [ "Instruct" ] = < | |> ;
83- $chatMessageTemplates [ "Instruct" , "User" ] = "[INST]%%1%% [/INST]" ;
84- $chatMessageTemplates [ "Instruct" , "Assistant" ] = "%%1%% \n /end " ;
85- $chatMessageTemplates [ "Instruct" , "System" ] = "[INST]%%1%% [/INST]" ;
85+ $chatMessageTemplates [ "Instruct" , "User" ] = "[INST]`Content` [/INST]" ;
86+ $chatMessageTemplates [ "Instruct" , "Assistant" ] = "`Content``EndToken` " ;
87+ $chatMessageTemplates [ "Instruct" , "System" ] = "[INST]`Content` [/INST]" ;
8688
8789(* ::**************************************************************************************************************:: *)
8890(* ::Subsubsubsection::Closed:: *)
8991(*Zephyr*)
9092$chatMessageTemplates [ "Zephyr" ] = < | |> ;
91- $chatMessageTemplates [ "Zephyr" , "User" ] = "<|user|>\n %%1%% </s>" ;
92- $chatMessageTemplates [ "Zephyr" , "Assistant" ] = "<|assistant|>\n %%1%% \n /end " ;
93- $chatMessageTemplates [ "Zephyr" , "System" ] = "<|system|>\n %%1%% </s>" ;
93+ $chatMessageTemplates [ "Zephyr" , "User" ] = "<|user|>\n `Content` </s>" ;
94+ $chatMessageTemplates [ "Zephyr" , "Assistant" ] = "<|assistant|>\n `Content``EndToken` " ;
95+ $chatMessageTemplates [ "Zephyr" , "System" ] = "<|system|>\n `Content` </s>" ;
9496
9597(* ::**************************************************************************************************************:: *)
9698(* ::Subsubsubsection::Closed:: *)
9799(*Phi*)
98100$chatMessageTemplates [ "Phi" ] = < | |> ;
99- $chatMessageTemplates [ "Phi" , "User" ] = "<|user|>\n %%1%% <|end|>" ;
100- $chatMessageTemplates [ "Phi" , "Assistant" ] = "<|assistant|>\n %%1%% \n /end <|end|>" ;
101- $chatMessageTemplates [ "Phi" , "System" ] = "<|user|>\n %%1%% <|end|>" ;
101+ $chatMessageTemplates [ "Phi" , "User" ] = "<|user|>\n `Content` <|end|>" ;
102+ $chatMessageTemplates [ "Phi" , "Assistant" ] = "<|assistant|>\n `Content``EndToken` <|end|>" ;
103+ $chatMessageTemplates [ "Phi" , "System" ] = "<|user|>\n `Content` <|end|>" ;
102104
103105(* ::**************************************************************************************************************:: *)
104106(* ::Subsubsubsection::Closed:: *)
105107(*Boxed*)
106108$chatMessageTemplates [ "Boxed" ] = < | |> ;
107- $chatMessageTemplates [ "Boxed" , "User" ] = "[user]\n %%1%% " ;
108- $chatMessageTemplates [ "Boxed" , "Assistant" ] = "[assistant]\n %%1%% \n /end " ;
109- $chatMessageTemplates [ "Boxed" , "System" ] = "[system]\n %%1%% " ;
109+ $chatMessageTemplates [ "Boxed" , "User" ] = "[user]\n `Content` " ;
110+ $chatMessageTemplates [ "Boxed" , "Assistant" ] = "[assistant]\n `Content``EndToken` " ;
111+ $chatMessageTemplates [ "Boxed" , "System" ] = "[system]\n `Content` " ;
110112
111113(* ::**************************************************************************************************************:: *)
112114(* ::Subsubsubsection::Closed:: *)
113115(*ChatML*)
114116$chatMessageTemplates [ "ChatML" ] = < | |> ;
115- $chatMessageTemplates [ "ChatML" , "User" ] = "<|im_start|>user\n %%1%% <|im_end|>" ;
116- $chatMessageTemplates [ "ChatML" , "Assistant" ] = "<|im_start|>assistant\n %%1%% \n /end <|im_end|>" ;
117- $chatMessageTemplates [ "ChatML" , "System" ] = "<|im_start|>system\n %%1%% <|im_end|>" ;
117+ $chatMessageTemplates [ "ChatML" , "User" ] = "<|im_start|>user\n `Content` <|im_end|>" ;
118+ $chatMessageTemplates [ "ChatML" , "Assistant" ] = "<|im_start|>assistant\n `Content``EndToken` <|im_end|>" ;
119+ $chatMessageTemplates [ "ChatML" , "System" ] = "<|im_start|>system\n `Content` <|im_end|>" ;
118120
119121(* ::**************************************************************************************************************:: *)
120122(* ::Subsubsubsection::Closed:: *)
121123(*XML*)
122124$chatMessageTemplates [ "XML" ] = < | |> ;
123- $chatMessageTemplates [ "XML" , "User" ] = "<user>%%1%% </user>" ;
124- $chatMessageTemplates [ "XML" , "Assistant" ] = "<assistant>%%1%% \n /end </assistant>" ;
125- $chatMessageTemplates [ "XML" , "System" ] = "<system>%%1%% </system>" ;
125+ $chatMessageTemplates [ "XML" , "User" ] = "<user>`Content` </user>" ;
126+ $chatMessageTemplates [ "XML" , "Assistant" ] = "<assistant>`Content``EndToken` </assistant>" ;
127+ $chatMessageTemplates [ "XML" , "System" ] = "<system>`Content` </system>" ;
126128
127129(* ::**************************************************************************************************************:: *)
128130(* ::Subsubsubsection::Closed:: *)
129131(*DeepSeekCoder*)
130132$chatMessageTemplates [ "DeepSeekCoder" ] = < | |> ;
131- $chatMessageTemplates [ "DeepSeekCoder" , "User" ] = "User: %%1%% " ;
132- $chatMessageTemplates [ "DeepSeekCoder" , "Assistant" ] = "Assistant: %%1%% \n /end <\: ff5cend\: 2581of\: 2581sentence\: ff5c>" ;
133- $chatMessageTemplates [ "DeepSeekCoder" , "System" ] = "System: %%1%% " ;
133+ $chatMessageTemplates [ "DeepSeekCoder" , "User" ] = "User: `Content` " ;
134+ $chatMessageTemplates [ "DeepSeekCoder" , "Assistant" ] = "Assistant: `Content``EndToken` <\: ff5cend\: 2581of\: 2581sentence\: ff5c>" ;
135+ $chatMessageTemplates [ "DeepSeekCoder" , "System" ] = "System: `Content` " ;
134136
135137(* ::**************************************************************************************************************:: *)
136138(* ::Subsubsubsection::Closed:: *)
137139(*Llama*)
138140$chatMessageTemplates [ "Llama" ] = < | |> ;
139- $chatMessageTemplates [ "Llama" , "User" ] = "<|start_header_id|>user<|end_header_id|>\n %%1%% <|eot_id|>" ;
140- $chatMessageTemplates [ "Llama" , "Assistant" ] = "<|start_header_id|>assistant<|end_header_id|>\n %%1%% \n /end <|eot_id|>" ;
141- $chatMessageTemplates [ "Llama" , "System" ] = "<|start_header_id|>system<|end_header_id|>\n %%1%% <|eot_id|>" ;
141+ $chatMessageTemplates [ "Llama" , "User" ] = "<|start_header_id|>user<|end_header_id|>\n `Content` <|eot_id|>" ;
142+ $chatMessageTemplates [ "Llama" , "Assistant" ] = "<|start_header_id|>assistant<|end_header_id|>\n `Content``EndToken` <|eot_id|>" ;
143+ $chatMessageTemplates [ "Llama" , "System" ] = "<|start_header_id|>system<|end_header_id|>\n `Content` <|eot_id|>" ;
142144
143145(* ::**************************************************************************************************************:: *)
144146(* ::Subsubsubsection::Closed:: *)
145147(*Gemma*)
146148$chatMessageTemplates [ "Gemma" ] = < | |> ;
147- $chatMessageTemplates [ "Gemma" , "User" ] = "<start_of_turn>user\n %%1%% <end_of_turn>" ;
148- $chatMessageTemplates [ "Gemma" , "Assistant" ] = "<start_of_turn>model\n %%1%% \n /end <end_of_turn>" ;
149- $chatMessageTemplates [ "Gemma" , "System" ] = "<start_of_turn>user\n %%1%% <end_of_turn>" ;
149+ $chatMessageTemplates [ "Gemma" , "User" ] = "<start_of_turn>user\n `Content` <end_of_turn>" ;
150+ $chatMessageTemplates [ "Gemma" , "Assistant" ] = "<start_of_turn>model\n `Content``EndToken` <end_of_turn>" ;
151+ $chatMessageTemplates [ "Gemma" , "System" ] = "<start_of_turn>user\n `Content` <end_of_turn>" ;
150152
151153(* ::**************************************************************************************************************:: *)
152154(* ::Subsubsubsection::Closed:: *)
153155(*Nemotron*)
154156$chatMessageTemplates [ "Nemotron" ] = < | |> ;
155- $chatMessageTemplates [ "Nemotron" , "User" ] = "<extra_id_1>User\n %%1%% " ;
156- $chatMessageTemplates [ "Nemotron" , "Assistant" ] = "<extra_id_1>Assistant\n %%1%% \n /end " ;
157- $chatMessageTemplates [ "Nemotron" , "System" ] = "<extra_id_0>System\n %%1%% " ;
157+ $chatMessageTemplates [ "Nemotron" , "User" ] = "<extra_id_1>User\n `Content` " ;
158+ $chatMessageTemplates [ "Nemotron" , "Assistant" ] = "<extra_id_1>Assistant\n `Content``EndToken` " ;
159+ $chatMessageTemplates [ "Nemotron" , "System" ] = "<extra_id_0>System\n `Content` " ;
158160
159161(* ::**************************************************************************************************************:: *)
160162(* ::Subsubsubsection::Closed:: *)
161163(*messageTemplate*)
162164messageTemplate // beginDefinition ;
163165
164166messageTemplate [ id_ String ] := Enclose [
165- StringTemplate [
166- ConfirmBy [ $chatMessageTemplates [ $messageTemplateType , id ], StringQ , "TemplateString" ],
167- Delimiters -> "%%"
168- ],
167+ StringTemplate @ ConfirmBy [ $chatMessageTemplates [ $messageTemplateType , id ], StringQ , "TemplateString" ],
169168 throwInternalFailure
170169];
171170
@@ -175,25 +174,57 @@ messageTemplate // endDefinition;
175174(* ::Subsubsubsection::Closed:: *)
176175(*user*)
177176user // beginDefinition ;
178- user [ a_ List ] := TemplateApply [ messageTemplate [ "User" ], StringRiffle [ TextString /@ Flatten @ a , "\n " ] ];
179- user [ a_ String ] := user @ { a };
177+
178+ user [ a_ List ] := TemplateApply [
179+ messageTemplate [ "User" ],
180+ < |
181+ "Content" -> StringRiffle [ TextString /@ Flatten @ a , "\n " ],
182+ "EndToken" -> $endTokenString
183+ |>
184+ ];
185+
186+ user [ a_ String ] :=
187+ user @ { a };
188+
180189user // endDefinition ;
181190
182191(* ::**************************************************************************************************************:: *)
183192(* ::Subsubsubsection::Closed:: *)
184193(*assistant*)
185194assistant // beginDefinition ;
186- assistant [ { a___ , "tool" |"Tool" -> { name_ , as_ }, b___ } ] := assistant @ { a , toolCall [ name , as ], b };
187- assistant [ a_ List ] := TemplateApply [ messageTemplate [ "Assistant" ], StringRiffle [ TextString /@ Flatten @ a , "\n " ] ];
188- assistant [ a_ String ] := assistant @ { a };
195+
196+ assistant [ { a___ , "tool" |"Tool" -> { name_ , as_ }, b___ } ] :=
197+ assistant @ { a , toolCall [ name , as ], b };
198+
199+ assistant [ a_ List ] := TemplateApply [
200+ messageTemplate [ "Assistant" ],
201+ < |
202+ "Content" -> StringRiffle [ TextString /@ Flatten @ a , "\n " ],
203+ "EndToken" -> $endTokenString
204+ |>
205+ ];
206+
207+ assistant [ a_ String ] :=
208+ assistant @ { a };
209+
189210assistant // endDefinition ;
190211
191212(* ::**************************************************************************************************************:: *)
192213(* ::Subsubsubsection::Closed:: *)
193214(*system*)
194215system // beginDefinition ;
195- system [ a_ List ] := TemplateApply [ messageTemplate [ "System" ], StringRiffle [ TextString /@ Flatten @ a , "\n " ] ];
196- system [ a_ String ] := system @ { a };
216+
217+ system [ a_ List ] := TemplateApply [
218+ messageTemplate [ "System" ],
219+ < |
220+ "Content" -> StringRiffle [ TextString /@ Flatten @ a , "\n " ],
221+ "EndToken" -> $endTokenString
222+ |>
223+ ];
224+
225+ system [ a_ String ] :=
226+ system @ { a };
227+
197228system // endDefinition ;
198229
199230(* ::**************************************************************************************************************:: *)
0 commit comments