From 5962739ad59ea0f61d128b48ae01816e2a11edd5 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Mar 2024 05:54:51 -0800 Subject: [PATCH] Don't get rid of model early, get history from it Fixes #4263 --- .../chat/browser/terminalChatController.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts b/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts index 94a66a2bdd2..bd720107fd0 100644 --- a/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts +++ b/src/vs/workbench/contrib/terminalContrib/chat/browser/terminalChatController.ts @@ -24,7 +24,7 @@ import { ITerminalProcessManager } from 'vs/workbench/contrib/terminal/common/te import { TerminalChatWidget } from 'vs/workbench/contrib/terminalContrib/chat/browser/terminalChatWidget'; -import { ChatModel, ChatRequestModel, IChatRequestVariableData } from 'vs/workbench/contrib/chat/common/chatModel'; +import { ChatModel, ChatRequestModel, IChatRequestVariableData, getHistoryEntriesFromModel } from 'vs/workbench/contrib/chat/common/chatModel'; import { TerminalChatContextKeys, TerminalChatResponseTypes } from 'vs/workbench/contrib/terminalContrib/chat/browser/terminalChat'; const enum Message { @@ -209,16 +209,19 @@ export class TerminalChatController extends Disposable implements ITerminalContr this._requestActiveContextKey.reset(); } - private updateModel(): void { + async acceptInput(): Promise { const providerInfo = this._chatService.getProviderInfos()?.[0]; if (!providerInfo) { return; } - this._model ??= this._chatService.startSession(providerInfo.id, CancellationToken.None); - } + if (!this._model) { + this._model = this._chatService.startSession(providerInfo.id, CancellationToken.None); + if (!this._model) { + throw new Error('Could not start chat session'); + } + } + const model = this._model; - async acceptInput(): Promise { - this.updateModel(); this._lastInput = this._chatWidget?.rawValue?.input(); if (!this._lastInput) { return; @@ -258,7 +261,7 @@ export class TerminalChatController extends Disposable implements ITerminalContr } }; - await this._model?.waitForInitialization(); + await model.waitForInitialization(); const request: IParsedChatRequest = { text: this._lastInput, parts: [] @@ -266,16 +269,16 @@ export class TerminalChatController extends Disposable implements ITerminalContr const requestVarData: IChatRequestVariableData = { variables: [] }; - this._currentRequest = this._model?.addRequest(request, requestVarData); + this._currentRequest = model.addRequest(request, requestVarData); const requestProps: IChatAgentRequest = { - sessionId: this._model!.sessionId, + sessionId: model.sessionId, requestId: this._currentRequest!.id, agentId: this._terminalAgentId, message: this._lastInput, variables: { variables: [] }, }; try { - const task = this._chatAgentService.invokeAgent(this._terminalAgentId, requestProps, progressCallback, [], cancellationToken); + const task = this._chatAgentService.invokeAgent(this._terminalAgentId, requestProps, progressCallback, getHistoryEntriesFromModel(model), cancellationToken); this._chatWidget?.rawValue?.inlineChatWidget.updateChatMessage(undefined); this._chatWidget?.rawValue?.inlineChatWidget.updateFollowUps(undefined); this._chatWidget?.rawValue?.inlineChatWidget.updateProgress(true);