mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-26 11:26:56 +01:00
Fix persisting chat agents for responses
This commit is contained in:
@@ -16,9 +16,12 @@ import { IChatRequestVariableValue } from 'vs/workbench/contrib/chat/common/chat
|
||||
|
||||
//#region agent service, commands etc
|
||||
|
||||
export interface IChatAgent {
|
||||
export interface IChatAgentData {
|
||||
id: string;
|
||||
metadata: IChatAgentMetadata;
|
||||
}
|
||||
|
||||
export interface IChatAgent extends IChatAgentData {
|
||||
invoke(request: IChatAgentRequest, progress: (part: IChatProgress) => void, history: IChatMessage[], token: CancellationToken): Promise<IChatAgentResult>;
|
||||
provideFollowups?(sessionId: string, token: CancellationToken): Promise<IChatFollowup[]>;
|
||||
provideSlashCommands(token: CancellationToken): Promise<IChatAgentCommand[]>;
|
||||
|
||||
@@ -8,12 +8,13 @@ import { DeferredPromise } from 'vs/base/common/async';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IMarkdownString, MarkdownString, isMarkdownString } from 'vs/base/common/htmlContent';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { revive } from 'vs/base/common/marshalling';
|
||||
import { basename } from 'vs/base/common/resources';
|
||||
import { URI, UriComponents } from 'vs/base/common/uri';
|
||||
import { URI, UriComponents, UriDto } from 'vs/base/common/uri';
|
||||
import { generateUuid } from 'vs/base/common/uuid';
|
||||
import { OffsetRange } from 'vs/editor/common/core/offsetRange';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IChatAgent, IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents';
|
||||
import { IChatAgentData } from 'vs/workbench/contrib/chat/common/chatAgents';
|
||||
import { ChatRequestTextPart, IParsedChatRequest, reviveParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserTypes';
|
||||
import { IChat, IChatContentInlineReference, IChatContentReference, IChatFollowup, IChatProgress, IChatReplyFollowup, IChatResponse, IChatResponseErrorDetails, IChatResponseProgressFileTreeData, IUsedContext, InteractiveSessionVoteDirection, isIUsedContext } from 'vs/workbench/contrib/chat/common/chatService';
|
||||
|
||||
@@ -57,7 +58,7 @@ export interface IChatResponseModel {
|
||||
readonly username: string;
|
||||
readonly avatarIconUri?: URI;
|
||||
readonly session: IChatModel;
|
||||
readonly agent?: IChatAgent;
|
||||
readonly agent?: IChatAgentData;
|
||||
readonly response: IResponse;
|
||||
readonly isComplete: boolean;
|
||||
readonly isCanceled: boolean;
|
||||
@@ -294,7 +295,7 @@ export class ChatResponseModel extends Disposable implements IChatResponseModel
|
||||
constructor(
|
||||
_response: IMarkdownString | ReadonlyArray<IMarkdownString | IChatResponseProgressFileTreeData | IChatContentInlineReference>,
|
||||
public readonly session: ChatModel,
|
||||
public readonly agent: IChatAgent | undefined,
|
||||
public readonly agent: IChatAgentData | undefined,
|
||||
public readonly requestId: string,
|
||||
private _isComplete: boolean = false,
|
||||
private _isCanceled = false,
|
||||
@@ -364,12 +365,7 @@ export interface ISerializableChatsData {
|
||||
[sessionId: string]: ISerializableChatData;
|
||||
}
|
||||
|
||||
export interface ISerializableChatAgentData {
|
||||
id: string;
|
||||
description?: string;
|
||||
fullName?: string;
|
||||
icon?: UriComponents;
|
||||
}
|
||||
export type ISerializableChatAgentData = UriDto<IChatAgentData>;
|
||||
|
||||
export interface ISerializableChatRequestData {
|
||||
providerRequestId: string | undefined;
|
||||
@@ -532,7 +528,6 @@ export class ChatModel extends Disposable implements IChatModel {
|
||||
public readonly providerId: string,
|
||||
private readonly initialData: ISerializableChatData | IExportableChatData | undefined,
|
||||
@ILogService private readonly logService: ILogService,
|
||||
@IChatAgentService private readonly chatAgentService: IChatAgentService,
|
||||
) {
|
||||
super();
|
||||
|
||||
@@ -566,7 +561,8 @@ export class ChatModel extends Disposable implements IChatModel {
|
||||
: reviveParsedChatRequest(raw.message);
|
||||
const request = new ChatRequestModel(this, parsedRequest, raw.providerRequestId);
|
||||
if (raw.response || raw.responseErrorDetails) {
|
||||
const agent = raw.agent && this.chatAgentService.getAgents().find(a => a.id === raw.agent!.id); // TODO do something reasonable if this agent has disappeared since the last session
|
||||
const agent = (raw.agent && 'metadata' in raw.agent) ? // Check for the new format, ignore entries in the old format
|
||||
revive<ISerializableChatAgentData>(raw.agent) : undefined;
|
||||
request.response = new ChatResponseModel(raw.response ?? [new MarkdownString(raw.response)], this, agent, request.id, true, raw.isCanceled, raw.vote, raw.providerRequestId, raw.responseErrorDetails, raw.followups);
|
||||
if (raw.usedContext) { // @ulugbekna: if this's a new vscode sessions, doc versions are incorrect anyway?
|
||||
request.response.updateContent(raw.usedContext);
|
||||
@@ -648,7 +644,7 @@ export class ChatModel extends Disposable implements IChatModel {
|
||||
return this._requests;
|
||||
}
|
||||
|
||||
addRequest(message: IParsedChatRequest, chatAgent?: IChatAgent): ChatRequestModel {
|
||||
addRequest(message: IParsedChatRequest, chatAgent?: IChatAgentData): ChatRequestModel {
|
||||
if (!this._session) {
|
||||
throw new Error('addRequest: No session');
|
||||
}
|
||||
@@ -762,12 +758,7 @@ export class ChatModel extends Disposable implements IChatModel {
|
||||
followups: r.response?.followups,
|
||||
isCanceled: r.response?.isCanceled,
|
||||
vote: r.response?.vote,
|
||||
agent: r.response?.agent ? {
|
||||
id: r.response.agent.id,
|
||||
description: r.response.agent.metadata.description,
|
||||
fullName: r.response.agent.metadata.fullName,
|
||||
icon: r.response.agent.metadata.icon
|
||||
} : undefined,
|
||||
agent: r.response?.agent,
|
||||
usedContext: r.response?.response.usedContext,
|
||||
contentReferences: r.response?.response.contentReferences
|
||||
};
|
||||
|
||||
@@ -8,7 +8,7 @@ import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ILogService } from 'vs/platform/log/common/log';
|
||||
import { IChatAgent } from 'vs/workbench/contrib/chat/common/chatAgents';
|
||||
import { IChatAgentData } from 'vs/workbench/contrib/chat/common/chatAgents';
|
||||
import { ChatModelInitState, IChatModel, IChatRequestModel, IChatResponseModel, IChatWelcomeMessageContent, IResponse } from 'vs/workbench/contrib/chat/common/chatModel';
|
||||
import { IParsedChatRequest } from 'vs/workbench/contrib/chat/common/chatParserTypes';
|
||||
import { IChatReplyFollowup, IChatResponseCommandFollowup, IChatResponseErrorDetails, IChatResponseProgressFileTreeData, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService';
|
||||
@@ -89,7 +89,7 @@ export interface IChatResponseViewModel {
|
||||
readonly requestId: string;
|
||||
readonly username: string;
|
||||
readonly avatarIconUri?: URI;
|
||||
readonly agent?: IChatAgent;
|
||||
readonly agent?: IChatAgentData;
|
||||
readonly response: IResponse;
|
||||
readonly isComplete: boolean;
|
||||
readonly isCanceled: boolean;
|
||||
|
||||
Reference in New Issue
Block a user