Merge pull request #3108 from SillyTavern/claude-no-filler Claude: remove user filler from prompt converter

8dbd78f560da4e81e5f456c82cece04977805a15

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
5 files changed, +4 -39Showing whitespace changes
default/content/presets/openai/Default.json+0 -1
@@ -230,7 +230,6 @@
230230 "show_external_models": false,
231231 "assistant_prefill": "",
232232 "assistant_impersonation": "",
233- "human_sysprompt_message": "Let's get started. Please generate your response based on the information and instructions provided above.",
234233 "claude_use_sysprompt": false,
235234 "use_alt_scale": false,
236235 "squash_system_messages": false,
public/index.html+0 -9
@@ -1959,15 +1959,6 @@
19591959 Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.
19601960 </span>
19611961 </div>
1962- <div id="claude_human_sysprompt_message_block" class="wide100p">
1963- <div class="range-block-title openai_restorable">
1964- <span data-i18n="User first message">User first message</span>
1965- <div id="claude_human_sysprompt_message_restore" title="Restore User first message" data-i18n="[title]Restore User first message" class="right_menu_button">
1966- <div class="fa-solid fa-clock-rotate-left"></div>
1967- </div>
1968- </div>
1969- <textarea id="claude_human_sysprompt_textarea" class="text_pole textarea_compact autoSetHeight" rows="2" data-i18n="[placeholder]Human message" placeholder="Human message, instruction, etc.&#10;Adds nothing when empty, i.e. requires a new prompt with the role 'user'."></textarea>
1970- </div>
19711962 </div>
19721963 </div>
19731964 <div class="range-block m-t-1" data-source="openai,openrouter,scale,custom">
public/scripts/openai.js+0 -24
@@ -99,7 +99,6 @@ const default_wi_format = '{0}';
9999const default_new_chat_prompt = '[Start a new Chat]';
100100const default_new_group_chat_prompt = '[Start a new group chat. Group members: {{group}}]';
101101const default_new_example_chat_prompt = '[Example Chat]';
102-const default_claude_human_sysprompt_message = 'Let\'s get started. Please generate your response based on the information and instructions provided above.';
103102const default_continue_nudge_prompt = '[Continue the following message. Do not include ANY parts of the original message. Use capitalization and punctuation as if your reply is a part of the original message: {{lastChatMessage}}]';
104103const default_bias = 'Default (none)';
105104const default_personality_format = '[{{char}}\'s personality: {{personality}}]';
@@ -276,7 +275,6 @@ const default_settings = {
276275 proxy_password: '',
277276 assistant_prefill: '',
278277 assistant_impersonation: '',
279- human_sysprompt_message: default_claude_human_sysprompt_message,
280278 claude_use_sysprompt: false,
281279 use_makersuite_sysprompt: true,
282280 use_alt_scale: false,
@@ -353,7 +351,6 @@ const oai_settings = {
353351 proxy_password: '',
354352 assistant_prefill: '',
355353 assistant_impersonation: '',
356- human_sysprompt_message: default_claude_human_sysprompt_message,
357354 claude_use_sysprompt: false,
358355 use_makersuite_sysprompt: true,
359356 use_alt_scale: false,
@@ -1892,7 +1889,6 @@ async function sendOpenAIRequest(type, messages, signal) {
18921889 generate_data['top_k'] = Number(oai_settings.top_k_openai);
18931890 generate_data['claude_use_sysprompt'] = oai_settings.claude_use_sysprompt;
18941891 generate_data['stop'] = getCustomStoppingStrings(); // Claude shouldn't have limits on stop strings.
1895- generate_data['human_sysprompt_message'] = substituteParams(oai_settings.human_sysprompt_message);
18961892 // Don't add a prefill on quiet gens (summarization) and when using continue prefill.
18971893 if (!isQuiet && !(isContinue && oai_settings.continue_prefill)) {
18981894 generate_data['assistant_prefill'] = isImpersonate ? substituteParams(oai_settings.assistant_impersonation) : substituteParams(oai_settings.assistant_prefill);
@@ -3030,7 +3026,6 @@ function loadOpenAISettings(data, settings) {
30303026 oai_settings.proxy_password = settings.proxy_password ?? default_settings.proxy_password;
30313027 oai_settings.assistant_prefill = settings.assistant_prefill ?? default_settings.assistant_prefill;
30323028 oai_settings.assistant_impersonation = settings.assistant_impersonation ?? default_settings.assistant_impersonation;
3033- oai_settings.human_sysprompt_message = settings.human_sysprompt_message ?? default_settings.human_sysprompt_message;
30343029 oai_settings.image_inlining = settings.image_inlining ?? default_settings.image_inlining;
30353030 oai_settings.inline_image_quality = settings.inline_image_quality ?? default_settings.inline_image_quality;
30363031 oai_settings.bypass_status_check = settings.bypass_status_check ?? default_settings.bypass_status_check;
@@ -3070,7 +3065,6 @@ function loadOpenAISettings(data, settings) {
30703065 $('#openai_proxy_password').val(oai_settings.proxy_password);
30713066 $('#claude_assistant_prefill').val(oai_settings.assistant_prefill);
30723067 $('#claude_assistant_impersonation').val(oai_settings.assistant_impersonation);
3073- $('#claude_human_sysprompt_textarea').val(oai_settings.human_sysprompt_message);
30743068 $('#openai_image_inlining').prop('checked', oai_settings.image_inlining);
30753069 $('#openai_bypass_status_check').prop('checked', oai_settings.bypass_status_check);
30763070
@@ -3400,7 +3394,6 @@ async function saveOpenAIPreset(name, settings, triggerUi = true) {
34003394 show_external_models: settings.show_external_models,
34013395 assistant_prefill: settings.assistant_prefill,
34023396 assistant_impersonation: settings.assistant_impersonation,
3403- human_sysprompt_message: settings.human_sysprompt_message,
34043397 claude_use_sysprompt: settings.claude_use_sysprompt,
34053398 use_makersuite_sysprompt: settings.use_makersuite_sysprompt,
34063399 use_alt_scale: settings.use_alt_scale,
@@ -3825,7 +3818,6 @@ function onSettingsPresetChange() {
38253818 proxy_password: ['#openai_proxy_password', 'proxy_password', false],
38263819 assistant_prefill: ['#claude_assistant_prefill', 'assistant_prefill', false],
38273820 assistant_impersonation: ['#claude_assistant_impersonation', 'assistant_impersonation', false],
3828- human_sysprompt_message: ['#claude_human_sysprompt_textarea', 'human_sysprompt_message', false],
38293821 claude_use_sysprompt: ['#claude_use_sysprompt', 'claude_use_sysprompt', true],
38303822 use_makersuite_sysprompt: ['#use_makersuite_sysprompt', 'use_makersuite_sysprompt', true],
38313823 use_alt_scale: ['#use_alt_scale', 'use_alt_scale', true],
@@ -4677,10 +4669,6 @@ function toggleChatCompletionForms() {
46774669 const validSources = $(this).data('source').split(',');
46784670 $(this).toggle(validSources.includes(oai_settings.chat_completion_source));
46794671 });
4680-
4681- if (chat_completion_sources.CLAUDE == oai_settings.chat_completion_source) {
4682- $('#claude_human_sysprompt_message_block').toggle(oai_settings.claude_use_sysprompt);
4683- }
46844672}
46854673
46864674async function testApiConnection() {
@@ -5036,7 +5024,6 @@ export function initOpenAI() {
50365024
50375025 $('#claude_use_sysprompt').on('change', function () {
50385026 oai_settings.claude_use_sysprompt = !!$('#claude_use_sysprompt').prop('checked');
5039- $('#claude_human_sysprompt_message_block').toggle(oai_settings.claude_use_sysprompt);
50405027 saveSettingsDebounced();
50415028 });
50425029
@@ -5113,12 +5100,6 @@ export function initOpenAI() {
51135100 saveSettingsDebounced();
51145101 });
51155102
5116- $('#claude_human_sysprompt_message_restore').on('click', function () {
5117- oai_settings.human_sysprompt_message = default_claude_human_sysprompt_message;
5118- $('#claude_human_sysprompt_textarea').val(oai_settings.human_sysprompt_message);
5119- saveSettingsDebounced();
5120- });
5121-
51225103 $('#newgroupchat_prompt_restore').on('click', function () {
51235104 oai_settings.new_group_chat_prompt = default_new_group_chat_prompt;
51245105 $('#newgroupchat_prompt_textarea').val(oai_settings.new_group_chat_prompt);
@@ -5210,11 +5191,6 @@ export function initOpenAI() {
52105191 saveSettingsDebounced();
52115192 });
52125193
5213- $('#claude_human_sysprompt_textarea').on('input', function () {
5214- oai_settings.human_sysprompt_message = String($('#claude_human_sysprompt_textarea').val());
5215- saveSettingsDebounced();
5216- });
5217-
52185194 $('#openrouter_use_fallback').on('input', function () {
52195195 oai_settings.openrouter_use_fallback = !!$(this).prop('checked');
52205196 saveSettingsDebounced();
src/endpoints/backends/chat-completions.js+1 -1
@@ -102,7 +102,7 @@ async function sendClaudeRequest(request, response) {
102102 const additionalHeaders = {};
103103 const useTools = request.body.model.startsWith('claude-3') && Array.isArray(request.body.tools) && request.body.tools.length > 0;
104104 const useSystemPrompt = (request.body.model.startsWith('claude-2') || request.body.model.startsWith('claude-3')) && request.body.claude_use_sysprompt;
105105 const convertedPrompt = convertClaudeMessages(request.body.messages, request.body.assistant_prefill, useSystemPrompt, useTools, request.body.human_sysprompt_message, request.body.char_name, request.body.user_name);
106106 // Add custom stop sequences
107107 const stopSequences = [];
108108 if (Array.isArray(request.body.stop)) {
src/prompt-converters.js+3 -4
@@ -91,11 +91,10 @@ export function convertClaudePrompt(messages, addAssistantPostfix, addAssistantP
9191 * @param {string} prefillString User determined prefill string
9292 * @param {boolean} useSysPrompt See if we want to use a system prompt
9393 * @param {boolean} useTools See if we want to use tools
94- * @param {string} humanMsgFix Add Human message between system prompt and assistant.
9594 * @param {string} charName Character name
9695 * @param {string} userName User name
9796 */
9897export function convertClaudeMessages(messages, prefillString, useSysPrompt, useTools, humanMsgFix, charName = '', userName = '') {
9998 let systemPrompt = [];
10099 if (useSysPrompt) {
101100 // Collect all the system messages up until the first instance of a non-system message, and then remove them from the messages array.
@@ -122,10 +121,10 @@ export function convertClaudeMessages(messages, prefillString, useSysPrompt, use
122121
123122 // Check if the first message in the array is of type user, if not, interject with humanMsgFix or a blank message.
124123 // Also prevents erroring out if the messages array is empty.
125124 if (messages.length === 0 || (messages.length > 0 && messages[0].role !== 'user')) {
126125 messages.unshift({
127126 role: 'user',
128127 content: humanMsgFix || PROMPT_PLACEHOLDER,
129128 });
130129 }
131130 }