mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
feat(server): workspace embedding status count with files (#12420)
fix AI-32 fix AI-132
This commit is contained in:
@@ -144,6 +144,37 @@ export class CopilotWorkspaceConfigModel extends BaseModel {
|
||||
return docIds.filter(id => ignored.has(id));
|
||||
}
|
||||
|
||||
@Transactional()
|
||||
async getWorkspaceEmbeddingStatus(workspaceId: string) {
|
||||
const ignoredDocIds = (await this.listIgnoredDocIds(workspaceId)).map(
|
||||
d => d.docId
|
||||
);
|
||||
const snapshotCondition = {
|
||||
workspaceId,
|
||||
AND: [
|
||||
{ id: { notIn: ignoredDocIds } },
|
||||
{ id: { not: workspaceId } },
|
||||
{ id: { not: { contains: '$' } } },
|
||||
],
|
||||
};
|
||||
|
||||
const [docTotal, docEmbedded, fileTotal, fileEmbedded] = await Promise.all([
|
||||
this.db.snapshot.count({ where: snapshotCondition }),
|
||||
this.db.snapshot.count({
|
||||
where: { ...snapshotCondition, embedding: { some: {} } },
|
||||
}),
|
||||
this.db.aiWorkspaceFiles.count({ where: { workspaceId } }),
|
||||
this.db.aiWorkspaceFiles.count({
|
||||
where: { workspaceId, embeddings: { some: {} } },
|
||||
}),
|
||||
]);
|
||||
|
||||
return {
|
||||
total: docTotal + fileTotal,
|
||||
embedded: docEmbedded + fileEmbedded,
|
||||
};
|
||||
}
|
||||
|
||||
// ================ embeddings ================
|
||||
|
||||
async checkEmbeddingAvailable(): Promise<boolean> {
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
ResolveField,
|
||||
Resolver,
|
||||
} from '@nestjs/graphql';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
import type { Request } from 'express';
|
||||
import { SafeIntResolver } from 'graphql-scalars';
|
||||
import GraphQLUpload from 'graphql-upload/GraphQLUpload.mjs';
|
||||
@@ -241,12 +240,12 @@ class ContextMatchedDocChunk implements DocChunkSimilarity {
|
||||
@Resolver(() => CopilotType)
|
||||
export class CopilotContextRootResolver {
|
||||
constructor(
|
||||
private readonly db: PrismaClient,
|
||||
private readonly ac: AccessController,
|
||||
private readonly event: EventBus,
|
||||
private readonly mutex: RequestMutex,
|
||||
private readonly chatSession: ChatSessionService,
|
||||
private readonly context: CopilotContextService
|
||||
private readonly context: CopilotContextService,
|
||||
private readonly models: Models
|
||||
) {}
|
||||
|
||||
private async checkChatSession(
|
||||
@@ -369,10 +368,10 @@ export class CopilotContextRootResolver {
|
||||
.assert('Workspace.Copilot');
|
||||
|
||||
if (this.context.canEmbedding) {
|
||||
const total = await this.db.snapshot.count({ where: { workspaceId } });
|
||||
const embedded = await this.db.snapshot.count({
|
||||
where: { workspaceId, embedding: { some: {} } },
|
||||
});
|
||||
const { total, embedded } =
|
||||
await this.models.copilotWorkspace.getWorkspaceEmbeddingStatus(
|
||||
workspaceId
|
||||
);
|
||||
return { total, embedded };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user