From 94de6f58534e4870ddda1a46821da4291b5ffb84 Mon Sep 17 00:00:00 2001 From: forehalo Date: Mon, 22 Apr 2024 08:39:41 +0000 Subject: [PATCH] fix(server): always return created timestamp of chat messages (#6658) --- .../backend/server/src/plugins/copilot/resolver.ts | 4 ++-- .../backend/server/src/plugins/copilot/session.ts | 11 +++++++++-- packages/backend/server/src/schema.gql | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/backend/server/src/plugins/copilot/resolver.ts b/packages/backend/server/src/plugins/copilot/resolver.ts index ff019a9ee1..d49802c9e5 100644 --- a/packages/backend/server/src/plugins/copilot/resolver.ts +++ b/packages/backend/server/src/plugins/copilot/resolver.ts @@ -103,8 +103,8 @@ class ChatMessageType implements Partial { @Field(() => GraphQLJSON, { nullable: true }) params!: Record | undefined; - @Field(() => Date, { nullable: true }) - createdAt!: Date | undefined; + @Field(() => Date) + createdAt!: Date; } @ObjectType('CopilotHistories') diff --git a/packages/backend/server/src/plugins/copilot/session.ts b/packages/backend/server/src/plugins/copilot/session.ts index d86cab2af4..607772d647 100644 --- a/packages/backend/server/src/plugins/copilot/session.ts +++ b/packages/backend/server/src/plugins/copilot/session.ts @@ -18,7 +18,6 @@ import { getTokenEncoder, ListHistoriesOptions, PromptMessage, - PromptMessageSchema, PromptParams, SubmittedMessage, } from './types'; @@ -324,6 +323,7 @@ export class ChatSessionService { role: true, content: true, params: true, + createdAt: true, }, orderBy: { createdAt: 'asc', @@ -338,7 +338,7 @@ export class ChatSessionService { Promise.all( sessions.map(async ({ id, promptName, messages, createdAt }) => { try { - const ret = PromptMessageSchema.array().safeParse(messages); + const ret = ChatMessageSchema.array().safeParse(messages); if (ret.success) { const prompt = await this.prompt.get(promptName); if (!prompt) { @@ -356,6 +356,13 @@ export class ChatSessionService { .filter(({ role }) => role !== 'system') : []; + // `createdAt` is required for history sorting in frontend, let's fake the creating time of prompt messages + (preload as ChatMessage[]).forEach((msg, i) => { + msg.createdAt = new Date( + createdAt.getTime() - preload.length - i - 1 + ); + }); + return { sessionId: id, action: prompt.action || undefined, diff --git a/packages/backend/server/src/schema.gql b/packages/backend/server/src/schema.gql index 2a9bd40c75..748a247ec9 100644 --- a/packages/backend/server/src/schema.gql +++ b/packages/backend/server/src/schema.gql @@ -5,7 +5,7 @@ type ChatMessage { attachments: [String!] content: String! - createdAt: DateTime + createdAt: DateTime! params: JSON role: String! }