Add quiet flags to /api and /summarize Closes #2661

5288d814244e86e83376cb4c9facb2b22a423cd3

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

2 files changed, +37 -11Ignore whitespace
public/script.js+17 -5
@@ -242,7 +242,7 @@ import { DragAndDropHandler } from './scripts/dragdrop.js';
242import { INTERACTABLE_CONTROL_CLASS, initKeyboard } from './scripts/keyboard.js';242import { INTERACTABLE_CONTROL_CLASS, initKeyboard } from './scripts/keyboard.js';
243import { initDynamicStyles } from './scripts/dynamic-styles.js';243import { initDynamicStyles } from './scripts/dynamic-styles.js';
244import { SlashCommandEnumValue, enumTypes } from './scripts/slash-commands/SlashCommandEnumValue.js';244import { SlashCommandEnumValue, enumTypes } from './scripts/slash-commands/SlashCommandEnumValue.js';
245import { enumIcons } from './scripts/slash-commands/SlashCommandCommonEnumsProvider.js';245import { commonEnumProviders, enumIcons } from './scripts/slash-commands/SlashCommandCommonEnumsProvider.js';
246246
247//exporting functions and vars for mods247//exporting functions and vars for mods
248export {248export {
@@ -8465,7 +8465,7 @@ async function disableInstructCallback() {
8465/**8465/**
8466 * @param {string} text API name8466 * @param {string} text API name
8467 */8467 */
8468async function connectAPISlash(_, text) {8468async function connectAPISlash(args, text) {
8469 if (!text.trim()) {8469 if (!text.trim()) {
8470 for (const [key, config] of Object.entries(CONNECT_API_MAP)) {8470 for (const [key, config] of Object.entries(CONNECT_API_MAP)) {
8471 if (config.selected !== main_api) continue;8471 if (config.selected !== main_api) continue;
@@ -8493,7 +8493,7 @@ async function connectAPISlash(_, text) {
8493 const apiConfig = CONNECT_API_MAP[text.toLowerCase()];8493 const apiConfig = CONNECT_API_MAP[text.toLowerCase()];
8494 if (!apiConfig) {8494 if (!apiConfig) {
8495 toastr.error(`Error: ${text} is not a valid API`);8495 toastr.error(`Error: ${text} is not a valid API`);
8496 return;8496 return '';
8497 }8497 }
84988498
8499 $(`#main_api option[value='${apiConfig.selected || text}']`).prop('selected', true);8499 $(`#main_api option[value='${apiConfig.selected || text}']`).prop('selected', true);
@@ -8513,14 +8513,17 @@ async function connectAPISlash(_, text) {
8513 $(apiConfig.button).trigger('click');8513 $(apiConfig.button).trigger('click');
8514 }8514 }
85158515
8516 toastr.info(`API set to ${text}, trying to connect..`);8516 const quiet = isTrueBoolean(args?.quiet);
8517 quiet ? jQuery() : toastr.info(`API set to ${text}, trying to connect..`);
85178518
8518 try {8519 try {
8519 await waitUntilCondition(() => online_status !== 'no_connection', 10000, 100);8520 await waitUntilCondition(() => online_status !== 'no_connection', 10000, 100);
8520 console.log('Connection successful');8521 console.log('Connection successful');
8521 } catch {8522 } catch {
8522 console.log('Could not connect after 5 seconds, skipping.');8523 console.log('Could not connect after 10 seconds, skipping.');
8523 }8524 }
8525
8526 return '';
8524}8527}
85258528
8526/**8529/**
@@ -8979,6 +8982,15 @@ jQuery(async function () {
8979 name: 'api',8982 name: 'api',
8980 callback: connectAPISlash,8983 callback: connectAPISlash,
8981 returns: 'the current API',8984 returns: 'the current API',
8985 namedArgumentList: [
8986 SlashCommandNamedArgument.fromProps({
8987 name: 'quiet',
8988 description: 'Suppress the toast message on connection',
8989 typeList: [ARGUMENT_TYPE.BOOLEAN],
8990 defaultValue: 'false',
8991 enumList: commonEnumProviders.boolean('trueFalse')(),
8992 }),
8993 ],
8982 unnamedArgumentList: [8994 unnamedArgumentList: [
8983 SlashCommandArgument.fromProps({8995 SlashCommandArgument.fromProps({
8984 description: 'API to connect to',8996 description: 'API to connect to',
public/scripts/extensions/memory/index.js+20 -6
@@ -1,4 +1,4 @@
1import { getStringHash, debounce, waitUntilCondition, extractAllWords } from '../../utils.js';1import { getStringHash, debounce, waitUntilCondition, extractAllWords, isTrueBoolean } from '../../utils.js';
2import { getContext, getApiUrl, extension_settings, doExtrasFetch, modules, renderExtensionTemplateAsync } from '../../extensions.js';2import { getContext, getApiUrl, extension_settings, doExtrasFetch, modules, renderExtensionTemplateAsync } from '../../extensions.js';
3import {3import {
4 activateSendButtons,4 activateSendButtons,
@@ -26,6 +26,7 @@ import { SlashCommand } from '../../slash-commands/SlashCommand.js';
26import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';26import { ARGUMENT_TYPE, SlashCommandArgument, SlashCommandNamedArgument } from '../../slash-commands/SlashCommandArgument.js';
27import { MacrosParser } from '../../macros.js';27import { MacrosParser } from '../../macros.js';
28import { countWebLlmTokens, generateWebLlmChatPrompt, getWebLlmContextSize, isWebLlmSupported } from '../shared.js';28import { countWebLlmTokens, generateWebLlmChatPrompt, getWebLlmContextSize, isWebLlmSupported } from '../shared.js';
29import { commonEnumProviders } from '../../slash-commands/SlashCommandCommonEnumsProvider.js';
29export { MODULE_NAME };30export { MODULE_NAME };
3031
31const MODULE_NAME = '1_memory';32const MODULE_NAME = '1_memory';
@@ -456,7 +457,12 @@ async function onChatEvent() {
456 }457 }
457}458}
458459
459async function forceSummarizeChat() {460/**
461 * Forces a summary generation for the current chat.
462 * @param {boolean} quiet If an informational toast should be displayed
463 * @returns {Promise<string>} Summarized text
464 */
465async function forceSummarizeChat(quiet) {
460 if (extension_settings.memory.source === summary_sources.extras) {466 if (extension_settings.memory.source === summary_sources.extras) {
461 toastr.warning('Force summarization is not supported for Extras API');467 toastr.warning('Force summarization is not supported for Extras API');
462 return;468 return;
@@ -471,7 +477,7 @@ async function forceSummarizeChat() {
471 return '';477 return '';
472 }478 }
473479
474 const toast = toastr.info('Summarizing chat...', 'Please wait', { timeOut: 0, extendedTimeOut: 0 });480 const toast = quiet ? jQuery() : toastr.info('Summarizing chat...', 'Please wait', { timeOut: 0, extendedTimeOut: 0 });
475 const value = extension_settings.memory.source === summary_sources.main481 const value = extension_settings.memory.source === summary_sources.main
476 ? await summarizeChatMain(context, true, skipWIAN)482 ? await summarizeChatMain(context, true, skipWIAN)
477 : await summarizeChatWebLLM(context, true);483 : await summarizeChatWebLLM(context, true);
@@ -494,9 +500,10 @@ async function forceSummarizeChat() {
494async function summarizeCallback(args, text) {500async function summarizeCallback(args, text) {
495 text = text.trim();501 text = text.trim();
496502
497 // Using forceSummarizeChat to summarize the current chat503 // Summarize the current chat if no text provided
498 if (!text) {504 if (!text) {
499 return await forceSummarizeChat();505 const quiet = isTrueBoolean(args.quiet);
506 return await forceSummarizeChat(quiet);
500 }507 }
501508
502 const source = args.source || extension_settings.memory.source;509 const source = args.source || extension_settings.memory.source;
@@ -1005,7 +1012,7 @@ function setupListeners() {
1005 $('#memory_prompt_words').off('click').on('input', onMemoryPromptWordsInput);1012 $('#memory_prompt_words').off('click').on('input', onMemoryPromptWordsInput);
1006 $('#memory_prompt_interval').off('click').on('input', onMemoryPromptIntervalInput);1013 $('#memory_prompt_interval').off('click').on('input', onMemoryPromptIntervalInput);
1007 $('#memory_prompt').off('click').on('input', onMemoryPromptInput);1014 $('#memory_prompt').off('click').on('input', onMemoryPromptInput);
1008 $('#memory_force_summarize').off('click').on('click', forceSummarizeChat);1015 $('#memory_force_summarize').off('click').on('click', () => forceSummarizeChat(false));
1009 $('#memory_template').off('click').on('input', onMemoryTemplateInput);1016 $('#memory_template').off('click').on('input', onMemoryTemplateInput);
1010 $('#memory_depth').off('click').on('input', onMemoryDepthInput);1017 $('#memory_depth').off('click').on('input', onMemoryDepthInput);
1011 $('#memory_role').off('click').on('input', onMemoryRoleInput);1018 $('#memory_role').off('click').on('input', onMemoryRoleInput);
@@ -1055,6 +1062,13 @@ jQuery(async function () {
1055 typeList: [ARGUMENT_TYPE.STRING],1062 typeList: [ARGUMENT_TYPE.STRING],
1056 defaultValue: '',1063 defaultValue: '',
1057 }),1064 }),
1065 SlashCommandNamedArgument.fromProps({
1066 name: 'quiet',
1067 description: 'suppress the toast message when summarizing the chat',
1068 typeList: [ARGUMENT_TYPE.BOOLEAN],
1069 defaultValue: 'false',
1070 enumList: commonEnumProviders.boolean('trueFalse')(),
1071 }),
1058 ],1072 ],
1059 unnamedArgumentList: [1073 unnamedArgumentList: [
1060 new SlashCommandArgument('text to summarize', [ARGUMENT_TYPE.STRING], false, false, ''),1074 new SlashCommandArgument('text to summarize', [ARGUMENT_TYPE.STRING], false, false, ''),