mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 18:46:19 +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:
@@ -116,6 +116,38 @@ Generated by [AVA](https://avajs.dev).
|
||||
},
|
||||
]
|
||||
|
||||
> should generate the final message
|
||||
|
||||
[
|
||||
{
|
||||
content: 'hello world',
|
||||
params: {
|
||||
word: 'world',
|
||||
},
|
||||
role: 'system',
|
||||
},
|
||||
{
|
||||
content: 'hello',
|
||||
params: {},
|
||||
role: 'user',
|
||||
},
|
||||
{
|
||||
content: 'world',
|
||||
params: {},
|
||||
role: 'assistant',
|
||||
},
|
||||
{
|
||||
content: 'aaa',
|
||||
params: {},
|
||||
role: 'user',
|
||||
},
|
||||
{
|
||||
content: 'bbb',
|
||||
params: {},
|
||||
role: 'assistant',
|
||||
},
|
||||
]
|
||||
|
||||
## should revert message correctly
|
||||
|
||||
> should have three messages before revert
|
||||
|
||||
Binary file not shown.
@@ -281,7 +281,7 @@ test('should fork session correctly', async t => {
|
||||
const assertForkSession = async (
|
||||
workspaceId: string,
|
||||
sessionId: string,
|
||||
lastMessageId: string,
|
||||
lastMessageId: string | undefined,
|
||||
error: string,
|
||||
asserter = async (x: any) => {
|
||||
const forkedSessionId = await x;
|
||||
@@ -330,6 +330,27 @@ test('should fork session correctly', async t => {
|
||||
);
|
||||
}
|
||||
|
||||
// should be able to fork session without latestMessageId (copy all messages)
|
||||
{
|
||||
forkedSessionId = await assertForkSession(
|
||||
id,
|
||||
sessionId,
|
||||
undefined,
|
||||
'should be able to fork session without latestMessageId'
|
||||
);
|
||||
}
|
||||
|
||||
// should not be able to fork session with wrong latestMessageId
|
||||
{
|
||||
await assertForkSession(id, sessionId, 'wrong-message-id', '', async x => {
|
||||
await t.throwsAsync(
|
||||
x,
|
||||
{ instanceOf: Error },
|
||||
'should not able to fork session with wrong latestMessageId'
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
{
|
||||
const u2 = await app.signupV1('u2@affine.pro');
|
||||
await assertForkSession(id, sessionId, randomUUID(), '', async x => {
|
||||
|
||||
@@ -410,6 +410,27 @@ test('should be able to fork chat session', async t => {
|
||||
'should fork new session with same params'
|
||||
);
|
||||
|
||||
// fork session without latestMessageId
|
||||
const forkedSessionId3 = await session.fork({
|
||||
userId,
|
||||
sessionId,
|
||||
...commonParams,
|
||||
});
|
||||
|
||||
// fork session with wrong latestMessageId
|
||||
await t.throwsAsync(
|
||||
session.fork({
|
||||
userId,
|
||||
sessionId,
|
||||
latestMessageId: 'wrong-message-id',
|
||||
...commonParams,
|
||||
}),
|
||||
{
|
||||
instanceOf: Error,
|
||||
},
|
||||
'should not able to fork new session with wrong latestMessageId'
|
||||
);
|
||||
|
||||
const cleanObject = (obj: any[]) =>
|
||||
JSON.parse(
|
||||
JSON.stringify(obj, (k, v) =>
|
||||
@@ -436,11 +457,17 @@ test('should be able to fork chat session', async t => {
|
||||
t.snapshot(cleanObject(finalMessages), 'should generate the final message');
|
||||
}
|
||||
|
||||
// check third times forked session
|
||||
{
|
||||
const s3 = (await session.get(forkedSessionId3))!;
|
||||
const finalMessages = s3.finish(params);
|
||||
t.snapshot(cleanObject(finalMessages), 'should generate the final message');
|
||||
}
|
||||
|
||||
// check original session messages
|
||||
{
|
||||
const s3 = (await session.get(sessionId))!;
|
||||
|
||||
const finalMessages = s3.finish(params);
|
||||
const s4 = (await session.get(sessionId))!;
|
||||
const finalMessages = s4.finish(params);
|
||||
t.snapshot(cleanObject(finalMessages), 'should generate the final message');
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ export async function forkCopilotSession(
|
||||
workspaceId: string,
|
||||
docId: string,
|
||||
sessionId: string,
|
||||
latestMessageId: string
|
||||
latestMessageId?: string
|
||||
): Promise<string> {
|
||||
const res = await app.gql(
|
||||
`
|
||||
|
||||
Reference in New Issue
Block a user