Skip to content

Commit 82fd455

Browse files
authored
Merge pull request #1340 from WolframResearch/feature/default-model-update
Update default model
2 parents e5c2fb4 + 8f682b8 commit 82fd455

File tree

8 files changed

+116
-52
lines changed

8 files changed

+116
-52
lines changed

Source/Chatbook/ChatState.wl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ withChatState[ eval_ ] :=
8686
$includeStackTrace = True,
8787
$sources = <| |>,
8888
$excludedBasePrompts = $excludedBasePrompts,
89+
$endToken = $endToken,
8990

9091
(* Values used for token budgets during cell serialization: *)
9192
$cellStringBudget = $cellStringBudget,

Source/Chatbook/Common.wl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@ catchTop[ eval_, sym_Symbol ] :=
608608
$messageSymbol = Replace[ $messageSymbol, Chatbook -> sym ],
609609
$catching = True,
610610
$failed = False,
611+
$timeToFirstToken = None,
611612
catchTop = # &,
612613
catchTopAs = (#1 &) &
613614
},

Source/Chatbook/CommonSymbols.wl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ BeginPackage[ "Wolfram`Chatbook`Common`" ];
4242
`$dynamicText;
4343
`$dynamicTrigger;
4444
`$enableLLMServices;
45+
`$endToken;
4546
`$evaluationCell;
4647
`$evaluationNotebook;
4748
`$excludedBasePrompts;
@@ -96,6 +97,7 @@ BeginPackage[ "Wolfram`Chatbook`Common`" ];
9697
`$templateBoxOptionsCache;
9798
`$thinkingEnd;
9899
`$thinkingStart;
100+
`$timeToFirstToken;
99101
`$timingLog;
100102
`$tinyHashLength;
101103
`$tokenBudget;

Source/Chatbook/Models.wl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Needs[ "Wolfram`Chatbook`UI`" ];
1414
(* ::Section::Closed:: *)
1515
(*Configuration*)
1616
$defaultLLMKitService := Replace[ $llmKitService, Except[ _String ] :> "AzureOpenAI" ];
17-
$defaultLLMKitModelName = "gpt-4o-2024-08-06";
17+
$defaultLLMKitModelName = "gpt-4.1-2025-04-14";
1818

1919
$$modelVersion = DigitCharacter.. ~~ (("." ~~ DigitCharacter...) | "");
2020

Source/Chatbook/Prompting.wl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,8 +330,11 @@ $basePromptComponents[ "WolframLanguageStyle" ] = "
330330
$basePromptComponents[ "WolframLanguageEvaluatorTool" ] = "\
331331
* If the user is asking for a result instead of code to produce that result, use the wolfram_language_evaluator tool";
332332

333-
$basePromptComponents[ "EndTurnToken" ] = "\
334-
* Always end your turn by writing /end.";
333+
$basePromptComponents[ "EndTurnToken" ] :=
334+
If[ StringQ @ $endToken && $endToken =!= "",
335+
"* Always end your turn by writing " <> $endToken <> ".",
336+
""
337+
];
335338

336339
$basePromptComponents[ "ToolCallPreamble" ] = "\
337340
* **Before** you call a tool, briefly explain why you are calling it.

