diff --git a/api/app/clients/BaseClient.js b/api/app/clients/BaseClient.js index 4df364b751..bfb65cf93c 100644 --- a/api/app/clients/BaseClient.js +++ b/api/app/clients/BaseClient.js @@ -473,6 +473,7 @@ class BaseClient { conversationId, parentMessageId: userMessage.messageId, isCreatedByUser: false, + isEdited, model: this.modelOptions.model, sender: this.sender, text: addSpaceIfNeeded(generation) + (await this.sendCompletion(payload, opts)), diff --git a/api/app/clients/PluginsClient.js b/api/app/clients/PluginsClient.js index 36a3dabb42..9b939d0522 100644 --- a/api/app/clients/PluginsClient.js +++ b/api/app/clients/PluginsClient.js @@ -242,6 +242,7 @@ class PluginsClient extends OpenAIClient { } const { user, + isEdited, conversationId, responseMessageId, saveOptions, @@ -293,6 +294,7 @@ class PluginsClient extends OpenAIClient { conversationId, parentMessageId: userMessage.messageId, isCreatedByUser: false, + isEdited, model: this.modelOptions.model, sender: this.sender, promptTokens, diff --git a/api/models/Message.js b/api/models/Message.js index d85f4f068b..64dba3dbfb 100644 --- a/api/models/Message.js +++ b/api/models/Message.js @@ -14,6 +14,7 @@ module.exports = { error, unfinished, cancelled, + isEdited = false, finish_reason = null, tokenCount = null, plugin = null, @@ -34,6 +35,7 @@ module.exports = { sender, text, isCreatedByUser, + isEdited, finish_reason, error, unfinished, @@ -63,6 +65,7 @@ module.exports = { async updateMessage(message) { try { const { messageId, ...update } = message; + update.isEdited = true; const updatedMessage = await Message.findOneAndUpdate({ messageId }, update, { new: true }); if (!updatedMessage) { @@ -77,6 +80,7 @@ module.exports = { text: updatedMessage.text, isCreatedByUser: updatedMessage.isCreatedByUser, tokenCount: updatedMessage.tokenCount, + isEdited: true, }; } catch (err) { console.error(`Error updating message: ${err}`); diff --git a/api/models/schema/messageSchema.js b/api/models/schema/messageSchema.js index f28f2ad546..7d4211dea3 100644 --- a/api/models/schema/messageSchema.js +++ b/api/models/schema/messageSchema.js @@ -55,6 +55,10 @@ const messageSchema = mongoose.Schema( required: true, default: false, }, + isEdited: { + type: Boolean, + default: false, + }, unfinished: { type: Boolean, default: false, diff --git a/api/server/routes/edit/anthropic.js b/api/server/routes/edit/anthropic.js index 6f2bfc58e1..0fe67fb56a 100644 --- a/api/server/routes/edit/anthropic.js +++ b/api/server/routes/edit/anthropic.js @@ -61,6 +61,7 @@ router.post( text: partialText, unfinished: true, cancelled: false, + isEdited: true, error: false, }); } diff --git a/api/server/routes/edit/gptPlugins.js b/api/server/routes/edit/gptPlugins.js index 8f635ec275..c05592323f 100644 --- a/api/server/routes/edit/gptPlugins.js +++ b/api/server/routes/edit/gptPlugins.js @@ -80,6 +80,7 @@ router.post( model: endpointOption.modelOptions.model, unfinished: true, cancelled: false, + isEdited: true, error: false, }); } diff --git a/api/server/routes/edit/openAI.js b/api/server/routes/edit/openAI.js index fe1c5e2950..1a9dc3ff22 100644 --- a/api/server/routes/edit/openAI.js +++ b/api/server/routes/edit/openAI.js @@ -63,6 +63,7 @@ router.post( model: endpointOption.modelOptions.model, unfinished: true, cancelled: false, + isEdited: true, error: false, }); } diff --git a/api/server/routes/endpoints/schemas.js b/api/server/routes/endpoints/schemas.js index e7e9f30e8d..ba36abe64c 100644 --- a/api/server/routes/endpoints/schemas.js +++ b/api/server/routes/endpoints/schemas.js @@ -12,47 +12,6 @@ const EModelEndpoint = { const eModelEndpointSchema = z.nativeEnum(EModelEndpoint); -/* -const tMessageSchema = z.object({ - messageId: z.string(), - clientId: z.string().nullable().optional(), - conversationId: z.string().nullable(), - parentMessageId: z.string().nullable(), - sender: z.string(), - text: z.string(), - isCreatedByUser: z.boolean(), - error: z.boolean(), - createdAt: z - .string() - .optional() - .default(() => new Date().toISOString()), - updatedAt: z - .string() - .optional() - .default(() => new Date().toISOString()), - current: z.boolean().optional(), - unfinished: z.boolean().optional(), - submitting: z.boolean().optional(), - searchResult: z.boolean().optional(), - finish_reason: z.string().optional(), -}); - -const tPresetSchema = tConversationSchema - .omit({ - conversationId: true, - createdAt: true, - updatedAt: true, - title: true, - }) - .merge( - z.object({ - conversationId: z.string().optional(), - presetId: z.string().nullable().optional(), - title: z.string().nullable().optional(), - }), - ); -*/ - const tPluginAuthConfigSchema = z.object({ authField: z.string(), label: z.string(), diff --git a/client/src/components/Messages/Content/EditMessage.tsx b/client/src/components/Messages/Content/EditMessage.tsx index d1e0339f8f..aef7caaf6a 100644 --- a/client/src/components/Messages/Content/EditMessage.tsx +++ b/client/src/components/Messages/Content/EditMessage.tsx @@ -69,6 +69,7 @@ const EditMessage = ({ ? { ...msg, text, + isEdited: true, } : msg, ), diff --git a/client/src/hooks/useMessageHandler.ts b/client/src/hooks/useMessageHandler.ts index f031c250aa..445c405407 100644 --- a/client/src/hooks/useMessageHandler.ts +++ b/client/src/hooks/useMessageHandler.ts @@ -101,6 +101,7 @@ const useMessageHandler = () => { unfinished: false, submitting: true, isCreatedByUser: false, + isEdited: isEditOrContinue, error: false, }; diff --git a/packages/data-provider/src/schemas.ts b/packages/data-provider/src/schemas.ts index b8de2150dc..6f21e58860 100644 --- a/packages/data-provider/src/schemas.ts +++ b/packages/data-provider/src/schemas.ts @@ -77,6 +77,7 @@ export const tMessageSchema = z.object({ sender: z.string(), text: z.string(), generation: z.string().nullable().optional(), + isEdited: z.boolean().optional(), isCreatedByUser: z.boolean(), error: z.boolean(), createdAt: z