mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-13 16:16:46 +08:00
feat(core): support fork session without latestMessageId (#12587)
Close [AI-86](https://linear.app/affine-design/issue/AI-86) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Improved chat session forking to allow creating a fork without specifying the latest message, enabling more flexible session management. - **Bug Fixes** - Forking a chat session with an invalid latest message ID now correctly returns an error. - **Tests** - Added and updated test cases to cover session forking with missing or invalid latest message IDs, ensuring robust behavior in these scenarios. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -91,8 +91,9 @@ class ForkChatSessionInput {
|
||||
@Field(() => String, {
|
||||
description:
|
||||
'Identify a message in the array and keep it with all previous messages into a forked session.',
|
||||
nullable: true,
|
||||
})
|
||||
latestMessageId!: string;
|
||||
latestMessageId?: string;
|
||||
}
|
||||
|
||||
@InputType()
|
||||
|
||||
@@ -673,16 +673,19 @@ export class ChatSessionService {
|
||||
if (!state) {
|
||||
throw new CopilotSessionNotFound();
|
||||
}
|
||||
const lastMessageIdx = state.messages.findLastIndex(
|
||||
({ id, role }) =>
|
||||
role === AiPromptRole.assistant && id === options.latestMessageId
|
||||
);
|
||||
if (lastMessageIdx < 0) {
|
||||
throw new CopilotMessageNotFound({ messageId: options.latestMessageId });
|
||||
let messages = state.messages.map(m => ({ ...m, id: undefined }));
|
||||
if (options.latestMessageId) {
|
||||
const lastMessageIdx = state.messages.findLastIndex(
|
||||
({ id, role }) =>
|
||||
role === AiPromptRole.assistant && id === options.latestMessageId
|
||||
);
|
||||
if (lastMessageIdx < 0) {
|
||||
throw new CopilotMessageNotFound({
|
||||
messageId: options.latestMessageId,
|
||||
});
|
||||
}
|
||||
messages = messages.slice(0, lastMessageIdx + 1);
|
||||
}
|
||||
const messages = state.messages
|
||||
.slice(0, lastMessageIdx + 1)
|
||||
.map(m => ({ ...m, id: undefined }));
|
||||
|
||||
const forkedState = {
|
||||
...state,
|
||||
|
||||
@@ -119,7 +119,7 @@ export interface ChatSessionPromptUpdateOptions
|
||||
export interface ChatSessionForkOptions
|
||||
extends Omit<ChatSessionOptions, 'promptName'> {
|
||||
sessionId: string;
|
||||
latestMessageId: string;
|
||||
latestMessageId?: string;
|
||||
}
|
||||
|
||||
export interface ChatSessionState
|
||||
|
||||
Reference in New Issue
Block a user