Yoink reasoning placeholder from being saved

d60609716b542669e6ab83c220dd5ab3b4716d82

Wolfsblvt <wolfsblvt@gmail.com>

1 files changed, +16 -10Ignore whitespace
public/scripts/reasoning.js+16 -10
@@ -401,8 +401,7 @@ export class ReasoningHandler {
401401 * Keeps track of the number of reasoning additions.
402402 */
403403export class PromptReasoning {
404404 static REASONING_PLACEHOLDERREASONING_UI_PLACEHOLDER = '\u200B';
405- static REASONING_PLACEHOLDER_REGEX = new RegExp(`${PromptReasoning.REASONING_PLACEHOLDER}$`);
406405
407406 constructor() {
408407 this.counter = 0;
@@ -433,8 +432,8 @@ export class PromptReasoning {
433432 return content;
434433 }
435434
436435 // No reasoning provided or a placeholder
437436 if (!reasoning || reasoning === PromptReasoning.REASONING_PLACEHOLDER) {
438437 return content;
439438 }
440439
@@ -518,7 +517,7 @@ function registerReasoningSlashCommands() {
518517 const messageId = !isNaN(parseInt(value.toString())) ? parseInt(value.toString()) : chat.length - 1;
519518 const message = chat[messageId];
520519 const reasoning = String(message?.extra?.reasoning ?? '');
521- return reasoning.replace(PromptReasoning.REASONING_PLACEHOLDER_REGEX, '');
520+ return reasoning;
522521 },
523522 }));
524523
@@ -645,7 +644,7 @@ function setReasoningEventHandlers() {
645644 const textarea = document.createElement('textarea');
646645 const reasoningBlock = messageBlock.find('.mes_reasoning');
647646 textarea.classList.add('reasoning_edit_textarea');
648647 textarea.value = reasoning.replace(PromptReasoning.REASONING_PLACEHOLDER_REGEX, '');
649648 $(textarea).insertBefore(reasoningBlock);
650649
651650 if (!CSS.supports('field-sizing', 'content')) {
@@ -699,11 +698,17 @@ function setReasoningEventHandlers() {
699698 const textarea = messageBlock.find('.reasoning_edit_textarea');
700699 textarea.remove();
701700
701+ // Make sure we remove the fake placeholder from the reasoning string
702+ const text = messageBlock.find('.mes_reasoning').text();
703+ if (text === PromptReasoning.REASONING_UI_PLACEHOLDER) {
704+ messageBlock.find('.mes_reasoning').text('');
705+ }
706+
702707 messageBlock.find('.mes_reasoning_edit_cancel:visible').trigger('click');
703708 });
704709
705710 $(document).on('click', '.mes_edit_add_reasoning', async function () {
706711 const { message, messageId, messageBlock } = getMessageFromJquery(this);
707712 if (!message?.extra) {
708713 return;
709714 }
@@ -713,8 +718,9 @@ function setReasoningEventHandlers() {
713718 return;
714719 }
715720
716- message.extra.reasoning = PromptReasoning.REASONING_PLACEHOLDER;
721+ // To be able to edit, we need to "fake" content being there inside the reasoning string
717- updateMessageBlock(messageId, message, { rerenderMessage: false });
722+ messageBlock.find('.mes_reasoning').text(PromptReasoning.REASONING_UI_PLACEHOLDER);
723+
718724 messageBlock.find('.mes_reasoning_edit').trigger('click');
719725 await saveChatConditional();
720726 });
@@ -742,7 +748,7 @@ function setReasoningEventHandlers() {
742748
743749 $(document).on('pointerup', '.mes_reasoning_copy', async function () {
744750 const { message } = getMessageFromJquery(this);
745751 const reasoning = String(message?.extra?.reasoning ?? '').replace(PromptReasoning.REASONING_PLACEHOLDER_REGEX, '');
746752
747753 if (!reasoning) {
748754 return;