diff --git a/public/script.js b/public/script.js index 7f854a6df..897211388 100644 --- a/public/script.js +++ b/public/script.js @@ -3373,8 +3373,8 @@ class StreamingProcessor { } if (this.type !== 'impersonate') { - await eventSource.emit(event_types.MESSAGE_RECEIVED, this.messageId); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, this.messageId); + await eventSource.emit(event_types.MESSAGE_RECEIVED, this.messageId, this.type); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, this.messageId, this.type); } else { await eventSource.emit(event_types.IMPERSONATE_READY, text); } @@ -3403,8 +3403,8 @@ class StreamingProcessor { const noEmitTypes = ['swipe', 'impersonate', 'continue']; if (!noEmitTypes.includes(this.type)) { - eventSource.emit(event_types.MESSAGE_RECEIVED, this.messageId); - eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, this.messageId); + eventSource.emit(event_types.MESSAGE_RECEIVED, this.messageId, this.type); + eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, this.messageId, this.type); } } @@ -6015,9 +6015,9 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes, chat[chat.length - 1]['extra']['token_count'] = await getTokenCountAsync(tokenCountText, 0); } const chat_id = (chat.length - 1); - await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id); + await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id, type); addOneMessage(chat[chat_id], { type: 'swipe' }); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id, type); } else { chat[chat.length - 1]['mes'] = getMessage; } @@ -6038,9 +6038,9 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes, chat[chat.length - 1]['extra']['token_count'] = await getTokenCountAsync(tokenCountText, 0); } const chat_id = (chat.length - 1); - await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id); + await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id, type); addOneMessage(chat[chat_id], { type: 'swipe' }); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id, type); } else if (type === 'appendFinal') { oldMessage = chat[chat.length - 1]['mes']; console.debug('Trying to appendFinal.'); @@ -6058,9 +6058,9 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes, chat[chat.length - 1]['extra']['token_count'] = await getTokenCountAsync(tokenCountText, 0); } const chat_id = (chat.length - 1); - await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id); + await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id, type); addOneMessage(chat[chat_id], { type: 'swipe' }); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id, type); } else { console.debug('entering chat update routine for non-swipe post'); @@ -6100,9 +6100,9 @@ export async function saveReply(type, getMessage, fromStreaming, title, swipes, saveImageToMessage(img, chat[chat.length - 1]); const chat_id = (chat.length - 1); - !fromStreaming && await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id); + !fromStreaming && await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id, type); addOneMessage(chat[chat_id]); - !fromStreaming && await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id); + !fromStreaming && await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id, type); } const item = chat[chat.length - 1]; @@ -6850,8 +6850,8 @@ async function getChatResult() { if (chat.length === 1) { const chat_id = (chat.length - 1); - await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id); + await eventSource.emit(event_types.MESSAGE_RECEIVED, chat_id, 'first_message'); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, chat_id, 'first_message'); } } @@ -8729,10 +8729,10 @@ async function createOrEditCharacter(e) { if (shouldRegenerateMessage) { chat.splice(0, chat.length, message); const messageId = (chat.length - 1); - await eventSource.emit(event_types.MESSAGE_RECEIVED, messageId); + await eventSource.emit(event_types.MESSAGE_RECEIVED, messageId, 'first_message'); await clearChat(); await printMessages(); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, messageId); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, messageId, 'first_message'); await saveChatConditional(); } } catch (error) { diff --git a/public/scripts/extensions/stable-diffusion/index.js b/public/scripts/extensions/stable-diffusion/index.js index 62592b6e4..bcf828651 100644 --- a/public/scripts/extensions/stable-diffusion/index.js +++ b/public/scripts/extensions/stable-diffusion/index.js @@ -3739,9 +3739,9 @@ async function sendMessage(prompt, image, generationType, additionalNegativePref }; context.chat.push(message); const messageId = context.chat.length - 1; - await eventSource.emit(event_types.MESSAGE_RECEIVED, messageId); + await eventSource.emit(event_types.MESSAGE_RECEIVED, messageId, 'stable-diffusion'); context.addOneMessage(message); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, messageId); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, messageId, 'stable-diffusion'); await context.saveChat(); } diff --git a/public/scripts/group-chats.js b/public/scripts/group-chats.js index 691c0b7d1..b4c7199cf 100644 --- a/public/scripts/group-chats.js +++ b/public/scripts/group-chats.js @@ -246,9 +246,9 @@ export async function getGroupChat(groupId, reload = false) { } chat.push(mes); - await eventSource.emit(event_types.MESSAGE_RECEIVED, (chat.length - 1)); + await eventSource.emit(event_types.MESSAGE_RECEIVED, (chat.length - 1), 'group_first_message'); addOneMessage(mes); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, (chat.length - 1)); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, (chat.length - 1), 'group_first_message'); } } await saveGroupChat(groupId, false); diff --git a/public/scripts/slash-commands.js b/public/scripts/slash-commands.js index 1d42e8071..d7beaba81 100644 --- a/public/scripts/slash-commands.js +++ b/public/scripts/slash-commands.js @@ -3628,14 +3628,14 @@ export async function sendMessageAs(args, text) { if (!isNaN(insertAt) && insertAt >= 0 && insertAt <= chat.length) { chat.splice(insertAt, 0, message); await saveChatConditional(); - await eventSource.emit(event_types.MESSAGE_RECEIVED, insertAt); + await eventSource.emit(event_types.MESSAGE_RECEIVED, insertAt, 'command'); await reloadCurrentChat(); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, insertAt); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, insertAt, 'command'); } else { chat.push(message); - await eventSource.emit(event_types.MESSAGE_RECEIVED, (chat.length - 1)); + await eventSource.emit(event_types.MESSAGE_RECEIVED, (chat.length - 1), 'command'); addOneMessage(message); - await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, (chat.length - 1)); + await eventSource.emit(event_types.CHARACTER_MESSAGE_RENDERED, (chat.length - 1), 'command'); await saveChatConditional(); } diff --git a/public/scripts/st-context.js b/public/scripts/st-context.js index 27eaf77af..63d5217b5 100644 --- a/public/scripts/st-context.js +++ b/public/scripts/st-context.js @@ -48,6 +48,7 @@ import { printMessages, clearChat, unshallowCharacter, + deleteLastMessage, } from '../script.js'; import { extension_settings, @@ -106,6 +107,7 @@ export function getContext() { eventSource, eventTypes: event_types, addOneMessage, + deleteLastMessage, generate: Generate, sendStreamingRequest, sendGenerationRequest, @@ -147,6 +149,9 @@ export function getContext() { unregisterFunctionTool: ToolManager.unregisterFunctionTool.bind(ToolManager), isToolCallingSupported: ToolManager.isToolCallingSupported.bind(ToolManager), canPerformToolCalls: ToolManager.canPerformToolCalls.bind(ToolManager), + registerFunctionToolsOpenAI: ToolManager.registerFunctionToolsOpenAI.bind(ToolManager), + invokeFunctionTools: ToolManager.invokeFunctionTools.bind(ToolManager), + saveFunctionToolInvocations: ToolManager.saveFunctionToolInvocations.bind(ToolManager), registerDebugFunction, /** @deprecated Use renderExtensionTemplateAsync instead. */ renderExtensionTemplate,