@@ -328,7 +328,7 @@ export default {
328
328
this .messages .push ({ role, content, timestamp })
329
329
this .chatContent = ' '
330
330
this .scrollToBottom ()
331
- await this .newMessage (role, content, timestamp)
331
+ await this .newMessage (this . active . id , role, content, timestamp)
332
332
},
333
333
334
334
onLoadOlderMessages () {
@@ -466,13 +466,13 @@ export default {
466
466
}
467
467
},
468
468
469
- async newMessage (role , content , timestamp ) {
469
+ async newMessage (sessionId , role , content , timestamp ) {
470
470
try {
471
471
this .loading .newHumanMessage = true
472
472
const firstHumanMessage = this .messages .length === 1 && this .messages [0 ].role === Roles .HUMAN
473
473
474
474
const response = await axios .put (getChatURL (' /new_message' ), {
475
- sessionId: this . active . id ,
475
+ sessionId,
476
476
role,
477
477
content,
478
478
timestamp,
@@ -485,11 +485,11 @@ export default {
485
485
this .messages [this .messages .length - 1 ] = response .data
486
486
487
487
if (firstHumanMessage) {
488
- const session = this .sessions .find ((session ) => session .id === this . active . id )
488
+ const session = this .sessions .find ((session ) => session .id === sessionId )
489
489
session .title = content
490
490
}
491
491
492
- await this .runGenerationTask ()
492
+ await this .runGenerationTask (sessionId )
493
493
} catch (error) {
494
494
this .loading .newHumanMessage = false
495
495
console .error (' newMessage error:' , error)
@@ -521,15 +521,25 @@ export default {
521
521
}
522
522
},
523
523
524
- async runGenerationTask () {
524
+ async runGenerationTask (sessionId ) {
525
+ if (! sessionId) {
526
+ sessionId = this .active .id
527
+ if (! sessionId) {
528
+ console .error (' runGenerationTask: no active session' )
529
+ return
530
+ }
531
+ }
525
532
try {
526
533
this .loading .llmGeneration = true
527
- const response = await axios .get (getChatURL (' /generate' ), { params: { sessionId: this . active . id } })
534
+ const response = await axios .get (getChatURL (' /generate' ), { params: { sessionId } })
528
535
console .debug (' scheduleGenerationTask response:' , response)
529
- const message = await this .pollGenerationTask (response .data .taskId )
530
- console .debug (' checkTaskPolling result:' , message)
531
- this .messages .push (message)
532
- this .scrollToBottom ()
536
+ const message = await this .pollGenerationTask (sessionId, response .data .taskId )
537
+ console .debug (` checkTaskPolling result for sessionId (${ sessionId} ): ${ message} ` )
538
+ if (this .active .id === sessionId) {
539
+ // add the message to the list only if the session is still active
540
+ this .messages .push (message)
541
+ this .scrollToBottom ()
542
+ }
533
543
} catch (error) {
534
544
console .error (' scheduleGenerationTask error:' , error)
535
545
showError (t (' assistant' , ' Error generating a response' ))
@@ -538,15 +548,17 @@ export default {
538
548
}
539
549
},
540
550
541
- async runRegenerationTask (messageId ) {
551
+ async runRegenerationTask (messageId , sessionId ) {
542
552
try {
543
553
this .loading .llmGeneration = true
544
- const response = await axios .get (getChatURL (' /regenerate' ), { params: { messageId, sessionId: this . active . id } })
554
+ const response = await axios .get (getChatURL (' /regenerate' ), { params: { messageId, sessionId } })
545
555
console .debug (' scheduleRegenerationTask response:' , response)
546
- const message = await this .pollGenerationTask (response .data .taskId )
556
+ const message = await this .pollGenerationTask (sessionId, response .data .taskId )
547
557
console .debug (' checkTaskPolling result:' , message)
548
- this .messages [this .messages .length - 1 ] = message
549
- this .scrollToBottom ()
558
+ if (this .active .id === sessionId) {
559
+ this .messages [this .messages .length - 1 ] = message
560
+ this .scrollToBottom ()
561
+ }
550
562
} catch (error) {
551
563
console .error (' scheduleRegenerationTask error:' , error)
552
564
showError (t (' assistant' , ' Error regenerating a response' ))
@@ -555,12 +567,20 @@ export default {
555
567
}
556
568
},
557
569
558
- async pollGenerationTask (taskId ) {
570
+ async pollGenerationTask (sessionId , taskId ) {
559
571
return new Promise ((resolve , reject ) => {
560
572
this .pollMessageGenerationTimerId = setInterval (() => {
573
+ if (this .active .id !== sessionId) {
574
+ console .debug (' pollGenerationTask: session is not active, stopping polling' )
575
+ clearInterval (this .pollMessageGenerationTimerId )
576
+ // silent resolution
577
+ resolve (' ' )
578
+ return
579
+ }
580
+
561
581
axios .get (
562
582
getChatURL (' /check_generation' ),
563
- { params: { taskId, sessionId: this . active . id } },
583
+ { params: { taskId, sessionId } },
564
584
).then (response => {
565
585
clearInterval (this .pollMessageGenerationTimerId )
566
586
resolve (response .data )
0 commit comments