Merge pull request #4157 from kingbri1/staging Emotions: Use the full context for main API

eced082571d44998f66e8eea6786d816f30eea1b

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

Signed
3 files changed, +53 -7Ignore whitespace
public/scripts/extensions.js+1 -0
@@ -178,6 +178,7 @@ export const extension_settings = {
178178 llmPrompt: undefined,
179179 allowMultiple: true,
180180 rerollIfSame: false,
181+ promptType: 'raw',
181182 },
182183 connectionManager: {
183184 selectedProfile: '',
public/scripts/extensions/expressions/index.js+38 -6
@@ -1,6 +1,6 @@
11import { Fuse } from '../../../lib.js';
22
33import { characters, eventSource, event_types, generateQuietPrompt, generateRaw, getRequestHeaders, main_api, online_status, saveSettingsDebounced, substituteParams, substituteParamsExtended, system_message_types, this_chid } from '../../../script.js';
44import { dragElement, isMobile } from '../../RossAscends-mods.js';
55import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js';
66import { loadMovingUIState, performFuzzySearch, power_user } from '../../power-user.js';
@@ -86,6 +86,12 @@ const EXPRESSION_API = {
8686 none: 99,
8787};
8888
89+/** @enum {string} */
90+const PROMPT_TYPE = {
91+ raw: 'raw',
92+ full: 'full',
93+};
94+
8995let expressionsList = null;
9096let lastCharacter = undefined;
9197let lastMessage = null;
@@ -909,10 +915,6 @@ function sampleClassifyText(text) {
909915 * @returns {Promise<string>} Prompt for the LLM API.
910916 */
911917async function getLlmPrompt(labels) {
912- if (isJsonSchemaSupported()) {
913- return '';
914- }
915-
916918 const labelsString = labels.map(x => `"${x}"`).join(', ');
917919 const prompt = substituteParamsExtended(String(extension_settings.expressions.llmPrompt), { labels: labelsString });
918920 return prompt;
@@ -1047,7 +1049,21 @@ export async function getExpressionLabel(text, expressionsApi = extension_settin
10471049 const expressionsList = await getExpressionsList({ filterAvailable: filterAvailable });
10481050 const prompt = substituteParamsExtended(customPrompt, { labels: expressionsList }) || await getLlmPrompt(expressionsList);
10491051 eventSource.once(event_types.TEXT_COMPLETION_SETTINGS_READY, onTextGenSettingsReady);
1050- const emotionResponse = await generateRaw(text, main_api, false, false, prompt);
1052+
1053+ let emotionResponse;
1054+ try {
1055+ inApiCall = true;
1056+ switch (extension_settings.expressions.promptType) {
1057+ case PROMPT_TYPE.raw:
1058+ emotionResponse = await generateRaw(text, main_api, false, false, prompt);
1059+ break;
1060+ case PROMPT_TYPE.full:
1061+ emotionResponse = await generateQuietPrompt(prompt, false, false);
1062+ break;
1063+ }
1064+ } finally {
1065+ inApiCall = false;
1066+ }
10511067 return parseLlmResponse(emotionResponse, expressionsList);
10521068 }
10531069 // Using WebLLM
@@ -1702,6 +1718,7 @@ function onExpressionApiChanged() {
17021718 if (tempApi) {
17031719 extension_settings.expressions.api = Number(tempApi);
17041720 $('.expression_llm_prompt_block').toggle([EXPRESSION_API.llm, EXPRESSION_API.webllm].includes(extension_settings.expressions.api));
1721+ $('.expression_prompt_type_block').toggle(extension_settings.expressions.api === EXPRESSION_API.llm);
17051722 expressionsList = null;
17061723 spriteCache = {};
17071724 moduleWorker();
@@ -2102,6 +2119,11 @@ function migrateSettings() {
21022119 extension_settings.expressions.showDefault = false;
21032120 saveSettingsDebounced();
21042121 }
2122+
2123+ if (extension_settings.expressions.promptType === undefined) {
2124+ extension_settings.expressions.promptType = PROMPT_TYPE.raw;
2125+ saveSettingsDebounced();
2126+ }
21052127}
21062128
21072129(async function () {
@@ -2169,6 +2191,16 @@ function migrateSettings() {
21692191 extension_settings.expressions.llmPrompt = DEFAULT_LLM_PROMPT;
21702192 saveSettingsDebounced();
21712193 });
2194+ $('#expression_prompt_raw').on('input', function () {
2195+ extension_settings.expressions.promptType = PROMPT_TYPE.raw;
2196+ saveSettingsDebounced();
2197+ });
2198+ $('#expression_prompt_full').on('input', function () {
2199+ extension_settings.expressions.promptType = PROMPT_TYPE.full;
2200+ saveSettingsDebounced();
2201+ });
2202+ $(`input[name="expression_prompt_type"][value="${extension_settings.expressions.promptType}"]`).prop('checked', true);
2203+ $('.expression_prompt_type_block').toggle(extension_settings.expressions.api === EXPRESSION_API.llm);
21722204
21732205 $('#expression_custom_add').on('click', onClickExpressionAddCustom);
21742206 $('#expression_custom_remove').on('click', onClickExpressionRemoveCustom);
public/scripts/extensions/expressions/settings.html+14 -1
@@ -41,7 +41,20 @@
4141 </div>
4242 </label>
4343 <small data-i18n="Will be used if the API doesn't support JSON schemas or function calling.">Will be used if the API doesn't support JSON schemas or function calling.</small>
4444 <textarea id="expression_llm_prompt" type="text" class="text_pole textarea_compact autoSetHeight" rows="2" placeholder="Use &lcub;&lcub;labels&rcub;&rcub; special macro."></textarea>
45+ </div>
46+ <div class="expression_prompt_type_block flex-container flexFlowColumn">
47+ <div data-i18n="LLM Prompt Strategy" class="title_restorable">
48+ LLM Prompt Strategy
49+ </div>
50+ <label for="expression_prompt_raw" class="checkbox_label">
51+ <input id="expression_prompt_raw" type="radio" name="expression_prompt_type" value="raw">
52+ <span data-i18n="Limited Context">Limited Context</span>
53+ </label>
54+ <label for="expression_prompt_full" class="checkbox_label">
55+ <input id="expression_prompt_full" type="radio" name="expression_prompt_type" value="full">
56+ <span data-i18n="Full Context">Full Context</span>
57+ </label>
4558 </div>
4659 <div class="expression_fallback_block m-b-1 m-t-1">
4760 <label for="expression_fallback" data-i18n="Default / Fallback Expression">Default / Fallback Expression</label>