DEV: cleanup diff streaming (#1370)

This simplifies some of the internal logic and ensures it is a
bit more robust
This commit is contained in:
Sam 2025-05-27 18:12:02 +10:00 committed by GitHub
parent e264572597
commit 6781ecd02e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 16 deletions

View File

@ -18,6 +18,8 @@ import DiffStreamer from "../../lib/diff-streamer";
import SmoothStreamer from "../../lib/smooth-streamer";
import AiIndicatorWave from "../ai-indicator-wave";
const CHANNEL = "/discourse-ai/ai-helper/stream_composer_suggestion";
export default class ModalDiffModal extends Component {
@service currentUser;
@service messageBus;
@ -49,12 +51,9 @@ export default class ModalDiffModal extends Component {
}
get isStreaming() {
// diffStreamer stops "streaming" when it is finished with a chunk
return (
this.diffStreamer.isStreaming ||
!this.diffStreamer.isDone ||
this.smoothStreamer.isStreaming
);
// diffStreamer stops Streaming when it is finished with a chunk, looking at isDone is safe
// it starts off not done
return !this.diffStreamer.isDone || this.smoothStreamer.isStreaming;
}
get primaryBtnLabel() {
@ -69,25 +68,23 @@ export default class ModalDiffModal extends Component {
@bind
subscribe() {
const channel = "/discourse-ai/ai-helper/stream_composer_suggestion";
this.messageBus.subscribe(channel, this.updateResult);
this.messageBus.subscribe(CHANNEL, this.updateResult);
}
@bind
unsubscribe() {
const channel = "/discourse-ai/ai-helper/stream_composer_suggestion";
this.messageBus.unsubscribe(channel, this.updateResult);
cleanup() {
// stop all callbacks so it does not end up streaming pointlessly
this.smoothStreamer.resetStreaming();
this.diffStreamer.reset();
this.messageBus.unsubscribe(CHANNEL, this.updateResult);
}
@action
async updateResult(result) {
updateResult(result) {
this.loading = false;
if (result.done) {
this.finalResult = result.result;
}
if (result.done) {
this.loading = false;
}
@ -154,7 +151,7 @@ export default class ModalDiffModal extends Component {
<:body>
<div
{{didInsert this.subscribe}}
{{willDestroy this.unsubscribe}}
{{willDestroy this.cleanup}}
class="text-preview"
>
{{#if this.loading}}

View File

@ -100,6 +100,7 @@ export default class DiffStreamer {
this.currentWordIndex = 0;
this.currentCharIndex = 0;
this.isStreaming = false;
this.isDone = false;
if (this.typingTimer) {
cancel(this.typingTimer);
this.typingTimer = null;