feat(server): copilot session prompt query (#10479)

This commit is contained in:
darkskygit
2025-02-27 11:25:52 +00:00
parent d50860eee2
commit 985906aa13
10 changed files with 79 additions and 21 deletions
@@ -275,6 +275,15 @@ class CopilotPromptType {
messages!: CopilotPromptMessageType[];
}
@ObjectType()
class CopilotSessionType {
@Field(() => ID)
id!: string;
@Field(() => String)
promptName!: string;
}
// ================== Resolver ==================
@ObjectType('Copilot')
@@ -306,18 +315,32 @@ export class CopilotResolver {
}
@ResolveField(() => [String], {
description: 'Get the session list in the workspace',
description: 'Get the session id list in the workspace',
complexity: 2,
deprecationReason: 'Use `sessions` instead',
})
async sessionIds(
@Parent() copilot: CopilotType,
@CurrentUser() user: CurrentUser,
@Args('docId', { nullable: true }) docId?: string,
@Args('options', { nullable: true }) options?: QueryChatSessionsInput
) {
return await this.sessions(copilot, user, docId, options);
}
@ResolveField(() => [CopilotSessionType], {
description: 'Get the session list in the workspace',
complexity: 2,
})
async sessions(
@Parent() copilot: CopilotType,
@CurrentUser() user: CurrentUser,
@Args('docId', { nullable: true }) docId?: string,
@Args('options', { nullable: true }) options?: QueryChatSessionsInput
) {
if (!copilot.workspaceId) return [];
await this.permissions.checkCloudWorkspace(copilot.workspaceId, user.id);
return await this.chatSession.listSessionIds(
return await this.chatSession.listSessions(
user.id,
copilot.workspaceId,
docId,
@@ -396,12 +396,12 @@ export class ChatSessionService {
.reduce((prev, cost) => prev + cost, 0);
}
async listSessionIds(
async listSessions(
userId: string,
workspaceId: string,
docId?: string,
options?: { action?: boolean }
): Promise<string[]> {
): Promise<Array<{ id: string; promptName: string }>> {
return await this.db.aiSession
.findMany({
where: {
@@ -413,9 +413,17 @@ export class ChatSessionService {
},
deletedAt: null,
},
select: { id: true },
select: {
id: true,
promptName: true,
},
})
.then(sessions => sessions.map(({ id }) => id));
.then(sessions =>
sessions.map(({ id, promptName }) => ({
id,
promptName,
}))
);
}
async listHistories(
+9 -1
View File
@@ -45,8 +45,11 @@ type Copilot {
"""Get the quota of the user in the workspace"""
quota: CopilotQuota!
"""Get the session id list in the workspace"""
sessionIds(docId: String, options: QueryChatSessionsInput): [String!]! @deprecated(reason: "Use `sessions` instead")
"""Get the session list in the workspace"""
sessionIds(docId: String, options: QueryChatSessionsInput): [String!]!
sessions(docId: String, options: QueryChatSessionsInput): [CopilotSessionType!]!
workspaceId: ID
}
@@ -192,6 +195,11 @@ type CopilotQuota {
used: SafeInt!
}
type CopilotSessionType {
id: ID!
promptName: String!
}
input CreateChatMessageInput {
attachments: [String!]
blobs: [Upload!]
@@ -301,11 +301,11 @@ declare global {
docId: string,
promptName?: string
) => Promise<string>;
getSessionIds: (
getSessions: (
workspaceId: string,
docId?: string,
options?: { action?: boolean }
) => Promise<string[] | undefined>;
) => Promise<{ id: string; promptName: string }[] | undefined>;
updateSession: (sessionId: string, promptName: string) => Promise<string>;
}
@@ -300,12 +300,12 @@ export class ChatPanel extends WithDisposable(ShadowlessElement) {
const userId = (await AIProvider.userInfo)?.id;
if (!userId) return;
const sessionIds = await AIProvider.session?.getSessionIds(
const sessions = await AIProvider.session?.getSessions(
this.doc.workspace.id,
this.doc.id
);
if (sessionIds?.length) {
this._chatSessionId = sessionIds[0];
if (sessions?.length) {
this._chatSessionId = sessions?.[0].id;
await this._updateHistory();
}
if (this._chatSessionId) {
@@ -136,7 +136,7 @@ export class CopilotClient {
}
}
async getSessionIds(
async getSessions(
workspaceId: string,
docId?: string,
options?: RequestOptions<
@@ -152,7 +152,7 @@ export class CopilotClient {
options,
},
});
return res.currentUser?.copilot?.sessionIds;
return res.currentUser?.copilot?.sessions;
} catch (err) {
throw resolveError(err);
}
@@ -408,12 +408,12 @@ Could you make a new website based on these notes and send back just the html fi
promptName,
});
},
getSessionIds: async (
getSessions: async (
workspaceId: string,
docId?: string,
options?: { action?: boolean }
) => {
return client.getSessionIds(workspaceId, docId, options);
return client.getSessions(workspaceId, docId, options);
},
updateSession: async (sessionId: string, promptName: string) => {
return client.updateSession({
@@ -5,7 +5,10 @@ query getCopilotSessions(
) {
currentUser {
copilot(workspaceId: $workspaceId) {
sessionIds(docId: $docId, options: $options)
sessions(docId: $docId, options: $options) {
id
promptName
}
}
}
}
@@ -424,7 +424,10 @@ export const getCopilotSessionsQuery = {
query getCopilotSessions($workspaceId: String!, $docId: String, $options: QueryChatSessionsInput) {
currentUser {
copilot(workspaceId: $workspaceId) {
sessionIds(docId: $docId, options: $options)
sessions(docId: $docId, options: $options) {
id
promptName
}
}
}
}`,
+16 -3
View File
@@ -83,7 +83,7 @@ export interface Copilot {
/** Get the quota of the user in the workspace */
quota: CopilotQuota;
/** Get the session list in the workspace */
sessionIds: Array<Scalars['String']['output']>;
sessions: Array<CopilotSessionType>;
workspaceId: Maybe<Scalars['ID']['output']>;
}
@@ -97,7 +97,7 @@ export interface CopilotHistoriesArgs {
options?: InputMaybe<QueryChatHistoriesInput>;
}
export interface CopilotSessionIdsArgs {
export interface CopilotSessionsArgs {
docId?: InputMaybe<Scalars['String']['input']>;
options?: InputMaybe<QueryChatSessionsInput>;
}
@@ -259,6 +259,12 @@ export interface CopilotQuota {
used: Scalars['SafeInt']['output'];
}
export interface CopilotSessionType {
__typename?: 'CopilotSessionType';
id: Scalars['ID']['output'];
promptName: Scalars['String']['output'];
}
export interface CreateChatMessageInput {
attachments?: InputMaybe<Array<Scalars['String']['input']>>;
blobs?: InputMaybe<Array<Scalars['Upload']['input']>>;
@@ -2236,7 +2242,14 @@ export type GetCopilotSessionsQuery = {
__typename?: 'Query';
currentUser: {
__typename?: 'UserType';
copilot: { __typename?: 'Copilot'; sessionIds: Array<string> };
copilot: {
__typename?: 'Copilot';
sessions: Array<{
__typename?: 'CopilotSessionType';
id: string;
promptName: string;
}>;
};
} | null;
};