Null safety for streaming processor

c12a283efcbced3533cf882e6fd57ca4867ace42

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

1 files changed, +23 -8Showing whitespace changes
public/script.js+23 -8
@@ -2800,6 +2800,8 @@ class StreamingProcessor {
28002800 this.messageDom = null;
28012801 this.messageTextDom = null;
28022802 this.messageTimerDom = null;
2803+ this.messageTokenCounterDom = null;
2804+ /** @type {HTMLTextAreaElement} */
28032805 this.sendTextarea = document.querySelector('#send_textarea');
28042806 this.type = type;
28052807 this.force_name2 = force_name2;
@@ -2815,6 +2817,15 @@ class StreamingProcessor {
28152817 this.messageLogprobs = [];
28162818 }
28172819
2820+ #checkDomElements(messageId) {
2821+ if (this.messageDom === null) {
2822+ this.messageDom = document.querySelector(`#chat .mes[mesid="${messageId}"]`);
2823+ this.messageTextDom = this.messageDom?.querySelector('.mes_text');
2824+ this.messageTimerDom = this.messageDom?.querySelector('.mes_timer');
2825+ this.messageTokenCounterDom = this.messageDom?.querySelector('.tokenCounterDisplay');
2826+ }
2827+ }
2828+
28182829 showMessageButtons(messageId) {
28192830 if (messageId == -1) {
28202831 return;
@@ -2843,9 +2854,7 @@ class StreamingProcessor {
28432854 else {
28442855 await saveReply(this.type, text, true);
28452856 messageId = chat.length - 1;
2846- this.messageDom = document.querySelector(`#chat .mes[mesid="${messageId}"]`);
2857+ this.#checkDomElements(messageId);
2847- this.messageTextDom = this.messageDom.querySelector('.mes_text');
2848- this.messageTimerDom = this.messageDom.querySelector('.mes_timer');
28492858 this.showMessageButtons(messageId);
28502859 }
28512860
@@ -2881,9 +2890,9 @@ class StreamingProcessor {
28812890 this.sendTextarea.dispatchEvent(new Event('input', { bubbles: true }));
28822891 }
28832892 else {
28842893 letconst currentTime = new Date();
28852894 // Don't waste time calculating token count for streaming
28862895 letconst currentTokenCount = isFinal && power_user.message_token_count_enabled ? getTokenCount(processedText, 0) : 0;
28872896 const timePassed = formatGenerationTimer(this.timeStarted, currentTime, currentTokenCount);
28882897 chat[messageId]['mes'] = processedText;
28892898 chat[messageId]['gen_started'] = this.timeStarted;
@@ -2895,8 +2904,9 @@ class StreamingProcessor {
28952904 }
28962905
28972906 chat[messageId]['extra']['token_count'] = currentTokenCount;
2898- const tokenCounter = $(`#chat .mes[mesid="${messageId}"] .tokenCounterDisplay`);
2907+ if (this.messageTokenCounterDom instanceof HTMLElement) {
28992908 tokenCounter this.text(messageTokenCounterDom.textContent = `${currentTokenCount}t`);
2909+ }
29002910 }
29012911
29022912 if ((this.type == 'swipe' || this.type === 'continue') && Array.isArray(chat[messageId]['swipes'])) {
@@ -2904,16 +2914,21 @@ class StreamingProcessor {
29042914 chat[messageId]['swipe_info'][chat[messageId]['swipe_id']] = { 'send_date': chat[messageId]['send_date'], 'gen_started': chat[messageId]['gen_started'], 'gen_finished': chat[messageId]['gen_finished'], 'extra': JSON.parse(JSON.stringify(chat[messageId]['extra'])) };
29052915 }
29062916
29072917 letconst formattedText = messageFormatting(
29082918 processedText,
29092919 chat[messageId].name,
29102920 chat[messageId].is_system,
29112921 chat[messageId].is_user,
29122922 messageId,
29132923 );
2924+ this.#checkDomElements(messageId);
2925+ if (this.messageTextDom instanceof HTMLElement) {
29142926 this.messageTextDom.innerHTML = formattedText;
2927+ }
2928+ if (this.messageTimerDom instanceof HTMLElement) {
29152929 this.messageTimerDom.textContent = timePassed.timerValue;
29162930 this.messageTimerDom.title = timePassed.timerTitle;
2931+ }
29172932 this.setFirstSwipe(messageId);
29182933 }
29192934