mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-24 22:09:08 +08:00
refactor: move chat block to affine (#8368)
[BS-898](https://linear.app/affine-design/issue/BS-898/move-ai-chat-block-to-affine) Should be merged after https://github.com/toeverything/blocksuite/pull/8420 merged and bumped.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import { GfxCompatible } from '@blocksuite/affine/block-std/gfx';
|
||||
import type { SerializedXYWH } from '@blocksuite/affine/global/utils';
|
||||
import { BlockModel, defineBlockSchema } from '@blocksuite/affine/store';
|
||||
|
||||
type AIChatProps = {
|
||||
xywh: SerializedXYWH;
|
||||
index: string;
|
||||
scale: number;
|
||||
messages: string; // JSON string of ChatMessage[]
|
||||
sessionId: string; // forked session id
|
||||
rootWorkspaceId: string; // workspace id of root chat session
|
||||
rootDocId: string; // doc id of root chat session
|
||||
};
|
||||
|
||||
export const AIChatBlockSchema = defineBlockSchema({
|
||||
flavour: 'affine:embed-ai-chat',
|
||||
props: (): AIChatProps => ({
|
||||
xywh: '[0,0,0,0]',
|
||||
index: 'a0',
|
||||
scale: 1,
|
||||
messages: '',
|
||||
sessionId: '',
|
||||
rootWorkspaceId: '',
|
||||
rootDocId: '',
|
||||
}),
|
||||
metadata: {
|
||||
version: 1,
|
||||
role: 'content',
|
||||
children: [],
|
||||
},
|
||||
toModel: () => {
|
||||
return new AIChatBlockModel();
|
||||
},
|
||||
});
|
||||
|
||||
export class AIChatBlockModel extends GfxCompatible<AIChatProps>(BlockModel) {}
|
||||
|
||||
declare global {
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
namespace BlockSuite {
|
||||
interface EdgelessBlockModelMap {
|
||||
'affine:embed-ai-chat': AIChatBlockModel;
|
||||
}
|
||||
interface BlockModels {
|
||||
'affine:embed-ai-chat': AIChatBlockModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
export const CHAT_BLOCK_WIDTH = 300;
|
||||
export const CHAT_BLOCK_HEIGHT = 320;
|
||||
@@ -0,0 +1,3 @@
|
||||
export * from './ai-chat-model';
|
||||
export * from './consts';
|
||||
export * from './types';
|
||||
@@ -0,0 +1,25 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
// Define the Zod schema
|
||||
const ChatMessageSchema = z.object({
|
||||
id: z.string(),
|
||||
content: z.string(),
|
||||
role: z.union([z.literal('user'), z.literal('assistant')]),
|
||||
createdAt: z.string(),
|
||||
attachments: z.array(z.string()).optional(),
|
||||
userId: z.string().optional(),
|
||||
userName: z.string().optional(),
|
||||
avatarUrl: z.string().optional(),
|
||||
});
|
||||
|
||||
export const ChatMessagesSchema = z.array(ChatMessageSchema);
|
||||
|
||||
// Derive the TypeScript type from the Zod schema
|
||||
export type ChatMessage = z.infer<typeof ChatMessageSchema>;
|
||||
|
||||
export type MessageRole = 'user' | 'assistant';
|
||||
export type MessageUserInfo = {
|
||||
userId?: string;
|
||||
userName?: string;
|
||||
avatarUrl?: string;
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
export * from './ai-chat-block';
|
||||
@@ -1,3 +1,4 @@
|
||||
export * from './blocks';
|
||||
export {
|
||||
migratePages as forceUpgradePages,
|
||||
migrateGuidCompatibility,
|
||||
|
||||
Reference in New Issue
Block a user