Emotions: Use the full context for main API To prevent prompt reprocessing per turn, use the full context when prompting with the main API. Doing so keeps the preserved prefix while adding an extra sentence rather than providing two different prompts for each turn. In addition, JSON schemas might need a prompt to coerce a proper schema return from the model. Signed-off-by: kingbri <8082010+kingbri1@users.noreply.github.com>

e43e771cc534092e04edf30289066f9fef138147

kingbri <8082010+kingbri1@users.noreply.github.com>

1 files changed, +9 -6Ignore whitespace
public/scripts/extensions/expressions/index.js+9 -6
@@ -1,6 +1,6 @@
1import { Fuse } from '../../../lib.js';1import { Fuse } from '../../../lib.js';
22
3import { characters, eventSource, event_types, generateRaw, getRequestHeaders, main_api, online_status, saveSettingsDebounced, substituteParams, substituteParamsExtended, system_message_types, this_chid } from '../../../script.js';3import { characters, eventSource, event_types, generateQuietPrompt, generateRaw, getRequestHeaders, main_api, online_status, saveSettingsDebounced, substituteParams, substituteParamsExtended, system_message_types, this_chid } from '../../../script.js';
4import { dragElement, isMobile } from '../../RossAscends-mods.js';4import { dragElement, isMobile } from '../../RossAscends-mods.js';
5import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';5import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';
6import { loadMovingUIState, performFuzzySearch, power_user } from '../../power-user.js';6import { loadMovingUIState, performFuzzySearch, power_user } from '../../power-user.js';
@@ -909,10 +909,6 @@ function sampleClassifyText(text) {
909 * @returns {Promise<string>} Prompt for the LLM API.909 * @returns {Promise<string>} Prompt for the LLM API.
910 */910 */
911async function getLlmPrompt(labels) {911async function getLlmPrompt(labels) {
912 if (isJsonSchemaSupported()) {
913 return '';
914 }
915
916 const labelsString = labels.map(x => `"${x}"`).join(', ');912 const labelsString = labels.map(x => `"${x}"`).join(', ');
917 const prompt = substituteParamsExtended(String(extension_settings.expressions.llmPrompt), { labels: labelsString });913 const prompt = substituteParamsExtended(String(extension_settings.expressions.llmPrompt), { labels: labelsString });
918 return prompt;914 return prompt;
@@ -1047,7 +1043,14 @@ export async function getExpressionLabel(text, expressionsApi = extension_settin
1047 const expressionsList = await getExpressionsList({ filterAvailable: filterAvailable });1043 const expressionsList = await getExpressionsList({ filterAvailable: filterAvailable });
1048 const prompt = substituteParamsExtended(customPrompt, { labels: expressionsList }) || await getLlmPrompt(expressionsList);1044 const prompt = substituteParamsExtended(customPrompt, { labels: expressionsList }) || await getLlmPrompt(expressionsList);
1049 eventSource.once(event_types.TEXT_COMPLETION_SETTINGS_READY, onTextGenSettingsReady);1045 eventSource.once(event_types.TEXT_COMPLETION_SETTINGS_READY, onTextGenSettingsReady);
1050 const emotionResponse = await generateRaw(text, main_api, false, false, prompt);1046
1047 let emotionResponse;
1048 try {
1049 inApiCall = true;
1050 emotionResponse = await generateQuietPrompt(prompt, false, false);
1051 } finally {
1052 inApiCall = false;
1053 }
1051 return parseLlmResponse(emotionResponse, expressionsList);1054 return parseLlmResponse(emotionResponse, expressionsList);
1052 }1055 }
1053 // Using WebLLM1056 // Using WebLLM