Source/Chatbook/SendChat.wl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,10 @@ chatHandlers[ container_, cellObject_CellObject, settings_ ] :=
11101110
$dynamicSplit = dynamicSplit,
11111111
$settings = settings
11121112
},
1113+
If[ ! NumberQ @ $timeToFirstToken,
1114+
$timeToFirstToken = AbsoluteTime[ ] - $chatStartTime;
1115+
addHandlerArguments[ "TimeToFirstToken" -> Quantity[ $timeToFirstToken, "Seconds" ] ];
1116+
];
11131117
With[ { as = <| #, "ExtractedBodyChunks" -> extractBodyChunks @ # |> },
11141118
bodyChunkHandler[ as ];
11151119
Internal`StuffBag[ $debugLog, $lastStatus = as ];

Source/Chatbook/Settings.wl

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ $defaultChatSettings = <|
3737
"DynamicAutoFormat" -> Automatic,
3838
"EnableChatGroupSettings" -> False,
3939
"EnableLLMServices" -> Automatic,
40+
"EndToken" -> Automatic,
4041
"ExcludedBasePrompts" -> Automatic,
4142
"ExperimentalFeatures" -> Automatic,
4243
"ForceSynchronous" -> Automatic,
@@ -261,6 +262,7 @@ $modelAutoSettings[ Automatic, "GPT4Omni" ] = <|
261262
(* ::Subsubsubsection::Closed:: *)
262263
(*gpt-4.1*)
263264
$modelAutoSettings[ Automatic, "GPT41" ] = <|
265+
"EndToken" -> None,
264266
"HybridToolMethod" -> True,
265267
"MaxContextTokens" -> 1047576,
266268
"Multimodal" -> True,
@@ -376,6 +378,7 @@ $modelAutoSettings[ Automatic, "Mistral" ] = <|
376378
$modelAutoSettings[ Automatic, Automatic ] = <|
377379
"AppendCitations" -> False,
378380
"ConvertSystemRoleToUser" -> False,
381+
"EndToken" -> "/end",
379382
"ExcludedBasePrompts" -> { ParentList },
380383
"PresencePenalty" -> 0.1,
381384
"ReplaceUnicodeCharacters" -> False,
@@ -394,7 +397,13 @@ autoModelSetting[ KeyValuePattern[ "Model" -> model_Association ], key_ ] :=
394397

395398
autoModelSetting[ model0_Association, key_String ] :=
396399
With[ { model = resolveFullModelSpec @ model0 },
397-
autoModelSetting[ model[ "Service" ], model[ "Name" ], model[ "BaseID" ], model[ "Family" ], key ]
400+
autoModelSetting[
401+
toBaseServiceName @ model[ "Service" ],
402+
model[ "Name" ],
403+
model[ "BaseID" ],
404+
model[ "Family" ],
405+
key
406+
]
398407
];
399408

400409
autoModelSetting[ service_String, name_String, id_String, family_String, key_String ] :=
@@ -425,6 +434,18 @@ autoModelSetting[ service_String, name_String, id_String, family_String, key_Str
425434

426435
autoModelSetting // endDefinition;
427436

437+
(* ::**************************************************************************************************************:: *)
438+
(* ::Subsubsection::Closed:: *)
439+
(*toBaseServiceName*)
440+
toBaseServiceName // beginDefinition;
441+
442+
toBaseServiceName[ name_String ] :=
443+
With[ { base = StringDelete[ name, StartOfString~~("LLMKit"|"WolframAI"|"AITutor") ] },
444+
If[ base === "", name, base ]
445+
];
446+
447+
toBaseServiceName // endDefinition;
448+
428449
(* ::**************************************************************************************************************:: *)
429450
(* ::Subsection::Closed:: *)
430451
(*dropModelUnsupportedParameters*)
@@ -613,6 +634,7 @@ resolveAutoSettings[ settings0_Association ] := Enclose[
613634
$openToolCallBoxes = resolved[ "OpenToolCallBoxes" ];
614635
$experimentalFeatures = resolved[ "ExperimentalFeatures" ];
615636
$excludedBasePrompts = DeleteDuplicates @ Select[ resolved[ "ExcludedBasePrompts" ], StringQ ];
637+
$endToken = resolved[ "EndToken" ];
616638

617639
If[ resolved[ "ForceSynchronous" ], $showProgressText = True ];
618640

@@ -1018,10 +1040,10 @@ autoStopTokens // endDefinition;
10181040
(* ::Subsubsubsection::Closed:: *)
10191041
(*methodStopTokens*)
10201042
methodStopTokens // beginDefinition;
1021-
methodStopTokens[ "Simple" ] := { "\n/exec", "/end" };
1022-
methodStopTokens[ "Service" ] := { "/end" };
1023-
methodStopTokens[ "Textual"|"JSON" ] := { "ENDTOOLCALL", "/end" };
1024-
methodStopTokens[ _ ] := { "ENDTOOLCALL", "\n/exec", "/end" };
1043+
methodStopTokens[ "Simple" ] := Select[ { "\n/exec", $endToken }, StringQ ];
1044+
methodStopTokens[ "Service" ] := Select[ { $endToken }, StringQ ];
1045+
methodStopTokens[ "Textual"|"JSON" ] := Select[ { "ENDTOOLCALL", $endToken }, StringQ ];
1046+
methodStopTokens[ _ ] := Select[ { "ENDTOOLCALL", "\n/exec", $endToken }, StringQ ];
10251047
methodStopTokens // endDefinition;
10261048

10271049
(* ::**************************************************************************************************************:: *)

Source/Chatbook/Tools/Examples.wl

Lines changed: 75 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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*)
162164
messageTemplate // beginDefinition;
163165

164166
messageTemplate[ 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*)
177176
user // 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+
180189
user // endDefinition;
181190

182191
(* ::**************************************************************************************************************:: *)
183192
(* ::Subsubsubsection::Closed:: *)
184193
(*assistant*)
185194
assistant // 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+
189210
assistant // endDefinition;
190211

191212
(* ::**************************************************************************************************************:: *)
192213
(* ::Subsubsubsection::Closed:: *)
193214
(*system*)
194215
system // 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+
197228
system // endDefinition;
198229

199230
(* ::**************************************************************************************************************:: *)

0 commit comments

Comments
 (0)