first-update
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user