Reasoning edit/parse updates 1. Parse reasoning on message edit 2. Reasoning edit follow 'auto-save' preference

4802e4bed2e5a99c2701238205ad28a49acf6701

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

1 files changed, +33 -6Showing whitespace changes
public/scripts/reasoning.js+33 -6
@@ -1,7 +1,7 @@
11import {
22 moment,
33} from '../lib.js';
44import { chat, closeMessageEditor, event_types, eventSource, main_api, messageFormatting, saveChatConditional, saveChatDebounced, saveSettingsDebounced, substituteParams, updateMessageBlock } from '../script.js';
55import { getRegexedString, regex_placement } from './extensions/regex/engine.js';
66import { getCurrentLocale, t, translate } from './i18n.js';
77import { MacrosParser } from './macros.js';
@@ -755,6 +755,17 @@ function registerReasoningMacros() {
755755}
756756
757757function setReasoningEventHandlers() {
758+ /**
759+ * Updates the reasoning block of a message from a value.
760+ * @param {object} message Message object
761+ * @param {string} value Reasoning value
762+ */
763+ function updateReasoningFromValue(message, value) {
764+ const reasoning = getRegexedString(value, regex_placement.REASONING, { isEdit: true });
765+ message.extra.reasoning = reasoning;
766+ message.extra.reasoning_type = message.extra.reasoning_type ? ReasoningType.Edited : ReasoningType.Manual;
767+ }
768+
758769 $(document).on('click', '.mes_reasoning_details', function (e) {
759770 if (!e.target.closest('.mes_reasoning_actions') && !e.target.closest('.mes_reasoning_header')) {
760771 e.preventDefault();
@@ -835,9 +846,7 @@ function setReasoningEventHandlers() {
835846 }
836847
837848 const textarea = messageBlock.find('.reasoning_edit_textarea');
838- const reasoning = getRegexedString(String(textarea.val()), regex_placement.REASONING, { isEdit: true });
849+ updateReasoningFromValue(message, String(textarea.val()));
839- message.extra.reasoning = reasoning;
840- message.extra.reasoning_type = message.extra.reasoning_type ? ReasoningType.Edited : ReasoningType.Manual;
841850 await saveChatConditional();
842851 updateMessageBlock(messageId, message);
843852 textarea.remove();
@@ -917,6 +926,20 @@ function setReasoningEventHandlers() {
917926 await copyText(reasoning);
918927 toastr.info(t`Copied!`, '', { timeOut: 2000 });
919928 });
929+
930+ $(document).on('input', '.reasoning_edit_textarea', function () {
931+ if (!power_user.auto_save_msg_edits) {
932+ return;
933+ }
934+
935+ const { message } = getMessageFromJquery(this);
936+ if (!message?.extra) {
937+ return;
938+ }
939+
940+ updateReasoningFromValue(message, String($(this).val()));
941+ saveChatDebounced();
942+ });
920943}
921944
922945/**
@@ -973,7 +996,7 @@ function parseReasoningFromString(str, { strict = true } = {}) {
973996}
974997
975998function registerReasoningAppEvents() {
976999 eventSource.makeFirst(event_types.MESSAGE_RECEIVED,const eventHandler = (/** @type {number} */ idx) => {
9771000 if (!power_user.reasoning.auto_parse) {
9781001 return;
9791002 }
@@ -1029,7 +1052,11 @@ function registerReasoningAppEvents() {
10291052 updateMessageBlock(idx, message);
10301053 }
10311054 }
10321055 });
1056+
1057+ for (const event of [event_types.MESSAGE_RECEIVED, event_types.MESSAGE_UPDATED]) {
1058+ eventSource.on(event, eventHandler);
1059+ }
10331060}
10341061
10351062export function initReasoning() {