Add system prompt to /genraw command
This commit is contained in:
parent
2e28f24251
commit
ad4269f476
|
@ -2911,17 +2911,24 @@ class StreamingProcessor {
|
||||||
* @param {string} api API to use. Main API is used if not specified.
|
* @param {string} api API to use. Main API is used if not specified.
|
||||||
* @param {boolean} instructOverride true to override instruct mode, false to use the default value
|
* @param {boolean} instructOverride true to override instruct mode, false to use the default value
|
||||||
* @param {boolean} quietToLoud true to generate a message in system mode, false to generate a message in character mode
|
* @param {boolean} quietToLoud true to generate a message in system mode, false to generate a message in character mode
|
||||||
|
* @param {string} [systemPrompt] System prompt to use. Only Instruct mode or OpenAI.
|
||||||
* @returns {Promise<string>} Generated message
|
* @returns {Promise<string>} Generated message
|
||||||
*/
|
*/
|
||||||
export async function generateRaw(prompt, api, instructOverride, quietToLoud) {
|
export async function generateRaw(prompt, api, instructOverride, quietToLoud, systemPrompt) {
|
||||||
if (!api) {
|
if (!api) {
|
||||||
api = main_api;
|
api = main_api;
|
||||||
}
|
}
|
||||||
|
|
||||||
const abortController = new AbortController();
|
const abortController = new AbortController();
|
||||||
const isInstruct = power_user.instruct.enabled && main_api !== 'openai' && main_api !== 'novel' && !instructOverride;
|
const isInstruct = power_user.instruct.enabled && api !== 'openai' && api !== 'novel' && !instructOverride;
|
||||||
const isQuiet = true;
|
const isQuiet = true;
|
||||||
|
|
||||||
|
if (systemPrompt) {
|
||||||
|
systemPrompt = substituteParams(systemPrompt);
|
||||||
|
systemPrompt = isInstruct ? formatInstructModeSystemPrompt(systemPrompt) : systemPrompt;
|
||||||
|
prompt = api === 'openai' ? prompt : `${systemPrompt}\n${prompt}`;
|
||||||
|
}
|
||||||
|
|
||||||
prompt = substituteParams(prompt);
|
prompt = substituteParams(prompt);
|
||||||
prompt = api == 'novel' ? adjustNovelInstructionPrompt(prompt) : prompt;
|
prompt = api == 'novel' ? adjustNovelInstructionPrompt(prompt) : prompt;
|
||||||
prompt = isInstruct ? formatInstructModeChat(name1, prompt, false, true, '', name1, name2, false) : prompt;
|
prompt = isInstruct ? formatInstructModeChat(name1, prompt, false, true, '', name1, name2, false) : prompt;
|
||||||
|
@ -2948,8 +2955,12 @@ export async function generateRaw(prompt, api, instructOverride, quietToLoud) {
|
||||||
case 'textgenerationwebui':
|
case 'textgenerationwebui':
|
||||||
generateData = getTextGenGenerationData(prompt, amount_gen, false, false, null, 'quiet');
|
generateData = getTextGenGenerationData(prompt, amount_gen, false, false, null, 'quiet');
|
||||||
break;
|
break;
|
||||||
case 'openai':
|
case 'openai': {
|
||||||
generateData = [{ role: 'user', content: prompt.trim() }];
|
generateData = [{ role: 'user', content: prompt.trim() }];
|
||||||
|
if (systemPrompt) {
|
||||||
|
generateData.unshift({ role: 'system', content: systemPrompt.trim() });
|
||||||
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = {};
|
let data = {};
|
||||||
|
|
|
@ -231,7 +231,7 @@ parser.addCommand('delswipe', deleteSwipeCallback, ['swipedel'], '<span class="m
|
||||||
parser.addCommand('echo', echoCallback, [], '<span class="monospace">(title=string severity=info/warning/error/success [text])</span> – echoes the text to toast message. Useful for pipes debugging.', true, true);
|
parser.addCommand('echo', echoCallback, [], '<span class="monospace">(title=string severity=info/warning/error/success [text])</span> – echoes the text to toast message. Useful for pipes debugging.', true, true);
|
||||||
//parser.addCommand('#', (_, value) => '', [], ' – a comment, does nothing, e.g. <tt>/# the next three commands switch variables a and b</tt>', true, true);
|
//parser.addCommand('#', (_, value) => '', [], ' – a comment, does nothing, e.g. <tt>/# the next three commands switch variables a and b</tt>', true, true);
|
||||||
parser.addCommand('gen', generateCallback, [], '<span class="monospace">(lock=on/off name="System" [prompt])</span> – generates text using the provided prompt and passes it to the next command through the pipe, optionally locking user input while generating and allowing to configure the in-prompt name for instruct mode (default = "System"). "as" argument controls the role of the output prompt: system (default) or char.', true, true);
|
parser.addCommand('gen', generateCallback, [], '<span class="monospace">(lock=on/off name="System" [prompt])</span> – generates text using the provided prompt and passes it to the next command through the pipe, optionally locking user input while generating and allowing to configure the in-prompt name for instruct mode (default = "System"). "as" argument controls the role of the output prompt: system (default) or char.', true, true);
|
||||||
parser.addCommand('genraw', generateRawCallback, [], '<span class="monospace">(lock=on/off instruct=on/off stop=[] as=system/char [prompt])</span> – generates text using the provided prompt and passes it to the next command through the pipe, optionally locking user input while generating. Does not include chat history or character card. Use instruct=off to skip instruct formatting, e.g. <tt>/genraw instruct=off Why is the sky blue?</tt>. Use stop=... with a JSON-serialized array to add one-time custom stop strings, e.g. <tt>/genraw stop=["\\n"] Say hi</tt>. "as" argument controls the role of the output prompt: system (default) or char.', true, true);
|
parser.addCommand('genraw', generateRawCallback, [], '<span class="monospace">(lock=on/off instruct=on/off stop=[] as=system/char system="system prompt" [prompt])</span> – generates text using the provided prompt and passes it to the next command through the pipe, optionally locking user input while generating. Does not include chat history or character card. Use instruct=off to skip instruct formatting, e.g. <tt>/genraw instruct=off Why is the sky blue?</tt>. Use stop=... with a JSON-serialized array to add one-time custom stop strings, e.g. <tt>/genraw stop=["\\n"] Say hi</tt>. "as" argument controls the role of the output prompt: system (default) or char. "system" argument adds an (optional) system prompt at the start.', true, true);
|
||||||
parser.addCommand('addswipe', addSwipeCallback, ['swipeadd'], '<span class="monospace">(text)</span> – adds a swipe to the last chat message.', true, true);
|
parser.addCommand('addswipe', addSwipeCallback, ['swipeadd'], '<span class="monospace">(text)</span> – adds a swipe to the last chat message.', true, true);
|
||||||
parser.addCommand('abort', abortCallback, [], ' – aborts the slash command batch execution', true, true);
|
parser.addCommand('abort', abortCallback, [], ' – aborts the slash command batch execution', true, true);
|
||||||
parser.addCommand('fuzzy', fuzzyCallback, [], 'list=["a","b","c"] threshold=0.4 (text to search) – performs a fuzzy match of each items of list within the text to search. If any item matches then its name is returned. If no item list matches the text to search then no value is returned. The optional threshold (default is 0.4) allows some control over the matching. A low value (min 0.0) means the match is very strict. At 1.0 (max) the match is very loose and probably matches anything. The returned value passes to the next command through the pipe.', true, true); parser.addCommand('pass', (_, arg) => arg, ['return'], '<span class="monospace">(text)</span> – passes the text to the next command through the pipe.', true, true);
|
parser.addCommand('fuzzy', fuzzyCallback, [], 'list=["a","b","c"] threshold=0.4 (text to search) – performs a fuzzy match of each items of list within the text to search. If any item matches then its name is returned. If no item list matches the text to search then no value is returned. The optional threshold (default is 0.4) allows some control over the matching. A low value (min 0.0) means the match is very strict. At 1.0 (max) the match is very loose and probably matches anything. The returned value passes to the next command through the pipe.', true, true); parser.addCommand('pass', (_, arg) => arg, ['return'], '<span class="monospace">(text)</span> – passes the text to the next command through the pipe.', true, true);
|
||||||
|
@ -661,6 +661,7 @@ async function generateRawCallback(args, value) {
|
||||||
const lock = isTrueBoolean(args?.lock);
|
const lock = isTrueBoolean(args?.lock);
|
||||||
const as = args?.as || 'system';
|
const as = args?.as || 'system';
|
||||||
const quietToLoud = as === 'char';
|
const quietToLoud = as === 'char';
|
||||||
|
const systemPrompt = resolveVariable(args?.system) || '';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (lock) {
|
if (lock) {
|
||||||
|
@ -668,7 +669,7 @@ async function generateRawCallback(args, value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
setEphemeralStopStrings(resolveVariable(args?.stop));
|
setEphemeralStopStrings(resolveVariable(args?.stop));
|
||||||
const result = await generateRaw(value, '', isFalseBoolean(args?.instruct), quietToLoud);
|
const result = await generateRaw(value, '', isFalseBoolean(args?.instruct), quietToLoud, systemPrompt);
|
||||||
return result;
|
return result;
|
||||||
} finally {
|
} finally {
|
||||||
if (lock) {
|
if (lock) {
|
||||||
|
|
Loading…
Reference in New Issue