Fix continue on forced OR instruct. Display proper itemized prompt

This commit is contained in:
Cohee 2023-11-05 02:20:15 +02:00
parent 06d5675d6f
commit 88df8501b3
2 changed files with 66 additions and 9 deletions

View File

@ -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();
}
}); });
}); });

View File

@ -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) {