Null safety for streaming processor
| @@ -2800,6 +2800,8 @@ class StreamingProcessor { | ||
| 2800 | 2800 | this.messageDom = null; |
| 2801 | 2801 | this.messageTextDom = null; |
| 2802 | 2802 | this.messageTimerDom = null; |
| 2803 | + this.messageTokenCounterDom = null; | |
| 2804 | + /** @type {HTMLTextAreaElement} */ | |
| 2803 | 2805 | this.sendTextarea = document.querySelector('#send_textarea'); |
| 2804 | 2806 | this.type = type; |
| 2805 | 2807 | this.force_name2 = force_name2; |
| @@ -2815,6 +2817,15 @@ class StreamingProcessor { | ||
| 2815 | 2817 | this.messageLogprobs = []; |
| 2816 | 2818 | } |
| 2817 | 2819 | |
| 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 | + | |
| 2818 | 2829 | showMessageButtons(messageId) { |
| 2819 | 2830 | if (messageId == -1) { |
| 2820 | 2831 | return; |
| @@ -2843,9 +2854,7 @@ class StreamingProcessor { | ||
| 2843 | 2854 | else { |
| 2844 | 2855 | await saveReply(this.type, text, true); |
| 2845 | 2856 | 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'); | |
| 2849 | 2858 | this.showMessageButtons(messageId); |
| 2850 | 2859 | } |
| 2851 | 2860 | |
| @@ -2881,9 +2890,9 @@ class StreamingProcessor { | ||
| 2881 | 2890 | this.sendTextarea.dispatchEvent(new Event('input', { bubbles: true })); |
| 2882 | 2891 | } |
| 2883 | 2892 | else { |
| 2884 | 2893 | letconst currentTime = new Date(); |
| 2885 | 2894 | // Don't waste time calculating token count for streaming |
| 2886 | 2895 | letconst currentTokenCount = isFinal && power_user.message_token_count_enabled ? getTokenCount(processedText, 0) : 0; |
| 2887 | 2896 | const timePassed = formatGenerationTimer(this.timeStarted, currentTime, currentTokenCount); |
| 2888 | 2897 | chat[messageId]['mes'] = processedText; |
| 2889 | 2898 | chat[messageId]['gen_started'] = this.timeStarted; |
| @@ -2895,8 +2904,9 @@ class StreamingProcessor { | ||
| 2895 | 2904 | } |
| 2896 | 2905 | |
| 2897 | 2906 | chat[messageId]['extra']['token_count'] = currentTokenCount; |
| 2898 | - const tokenCounter = $(`#chat .mes[mesid="${messageId}"] .tokenCounterDisplay`); | |
| 2907 | + if (this.messageTokenCounterDom instanceof HTMLElement) { | |
| 2899 | 2908 | tokenCounter this.text(messageTokenCounterDom.textContent = `${currentTokenCount}t`); |
| 2909 | + } | |
| 2900 | 2910 | } |
| 2901 | 2911 | |
| 2902 | 2912 | if ((this.type == 'swipe' || this.type === 'continue') && Array.isArray(chat[messageId]['swipes'])) { |
| @@ -2904,16 +2914,21 @@ class StreamingProcessor { | ||
| 2904 | 2914 | 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'])) }; |
| 2905 | 2915 | } |
| 2906 | 2916 | |
| 2907 | 2917 | letconst formattedText = messageFormatting( |
| 2908 | 2918 | processedText, |
| 2909 | 2919 | chat[messageId].name, |
| 2910 | 2920 | chat[messageId].is_system, |
| 2911 | 2921 | chat[messageId].is_user, |
| 2912 | 2922 | messageId, |
| 2913 | 2923 | ); |
| 2924 | + this.#checkDomElements(messageId); | |
| 2925 | + if (this.messageTextDom instanceof HTMLElement) { | |
| 2914 | 2926 | this.messageTextDom.innerHTML = formattedText; |
| 2927 | + } | |
| 2928 | + if (this.messageTimerDom instanceof HTMLElement) { | |
| 2915 | 2929 | this.messageTimerDom.textContent = timePassed.timerValue; |
| 2916 | 2930 | this.messageTimerDom.title = timePassed.timerTitle; |
| 2931 | + } | |
| 2917 | 2932 | this.setFirstSwipe(messageId); |
| 2918 | 2933 | } |
| 2919 | 2934 | |