From c533b47c99e3d29efb662f153218d54eb04abdff Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Mon, 31 Mar 2025 16:04:38 +0200 Subject: [PATCH] chat - improve request forwarding from setup (#244854) --- .../contrib/chat/browser/chatSetup.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup.ts b/src/vs/workbench/contrib/chat/browser/chatSetup.ts index 70704840ca2..b41d7e519d0 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSetup.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSetup.ts @@ -179,6 +179,8 @@ class SetupChatAgentImplementation extends Disposable implements IChatAgentImple private readonly _onUnresolvableError = this._register(new Emitter()); readonly onUnresolvableError = this._onUnresolvableError.event; + private readonly pendingForwardedRequests = new Map>(); + constructor( private readonly context: ChatEntitlementContext, private readonly controller: Lazy, @@ -227,14 +229,22 @@ class SetupChatAgentImplementation extends Disposable implements IChatAgentImple return {}; } - private _handlingForwardedRequest: string | undefined; private async forwardRequestToCopilot(requestModel: IChatRequestModel, progress: (part: IChatProgress) => void, chatService: IChatService, languageModelsService: ILanguageModelsService, chatAgentService: IChatAgentService, chatWidgetService: IChatWidgetService): Promise { - - if (this._handlingForwardedRequest === requestModel.message.text) { - throw new Error('Already handling this request'); + if (this.pendingForwardedRequests.has(requestModel.id)) { + return this.pendingForwardedRequests.get(requestModel.id)!; } - this._handlingForwardedRequest = requestModel.message.text; + const forwardRequest = this.doForwardRequestToCopilot(requestModel, progress, chatService, languageModelsService, chatAgentService, chatWidgetService); + this.pendingForwardedRequests.set(requestModel.id, forwardRequest); + + try { + await forwardRequest; + } finally { + this.pendingForwardedRequests.delete(requestModel.id); + } + } + + private async doForwardRequestToCopilot(requestModel: IChatRequestModel, progress: (part: IChatProgress) => void, chatService: IChatService, languageModelsService: ILanguageModelsService, chatAgentService: IChatAgentService, chatWidgetService: IChatWidgetService): Promise { // We need a signal to know when we can resend the request to // Copilot. Waiting for the registration of the agent is not