api-server/src/modules/ai-job/knowledge-generation-executor.ts
wangdl 0889e3af46
All checks were successful
Deploy API Server / build (push) Successful in 36s
Deploy API Server / deploy (push) Successful in 1m0s
feat: knowledge generation workflow + drop import-candidate module + migrations
2026-07-08 19:34:10 +08:00

53 lines
1.6 KiB
TypeScript

import { Injectable, Logger } from '@nestjs/common';
import { PrismaService } from '../../infrastructure/database/prisma.service';
import { KnowledgeImportWorkflow } from '../ai/workflows/knowledge-import.workflow';
import type { KnowledgeGenerationSnapshot } from './knowledge-generation-snapshot-builder';
@Injectable()
export class KnowledgeGenerationExecutor {
private readonly logger = new Logger(KnowledgeGenerationExecutor.name);
constructor(
private readonly prisma: PrismaService,
private readonly workflow: KnowledgeImportWorkflow,
) {}
async execute(snapshot: KnowledgeGenerationSnapshot, aiJobId: string) {
const { taskId, sourceId, knowledgeBaseId, userId, rawText, sourceName } = snapshot.snapshot;
const txOps = [
this.prisma.knowledgeGenerationTask.updateMany({
where: { id: taskId, aiJobId, status: { in: ['queued', 'running'] } },
data: {
status: 'running',
startedAt: new Date(),
errorCode: null,
errorMessage: null,
},
}),
];
if (sourceId) {
txOps.push(
this.prisma.knowledgeSource.updateMany({
where: { id: sourceId, knowledgeBaseId, userId },
data: { learningStatus: 'running' },
}),
);
}
await this.prisma.$transaction(txOps);
const result = await this.workflow.execute({
userId,
rawText,
sourceName,
});
this.logger.log(
`Knowledge Generation Executor completed: job=${aiJobId} ` +
`task=${taskId} source=${sourceId ?? 'n/a'} points=${result.knowledgePoints?.length ?? 0}`,
);
return { parsed: result };
}
}