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>
| @@ -1,6 +1,6 @@ | |||
| 1 | import { Fuse } from '../../../lib.js'; | 1 | import { Fuse } from '../../../lib.js'; |
| 2 | 2 | ||
| 3 | import { characters, eventSource, event_types, generateRaw, getRequestHeaders, main_api, online_status, saveSettingsDebounced, substituteParams, substituteParamsExtended, system_message_types, this_chid } from '../../../script.js'; | 3 | import { characters, eventSource, event_types, generateQuietPrompt, generateRaw, getRequestHeaders, main_api, online_status, saveSettingsDebounced, substituteParams, substituteParamsExtended, system_message_types, this_chid } from '../../../script.js'; |
| 4 | import { dragElement, isMobile } from '../../RossAscends-mods.js'; | 4 | import { dragElement, isMobile } from '../../RossAscends-mods.js'; |
| 5 | import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js'; | 5 | import { getContext, getApiUrl, modules, extension_settings, ModuleWorkerWrapper, doExtrasFetch, renderExtensionTemplateAsync } from '../../extensions.js'; |
| 6 | import { loadMovingUIState, performFuzzySearch, power_user } from '../../power-user.js'; | 6 | import { 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 | */ |
| 911 | async function getLlmPrompt(labels) { | 911 | async 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 WebLLM | 1056 | // Using WebLLM |