Skip to content

Commit 067c430

Browse files
authored
make sure to rerender requests after attaching variable data (microsoft#221482)
* emit event (via the parent chat model) * compute dataId considering the variable data fyi @roblourens
1 parent 02077f3 commit 067c430

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

src/vs/workbench/contrib/chat/common/chatModel.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,13 +542,21 @@ export function isSerializableSessionData(obj: unknown): obj is ISerializableCha
542542
);
543543
}
544544

545-
export type IChatChangeEvent = IChatAddRequestEvent | IChatAddResponseEvent | IChatInitEvent | IChatRemoveRequestEvent;
545+
export type IChatChangeEvent =
546+
| IChatInitEvent
547+
| IChatAddRequestEvent | IChatChangedRequestEvent | IChatRemoveRequestEvent
548+
| IChatAddResponseEvent;
546549

547550
export interface IChatAddRequestEvent {
548551
kind: 'addRequest';
549552
request: IChatRequestModel;
550553
}
551554

555+
export interface IChatChangedRequestEvent {
556+
kind: 'changedRequest';
557+
request: IChatRequestModel;
558+
}
559+
552560
export interface IChatAddResponseEvent {
553561
kind: 'addResponse';
554562
response: IChatResponseModel;
@@ -832,6 +840,11 @@ export class ChatModel extends Disposable implements IChatModel {
832840
return request;
833841
}
834842

843+
updateRequest(request: ChatRequestModel, variableData: IChatRequestVariableData) {
844+
request.variableData = variableData;
845+
this._onDidChange.fire({ kind: 'changedRequest', request });
846+
}
847+
835848
adoptRequest(request: ChatRequestModel): void {
836849

837850
// this doesn't use `removeRequest` because it must not dispose the request object

src/vs/workbench/contrib/chat/common/chatServiceImpl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ export class ChatService extends Disposable implements IChatService {
479479
request = model.addRequest(parsedRequest, initVariableData, attempt, agent, agentSlashCommandPart?.command);
480480
completeResponseCreated();
481481
const variableData = await this.chatVariablesService.resolveVariables(parsedRequest, options?.attachedContext, model, progressCallback, token);
482-
request.variableData = variableData;
482+
model.updateRequest(request, variableData);
483483

484484
const promptTextResult = getPromptText(request.message);
485485
const updatedVariableData = updateRanges(variableData, promptTextResult.diff); // TODO bit of a hack

src/vs/workbench/contrib/chat/common/chatViewModel.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { IParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserT
1818
import { ChatAgentVoteDirection, IChatContentReference, IChatFollowup, IChatProgressMessage, IChatResponseErrorDetails, IChatTask, IChatUsedContext } from 'vs/workbench/contrib/chat/common/chatService';
1919
import { countWords } from 'vs/workbench/contrib/chat/common/chatWordCounter';
2020
import { CodeBlockModelCollection } from './codeBlockModelCollection';
21+
import { hash } from 'vs/base/common/hash';
2122

2223
export function isRequestVM(item: unknown): item is IChatRequestViewModel {
2324
return !!item && typeof item === 'object' && 'message' in item;
@@ -335,7 +336,7 @@ export class ChatRequestViewModel implements IChatRequestViewModel {
335336
}
336337

337338
get dataId() {
338-
return this.id + `_${ChatModelInitState[this._model.session.initState]}`;
339+
return this.id + `_${ChatModelInitState[this._model.session.initState]}_${hash(this.variables)}`;
339340
}
340341

341342
get sessionId() {

0 commit comments

Comments
 (0)