feat(server): workspace file embedding & ignored docs model impl (#11804)

fix AI-30
fix AI-31
This commit is contained in:
darkskygit
2025-04-21 05:34:10 +00:00
parent 93b7c288cb
commit f2adb9f72c
7 changed files with 473 additions and 22 deletions

View File

@@ -114,11 +114,13 @@ model Workspace {
name String? @db.VarChar
avatarKey String? @map("avatar_key") @db.VarChar
features WorkspaceFeature[]
docs WorkspaceDoc[]
permissions WorkspaceUserRole[]
docPermissions WorkspaceDocUserRole[]
blobs Blob[]
features WorkspaceFeature[]
docs WorkspaceDoc[]
permissions WorkspaceUserRole[]
docPermissions WorkspaceDocUserRole[]
blobs Blob[]
AiWorkspaceIgnoredDocs AiWorkspaceIgnoredDocs[]
AiWorkspaceFiles AiWorkspaceFiles[]
@@map("workspaces")
}
@@ -481,6 +483,53 @@ model AiWorkspaceEmbedding {
@@map("ai_workspace_embeddings")
}
model AiWorkspaceIgnoredDocs {
workspaceId String @map("workspace_id") @db.VarChar
docId String @map("doc_id") @db.VarChar
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
@@id([workspaceId, docId])
@@map("ai_workspace_ignored_docs")
}
model AiWorkspaceFiles {
workspaceId String @map("workspace_id") @db.VarChar
fileId String @map("file_id") @db.VarChar
fileName String @map("file_name") @db.VarChar
mimeType String @map("mime_type") @db.VarChar
size Int @db.Integer
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
embeddings AiWorkspaceFileEmbedding[]
@@id([workspaceId, fileId])
@@map("ai_workspace_files")
}
model AiWorkspaceFileEmbedding {
workspaceId String @map("workspace_id") @db.VarChar
fileId String @map("file_id") @db.VarChar
// a file can be divided into multiple chunks and embedded separately.
chunk Int @db.Integer
content String @db.VarChar
embedding Unsupported("vector(1024)")
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
file AiWorkspaceFiles @relation(fields: [workspaceId, fileId], references: [workspaceId, fileId], onDelete: Cascade)
@@id([workspaceId, fileId])
@@unique([workspaceId, fileId, chunk])
@@index([embedding], map: "ai_workspace_file_embeddings_idx")
@@map("ai_workspace_file_embeddings")
}
enum AiJobStatus {
pending
running