Skip to content

Commit 45a573e

Browse files
authored
Don't wait for variable resolvers before rendering request (microsoft#204650)
Fix microsoft#204409
1 parent fe6db40 commit 45a573e

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,18 @@ export class ChatRequestModel implements IChatRequestModel {
9292
return this.session.requesterAvatarIconUri;
9393
}
9494

95+
public get variableData(): IChatRequestVariableData {
96+
return this._variableData;
97+
}
98+
99+
public set variableData(v: IChatRequestVariableData) {
100+
this._variableData = v;
101+
}
102+
95103
constructor(
96104
public readonly session: ChatModel,
97105
public readonly message: IParsedChatRequest,
98-
public readonly variableData: IChatRequestVariableData) {
106+
private _variableData: IChatRequestVariableData) {
99107
this._id = 'request_' + ChatRequestModel.nextId++;
100108
}
101109
}
@@ -353,7 +361,8 @@ export type ISerializableChatAgentData = UriDto<IChatAgentData>;
353361

354362
export interface ISerializableChatRequestData {
355363
message: string | IParsedChatRequest; // string => old format
356-
variableData: IChatRequestVariableData; // make optional
364+
/** Is really like "prompt data". This is the message in the format in which the agent gets it + variable values. */
365+
variableData: IChatRequestVariableData;
357366
response: ReadonlyArray<IMarkdownString | IChatResponseProgressFileTreeData | IChatContentInlineReference | IChatAgentMarkdownContentWithVulnerability> | undefined;
358367
agent?: ISerializableChatAgentData;
359368
slashCommand?: IChatAgentCommand;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,14 @@ export interface IParsedChatRequestPart {
2222
readonly range: IOffsetRange;
2323
readonly editorRange: IRange;
2424
readonly text: string;
25+
/** How this part is represented in the prompt going to the agent */
2526
readonly promptText: string;
2627
}
2728

29+
export function getPromptText(request: ReadonlyArray<IParsedChatRequestPart>): string {
30+
return request.map(r => r.promptText).join('');
31+
}
32+
2833
export class ChatRequestTextPart implements IParsedChatRequestPart {
2934
static readonly Kind = 'text';
3035
readonly kind = ChatRequestTextPart.Kind;

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
2323
import { IChatAgentCommand, IChatAgentData, IChatAgentHistoryEntry, IChatAgentRequest, IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents';
2424
import { CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatContextKeys';
2525
import { ChatModel, ChatModelInitState, ChatRequestModel, ChatWelcomeMessageModel, IChatModel, IChatRequestVariableData, ISerializableChatData, ISerializableChatsData } from 'vs/workbench/contrib/chat/common/chatModel';
26-
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, IParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserTypes';
26+
import { ChatRequestAgentPart, ChatRequestAgentSubcommandPart, ChatRequestSlashCommandPart, IParsedChatRequest, getPromptText } from 'vs/workbench/contrib/chat/common/chatParserTypes';
2727
import { ChatMessageRole, IChatMessage } from 'vs/workbench/contrib/chat/common/chatProvider';
2828
import { ChatRequestParser } from 'vs/workbench/contrib/chat/common/chatRequestParser';
2929
import { ChatAgentCopyKind, IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService';
@@ -539,8 +539,11 @@ export class ChatService extends Disposable implements IChatService {
539539
history.push({ request: historyRequest, response: request.response.response.value, result: { errorDetails: request.response.errorDetails } });
540540
}
541541

542+
const initVariableData: IChatRequestVariableData = { message: getPromptText(parsedRequest.parts), variables: {} };
543+
request = model.addRequest(parsedRequest, initVariableData, agent, agentSlashCommandPart?.command);
542544
const variableData = await this.chatVariablesService.resolveVariables(parsedRequest, model, token);
543-
request = model.addRequest(parsedRequest, variableData, agent, agentSlashCommandPart?.command);
545+
request.variableData = variableData;
546+
544547
const requestProps: IChatAgentRequest = {
545548
sessionId,
546549
requestId: request.id,

0 commit comments

Comments
 (0)