Skip to content

Commit 3b619b0

Browse files
authored
feat(amazonq): handle stop response (aws#7122)
## Problem agentic chat has stop response disabled ## Solution make it so that when its clicked the token is disposed off and the UI unlocks --- - 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 ccbdf48 commit 3b619b0

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

package-lock.json

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/amazonq/src/lsp/chat/messages.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
UiMessageResultParams,
1515
CHAT_PROMPT_OPTION_ACKNOWLEDGED,
1616
ChatPromptOptionAcknowledgedMessage,
17+
STOP_CHAT_RESPONSE,
18+
StopChatResponseMessage,
1719
} from '@aws/chat-client-ui-types'
1820
import {
1921
ChatResult,
@@ -44,6 +46,7 @@ import {
4446
LINK_CLICK_NOTIFICATION_METHOD,
4547
LinkClickParams,
4648
INFO_LINK_CLICK_NOTIFICATION_METHOD,
49+
CancellationTokenSource,
4750
} from '@aws/language-server-runtimes/protocol'
4851
import { v4 as uuidv4 } from 'uuid'
4952
import * as vscode from 'vscode'
@@ -99,6 +102,7 @@ export function registerMessageListeners(
99102
provider: AmazonQChatViewProvider,
100103
encryptionKey: Buffer
101104
) {
105+
const chatStreamTokens = new Map<string, CancellationTokenSource>() // tab id -> token
102106
provider.webview?.onDidReceiveMessage(async (message) => {
103107
languageClient.info(`[VSCode Client] Received ${JSON.stringify(message)} from chat`)
104108

@@ -183,10 +187,21 @@ export function registerMessageListeners(
183187
void openUrl(vscode.Uri.parse(linkParams.link))
184188
break
185189
}
190+
case STOP_CHAT_RESPONSE: {
191+
const tabId = (message as StopChatResponseMessage).params.tabId
192+
const token = chatStreamTokens.get(tabId)
193+
token?.cancel()
194+
token?.dispose()
195+
chatStreamTokens.delete(tabId)
196+
break
197+
}
186198
case chatRequestType.method: {
187199
const chatParams: ChatParams = { ...message.params }
188200
const partialResultToken = uuidv4()
189201
let lastPartialResult: ChatResult | undefined
202+
const cancellationToken = new CancellationTokenSource()
203+
chatStreamTokens.set(chatParams.tabId, cancellationToken)
204+
190205
const chatDisposable = languageClient.onProgress(
191206
chatRequestType,
192207
partialResultToken,
@@ -214,10 +229,14 @@ export function registerMessageListeners(
214229

215230
const chatRequest = await encryptRequest<ChatParams>(chatParams, encryptionKey)
216231
try {
217-
const chatResult = await languageClient.sendRequest<string | ChatResult>(chatRequestType.method, {
218-
...chatRequest,
219-
partialResultToken,
220-
})
232+
const chatResult = await languageClient.sendRequest<string | ChatResult>(
233+
chatRequestType.method,
234+
{
235+
...chatRequest,
236+
partialResultToken,
237+
},
238+
cancellationToken.token
239+
)
221240
await handleCompleteResult<ChatResult>(
222241
chatResult,
223242
encryptionKey,
@@ -242,6 +261,8 @@ export function registerMessageListeners(
242261
chatParams.tabId,
243262
chatDisposable
244263
)
264+
} finally {
265+
chatStreamTokens.delete(chatParams.tabId)
245266
}
246267
break
247268
}

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@
442442
"devDependencies": {
443443
"@aws-sdk/types": "^3.13.1",
444444
"@aws/chat-client": "^0.1.4",
445-
"@aws/chat-client-ui-types": "^0.1.22",
445+
"@aws/chat-client-ui-types": "^0.1.24",
446446
"@aws/language-server-runtimes": "^0.2.58",
447447
"@aws/language-server-runtimes-types": "^0.1.13",
448448
"@cspotcode/source-map-support": "^0.8.1",

0 commit comments

Comments
 (0)