Files
YG-Datasets/easy-dataset-main/app/api/projects/[projectId]/split/route.js

89 lines
2.8 KiB
JavaScript

import { NextResponse } from 'next/server';
import { splitProjectFile, getProjectChunks } from '@/lib/file/text-splitter';
import { getProject, updateProject } from '@/lib/db/projects';
import { getTags } from '@/lib/db/tags';
import { handleDomainTree } from '@/lib/util/domain-tree';
// 处理文本分割请求
export async function POST(request, { params }) {
try {
const { projectId } = params;
// 获取请求体
const { fileNames, model, language, domainTreeAction = 'rebuild' } = await request.json();
if (!model) {
return NextResponse.json({ error: 'Please Select Model' }, { status: 400 });
}
const project = await getProject(projectId);
let result = {
totalChunks: 0,
chunks: [],
toc: ''
};
for (let i = 0; i < fileNames.length; i++) {
const fileName = fileNames[i];
// 分割文本
const { toc, chunks, totalChunks } = await splitProjectFile(projectId, fileName);
result.toc += toc;
result.chunks.push(...chunks);
result.totalChunks += totalChunks;
console.log(projectId, fileName, `Text split completed, ${domainTreeAction} domain tree`);
}
// 调用领域树处理模块
const tags = await handleDomainTree({
projectId,
action: domainTreeAction,
newToc: result.toc,
model,
language,
fileNames,
project
});
if (!tags && domainTreeAction !== 'keep') {
await updateProject(projectId, { ...project });
return NextResponse.json(
{ error: 'AI analysis failed, please check model configuration, delete file and retry!' },
{ status: 400 }
);
}
return NextResponse.json({ ...result, tags });
} catch (error) {
console.error('Text split error:', String(error));
return NextResponse.json({ error: error.message || 'Text split failed' }, { status: 500 });
}
}
// 获取项目中的所有文本块
export async function GET(request, { params }) {
try {
const { projectId } = params;
const { searchParams } = new URL(request.url);
const filter = searchParams.get('filter');
// 验证项目ID
if (!projectId) {
return NextResponse.json({ error: 'The project ID cannot be empty' }, { status: 400 });
}
// 获取文本块详细信息
const result = await getProjectChunks(projectId, filter);
const tags = await getTags(projectId);
// 返回详细的文本块信息和文件结果(单个文件)
return NextResponse.json({
chunks: result.chunks,
...result.fileResult, // 单个文件结果,而不是数组
tags
});
} catch (error) {
console.error('Failed to get text chunks:', String(error));
return NextResponse.json({ error: error.message || 'Failed to get text chunks' }, { status: 500 });
}
}