Skip to content

Commit e9cfe3a

Browse files
authored
fix(chat): only show context on first message (aws#6967)
## Problem Context is shown repeatedly in the UI if it is provided. <img width="754" alt="image" src="https://github.com/user-attachments/assets/30f51f7c-e504-46a6-b416-9bbd9b06023e" /> ## Solution - Separate initial stream and context messages into separate functions - Only show context on the first message of the loop <img width="679" alt="image" src="https://github.com/user-attachments/assets/aefca516-e04f-4a29-b6e4-92236acc37c8" /> --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent ac5cf3b commit e9cfe3a

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

packages/core/src/codewhispererChat/controllers/chat/controller.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,9 +1187,6 @@ export class ChatController {
11871187

11881188
this.messenger.sendAsyncEventProgress(message.tabID, true, '')
11891189

1190-
// Save the context for the agentic loop
1191-
session.setContext(message.context)
1192-
11931190
await this.generateResponse(
11941191
{
11951192
message: message.message ?? '',
@@ -1490,7 +1487,12 @@ export class ChatController {
14901487
let response: MessengerResponseType | undefined = undefined
14911488
session.createNewTokenSource()
14921489
try {
1493-
this.messenger.sendInitalStream(tabID, triggerID, triggerPayload.documentReferences)
1490+
if (!session.context) {
1491+
// Only show context for the first message in the loop
1492+
this.messenger.sendContextMessage(tabID, triggerID, triggerPayload.documentReferences)
1493+
session.setContext(triggerPayload.context)
1494+
}
1495+
this.messenger.sendInitalStream(tabID, triggerID)
14941496
this.telemetryHelper.setConversationStreamStartTime(tabID)
14951497
if (isSsoConnection(AuthUtil.instance.conn)) {
14961498
const { $metadata, generateAssistantResponseResponse } = await session.chatSso(request)

packages/core/src/codewhispererChat/controllers/chat/messenger/messenger.ts

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,30 @@ export class Messenger {
103103
)
104104
}
105105

106-
public sendInitalStream(
106+
public sendInitalStream(tabID: string, triggerID: string) {
107+
this.dispatcher.sendChatMessage(
108+
new ChatMessage(
109+
{
110+
message: '',
111+
messageType: 'answer-stream',
112+
followUps: undefined,
113+
followUpsHeader: undefined,
114+
relatedSuggestions: undefined,
115+
triggerID,
116+
messageID: triggerID,
117+
userIntent: undefined,
118+
codeBlockLanguage: undefined,
119+
contextList: undefined,
120+
buttons: undefined,
121+
fileList: undefined,
122+
canBeVoted: false,
123+
},
124+
tabID
125+
)
126+
)
127+
}
128+
129+
public sendContextMessage(
107130
tabID: string,
108131
triggerID: string,
109132
mergedRelevantDocuments: DocumentReference[] | undefined
@@ -112,24 +135,26 @@ export class Messenger {
112135
new ChatMessage(
113136
{
114137
message: '',
115-
messageType: 'answer-stream',
138+
messageType: 'answer',
116139
followUps: undefined,
117140
followUpsHeader: undefined,
118141
relatedSuggestions: undefined,
119142
triggerID,
120-
messageID: triggerID,
143+
messageID: '',
121144
userIntent: undefined,
122145
codeBlockLanguage: undefined,
123146
contextList: mergedRelevantDocuments,
124147
title: 'Context',
125148
buttons: undefined,
126149
fileList: undefined,
127150
canBeVoted: false,
151+
padding: false,
128152
},
129153
tabID
130154
)
131155
)
132156
}
157+
133158
/**
134159
* Tries to calculate the total number of code blocks.
135160
* NOTES:
@@ -460,6 +485,11 @@ export class Messenger {
460485
toolUse.input !== '' && { toolUses: [{ ...toolUse }] }),
461486
},
462487
})
488+
const agenticLoopEnded = !eventCounts.has('toolUseEvent')
489+
if (agenticLoopEnded) {
490+
// Reset context for the next request
491+
session.setContext(undefined)
492+
}
463493

464494
getLogger().info(
465495
`All events received. requestId=%s counts=%s`,

packages/core/src/codewhispererChat/tools/chatStream.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class ChatStream extends Writable {
2828
) {
2929
super()
3030
this.logger.debug(`ChatStream created for tabID: ${tabID}, triggerID: ${triggerID}`)
31-
this.messenger.sendInitalStream(tabID, triggerID, undefined)
31+
this.messenger.sendInitalStream(tabID, triggerID)
3232
}
3333

3434
override _write(chunk: Buffer, encoding: BufferEncoding, callback: (error?: Error | null) => void): void {

0 commit comments

Comments
 (0)