Fix continue on forced OR instruct. Display proper itemized prompt
This commit is contained in:
parent
06d5675d6f
commit
88df8501b3
|
@ -93,6 +93,7 @@ import {
|
||||||
openai_messages_count,
|
openai_messages_count,
|
||||||
chat_completion_sources,
|
chat_completion_sources,
|
||||||
getChatCompletionModel,
|
getChatCompletionModel,
|
||||||
|
isOpenRouterWithInstruct,
|
||||||
} from "./scripts/openai.js";
|
} from "./scripts/openai.js";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -811,6 +812,29 @@ export async function saveItemizedPrompts(chatId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replaces the itemized prompt text for a message.
|
||||||
|
* @param {number} mesId Message ID to get itemized prompt for
|
||||||
|
* @param {string} promptText New raw prompt text
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export async function replaceItemizedPromptText(mesId, promptText) {
|
||||||
|
if (!Array.isArray(itemizedPrompts)) {
|
||||||
|
itemizedPrompts = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const itemizedPrompt = itemizedPrompts.find(x => x.mesId === mesId);
|
||||||
|
|
||||||
|
if (!itemizedPrompt) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
itemizedPrompt.rawPrompt = promptText;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Empties the itemized prompts array and caches.
|
||||||
|
*/
|
||||||
export async function clearItemizedPrompts() {
|
export async function clearItemizedPrompts() {
|
||||||
try {
|
try {
|
||||||
await promptStorage.clear();
|
await promptStorage.clear();
|
||||||
|
@ -2893,7 +2917,8 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||||
|
|
||||||
if (isContinue) {
|
if (isContinue) {
|
||||||
// Coping mechanism for OAI spacing
|
// Coping mechanism for OAI spacing
|
||||||
if ((main_api === 'openai') && !cyclePrompt.endsWith(' ')) {
|
const isForceInstruct = isOpenRouterWithInstruct();
|
||||||
|
if (main_api === 'openai' && !isForceInstruct && !cyclePrompt.endsWith(' ')) {
|
||||||
cyclePrompt += ' ';
|
cyclePrompt += ' ';
|
||||||
continue_mag += ' ';
|
continue_mag += ' ';
|
||||||
}
|
}
|
||||||
|
@ -3290,8 +3315,15 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||||
thisPromptBits = additionalPromptStuff;
|
thisPromptBits = additionalPromptStuff;
|
||||||
|
|
||||||
//console.log(thisPromptBits);
|
//console.log(thisPromptBits);
|
||||||
|
const itemizedIndex = itemizedPrompts.findIndex((item) => item.mesId === thisPromptBits['mesId']);
|
||||||
|
|
||||||
|
if (itemizedIndex !== -1) {
|
||||||
|
itemizedPrompts[itemizedIndex] = thisPromptBits;
|
||||||
|
}
|
||||||
|
else {
|
||||||
itemizedPrompts.push(thisPromptBits);
|
itemizedPrompts.push(thisPromptBits);
|
||||||
|
}
|
||||||
|
|
||||||
console.debug(`pushed prompt bits to itemizedPrompts array. Length is now: ${itemizedPrompts.length}`);
|
console.debug(`pushed prompt bits to itemizedPrompts array. Length is now: ${itemizedPrompts.length}`);
|
||||||
|
|
||||||
if (main_api == 'openai') {
|
if (main_api == 'openai') {
|
||||||
|
@ -3510,7 +3542,7 @@ function unblockGeneration() {
|
||||||
$("#send_textarea").removeAttr('disabled');
|
$("#send_textarea").removeAttr('disabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
function getNextMessageId(type) {
|
export function getNextMessageId(type) {
|
||||||
return type == 'swipe' ? Number(count_view_mes - 1) : Number(count_view_mes);
|
return type == 'swipe' ? Number(count_view_mes - 1) : Number(count_view_mes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9044,6 +9076,9 @@ jQuery(async function () {
|
||||||
|
|
||||||
registerDebugFunction('clearPrompts', 'Delete itemized prompts', 'Deletes all itemized prompts from the local storage.', async () => {
|
registerDebugFunction('clearPrompts', 'Delete itemized prompts', 'Deletes all itemized prompts from the local storage.', async () => {
|
||||||
await clearItemizedPrompts();
|
await clearItemizedPrompts();
|
||||||
|
toastr.info('Itemized prompts deleted.');
|
||||||
|
if (getCurrentChatId()) {
|
||||||
await reloadCurrentChat();
|
await reloadCurrentChat();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -25,6 +25,9 @@ import {
|
||||||
event_types,
|
event_types,
|
||||||
substituteParams,
|
substituteParams,
|
||||||
MAX_INJECTION_DEPTH,
|
MAX_INJECTION_DEPTH,
|
||||||
|
getStoppingStrings,
|
||||||
|
getNextMessageId,
|
||||||
|
replaceItemizedPromptText,
|
||||||
} from "../script.js";
|
} from "../script.js";
|
||||||
import { groups, selected_group } from "./group-chats.js";
|
import { groups, selected_group } from "./group-chats.js";
|
||||||
|
|
||||||
|
@ -367,14 +370,19 @@ function convertChatCompletionToInstruct(messages, type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const isImpersonate = type === 'impersonate';
|
const isImpersonate = type === 'impersonate';
|
||||||
|
const isContinue = type === 'continue';
|
||||||
const promptName = isImpersonate ? name1 : name2;
|
const promptName = isImpersonate ? name1 : name2;
|
||||||
const promptLine = formatInstructModePrompt(promptName, isImpersonate, '', name1, name2).trimStart();
|
const promptLine = isContinue ? '' : formatInstructModePrompt(promptName, isImpersonate, '', name1, name2).trimStart();
|
||||||
|
|
||||||
const prompt = [systemPromptText, examplesText, chatMessagesText, promptLine]
|
let prompt = [systemPromptText, examplesText, chatMessagesText, promptLine]
|
||||||
.filter(x => x)
|
.filter(x => x)
|
||||||
.map(x => x.endsWith('\n') ? x : `${x}\n`)
|
.map(x => x.endsWith('\n') ? x : `${x}\n`)
|
||||||
.join('');
|
.join('');
|
||||||
|
|
||||||
|
if (isContinue) {
|
||||||
|
prompt = prompt.replace(/\n$/, '');
|
||||||
|
}
|
||||||
|
|
||||||
return prompt;
|
return prompt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -578,6 +586,10 @@ function populationInjectionPrompts(prompts) {
|
||||||
openai_msgs = openai_msgs.reverse();
|
openai_msgs = openai_msgs.reverse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isOpenRouterWithInstruct() {
|
||||||
|
return oai_settings.chat_completion_source === chat_completion_sources.OPENROUTER && oai_settings.openrouter_force_instruct && power_user.instruct.enabled;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Populates the chat history of the conversation.
|
* Populates the chat history of the conversation.
|
||||||
*
|
*
|
||||||
|
@ -604,7 +616,8 @@ function populateChatHistory(prompts, chatCompletion, type = null, cyclePrompt =
|
||||||
|
|
||||||
// Reserve budget for continue nudge
|
// Reserve budget for continue nudge
|
||||||
let continueMessage = null;
|
let continueMessage = null;
|
||||||
if (type === 'continue' && cyclePrompt) {
|
const instruct = isOpenRouterWithInstruct();
|
||||||
|
if (type === 'continue' && cyclePrompt && !instruct) {
|
||||||
const continuePrompt = new Prompt({
|
const continuePrompt = new Prompt({
|
||||||
identifier: 'continueNudge',
|
identifier: 'continueNudge',
|
||||||
role: 'system',
|
role: 'system',
|
||||||
|
@ -1249,7 +1262,7 @@ function saveModelList(data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendAltScaleRequest(openai_msgs_tosend, logit_bias, signal) {
|
async function sendAltScaleRequest(openai_msgs_tosend, logit_bias, signal, type) {
|
||||||
const generate_url = '/generate_altscale';
|
const generate_url = '/generate_altscale';
|
||||||
|
|
||||||
let firstSysMsgs = []
|
let firstSysMsgs = []
|
||||||
|
@ -1269,6 +1282,8 @@ async function sendAltScaleRequest(openai_msgs_tosend, logit_bias, signal) {
|
||||||
}, "");
|
}, "");
|
||||||
|
|
||||||
openai_msgs_tosend = substituteParams(joinedSubsequentMsgs);
|
openai_msgs_tosend = substituteParams(joinedSubsequentMsgs);
|
||||||
|
const messageId = getNextMessageId(type);
|
||||||
|
replaceItemizedPromptText(messageId, openai_msgs_tosend);
|
||||||
|
|
||||||
const generate_data = {
|
const generate_data = {
|
||||||
sysprompt: joinedSysMsgs,
|
sysprompt: joinedSysMsgs,
|
||||||
|
@ -1304,6 +1319,7 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
|
||||||
openai_msgs_tosend = openai_msgs_tosend.filter(msg => msg && typeof msg === 'object');
|
openai_msgs_tosend = openai_msgs_tosend.filter(msg => msg && typeof msg === 'object');
|
||||||
|
|
||||||
let logit_bias = {};
|
let logit_bias = {};
|
||||||
|
const messageId = getNextMessageId(type);
|
||||||
const isClaude = oai_settings.chat_completion_source == chat_completion_sources.CLAUDE;
|
const isClaude = oai_settings.chat_completion_source == chat_completion_sources.CLAUDE;
|
||||||
const isOpenRouter = oai_settings.chat_completion_source == chat_completion_sources.OPENROUTER;
|
const isOpenRouter = oai_settings.chat_completion_source == chat_completion_sources.OPENROUTER;
|
||||||
const isScale = oai_settings.chat_completion_source == chat_completion_sources.SCALE;
|
const isScale = oai_settings.chat_completion_source == chat_completion_sources.SCALE;
|
||||||
|
@ -1317,6 +1333,7 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
|
||||||
|
|
||||||
if (isTextCompletion && isOpenRouter) {
|
if (isTextCompletion && isOpenRouter) {
|
||||||
openai_msgs_tosend = convertChatCompletionToInstruct(openai_msgs_tosend, type);
|
openai_msgs_tosend = convertChatCompletionToInstruct(openai_msgs_tosend, type);
|
||||||
|
replaceItemizedPromptText(messageId, openai_msgs_tosend);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isAI21 || isPalm) {
|
if (isAI21 || isPalm) {
|
||||||
|
@ -1325,6 +1342,7 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
|
||||||
return acc + (prefix ? (selected_group ? "\n" : prefix + " ") : "") + obj.content + "\n";
|
return acc + (prefix ? (selected_group ? "\n" : prefix + " ") : "") + obj.content + "\n";
|
||||||
}, "");
|
}, "");
|
||||||
openai_msgs_tosend = substituteParams(joinedMsgs) + (isImpersonate ? `${name1}:` : `${name2}:`);
|
openai_msgs_tosend = substituteParams(joinedMsgs) + (isImpersonate ? `${name1}:` : `${name2}:`);
|
||||||
|
replaceItemizedPromptText(messageId, openai_msgs_tosend);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're using the window.ai extension, use that instead
|
// If we're using the window.ai extension, use that instead
|
||||||
|
@ -1343,7 +1361,7 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isScale && oai_settings.use_alt_scale) {
|
if (isScale && oai_settings.use_alt_scale) {
|
||||||
return sendAltScaleRequest(openai_msgs_tosend, logit_bias, signal)
|
return sendAltScaleRequest(openai_msgs_tosend, logit_bias, signal, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
const model = getChatCompletionModel();
|
const model = getChatCompletionModel();
|
||||||
|
@ -1382,6 +1400,10 @@ async function sendOpenAIRequest(type, openai_msgs_tosend, signal) {
|
||||||
generate_data['use_openrouter'] = true;
|
generate_data['use_openrouter'] = true;
|
||||||
generate_data['top_k'] = Number(oai_settings.top_k_openai);
|
generate_data['top_k'] = Number(oai_settings.top_k_openai);
|
||||||
generate_data['use_fallback'] = oai_settings.openrouter_use_fallback;
|
generate_data['use_fallback'] = oai_settings.openrouter_use_fallback;
|
||||||
|
|
||||||
|
if (isTextCompletion) {
|
||||||
|
generate_data['stop'] = getStoppingStrings(isImpersonate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isScale) {
|
if (isScale) {
|
||||||
|
|
Loading…
Reference in New Issue