Skip to content

Commit 4b8b97f

Browse files
committed
fix(ChattyLLM): message should land in the same session or not at all
Signed-off-by: Anupam Kumar <kyteinsky@gmail.com>
1 parent 039a110 commit 4b8b97f

File tree

2 files changed

+39
-19
lines changed

2 files changed

+39
-19
lines changed

src/components/ChattyLLM/ChattyLLMInputForm.vue

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export default {
328328
this.messages.push({ role, content, timestamp })
329329
this.chatContent = ''
330330
this.scrollToBottom()
331-
await this.newMessage(role, content, timestamp)
331+
await this.newMessage(this.active.id, role, content, timestamp)
332332
},
333333
334334
onLoadOlderMessages() {
@@ -466,13 +466,13 @@ export default {
466466
}
467467
},
468468
469-
async newMessage(role, content, timestamp) {
469+
async newMessage(sessionId, role, content, timestamp) {
470470
try {
471471
this.loading.newHumanMessage = true
472472
const firstHumanMessage = this.messages.length === 1 && this.messages[0].role === Roles.HUMAN
473473
474474
const response = await axios.put(getChatURL('/new_message'), {
475-
sessionId: this.active.id,
475+
sessionId,
476476
role,
477477
content,
478478
timestamp,
@@ -485,11 +485,11 @@ export default {
485485
this.messages[this.messages.length - 1] = response.data
486486
487487
if (firstHumanMessage) {
488-
const session = this.sessions.find((session) => session.id === this.active.id)
488+
const session = this.sessions.find((session) => session.id === sessionId)
489489
session.title = content
490490
}
491491
492-
await this.runGenerationTask()
492+
await this.runGenerationTask(sessionId)
493493
} catch (error) {
494494
this.loading.newHumanMessage = false
495495
console.error('newMessage error:', error)
@@ -521,15 +521,25 @@ export default {
521521
}
522522
},
523523
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+
}
525532
try {
526533
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 } })
528535
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+
}
533543
} catch (error) {
534544
console.error('scheduleGenerationTask error:', error)
535545
showError(t('assistant', 'Error generating a response'))
@@ -538,15 +548,17 @@ export default {
538548
}
539549
},
540550
541-
async runRegenerationTask(messageId) {
551+
async runRegenerationTask(messageId, sessionId) {
542552
try {
543553
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 } })
545555
console.debug('scheduleRegenerationTask response:', response)
546-
const message = await this.pollGenerationTask(response.data.taskId)
556+
const message = await this.pollGenerationTask(sessionId, response.data.taskId)
547557
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+
}
550562
} catch (error) {
551563
console.error('scheduleRegenerationTask error:', error)
552564
showError(t('assistant', 'Error regenerating a response'))
@@ -555,12 +567,20 @@ export default {
555567
}
556568
},
557569
558-
async pollGenerationTask(taskId) {
570+
async pollGenerationTask(sessionId, taskId) {
559571
return new Promise((resolve, reject) => {
560572
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+
561581
axios.get(
562582
getChatURL('/check_generation'),
563-
{ params: { taskId, sessionId: this.active.id } },
583+
{ params: { taskId, sessionId } },
564584
).then(response => {
565585
clearInterval(this.pollMessageGenerationTimerId)
566586
resolve(response.data)

src/components/ChattyLLM/ConversationBox.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
:delete-loading="loading.messageDelete && message.id === deleteMessageId"
2525
:regenerate-loading="loading.llmGeneration && message.id === regenerateFromId"
2626
:new-message-loading="loading.newHumanMessage && idx === (messages.length - 1)"
27-
@regenerate="regenerate(message.id)"
27+
@regenerate="regenerate(message.id, message.session_id)"
2828
@delete="deleteMessage(message.id)" />
2929
</div>
3030
</template>

0 commit comments

Comments
 (0)