75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import type { NextApiRequest, NextApiResponse } from 'next';
|
|
import { jsonRes } from '@/service/response';
|
|
import { connectToDatabase, SplitData } from '@/service/mongo';
|
|
import { authKb, authUser } from '@/service/utils/auth';
|
|
import { generateVector } from '@/service/events/generateVector';
|
|
import { generateQA } from '@/service/events/generateQA';
|
|
import { PgClient } from '@/service/pg';
|
|
import { SplitTextTypEnum } from '@/constants/plugin';
|
|
import { withNextCors } from '@/service/utils/tools';
|
|
|
|
/* split text */
|
|
export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse) {
|
|
try {
|
|
const { chunks, kbId, prompt, mode } = req.body as {
|
|
kbId: string;
|
|
chunks: string[];
|
|
prompt: string;
|
|
mode: `${SplitTextTypEnum}`;
|
|
};
|
|
if (!chunks || !kbId || !prompt) {
|
|
throw new Error('参数错误');
|
|
}
|
|
await connectToDatabase();
|
|
|
|
const { userId } = await authUser({ req });
|
|
|
|
// 验证是否是该用户的 model
|
|
await authKb({
|
|
kbId,
|
|
userId
|
|
});
|
|
|
|
if (mode === SplitTextTypEnum.qa) {
|
|
// 批量QA拆分插入数据
|
|
await SplitData.create({
|
|
userId,
|
|
kbId,
|
|
textList: chunks,
|
|
prompt
|
|
});
|
|
|
|
generateQA();
|
|
} else if (mode === SplitTextTypEnum.subsection) {
|
|
// 待优化,直接调用另一个接口
|
|
// 插入记录
|
|
await PgClient.insert('modelData', {
|
|
values: chunks.map((item) => [
|
|
{ key: 'user_id', value: userId },
|
|
{ key: 'kb_id', value: kbId },
|
|
{ key: 'q', value: item },
|
|
{ key: 'a', value: '' },
|
|
{ key: 'status', value: 'waiting' }
|
|
])
|
|
});
|
|
|
|
generateVector();
|
|
}
|
|
|
|
jsonRes(res);
|
|
} catch (err) {
|
|
jsonRes(res, {
|
|
code: 500,
|
|
error: err
|
|
});
|
|
}
|
|
});
|
|
|
|
export const config = {
|
|
api: {
|
|
bodyParser: {
|
|
sizeLimit: '100mb'
|
|
}
|
|
}
|
|
};
|