78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
|
|
import { NextResponse } from 'next/server';
|
||
|
|
import { db } from '@/lib/db';
|
||
|
|
|
||
|
|
export async function POST(req, { params }) {
|
||
|
|
try {
|
||
|
|
const { projectId, datasetId } = params;
|
||
|
|
|
||
|
|
// 1. 获取数据集详情
|
||
|
|
const dataset = await db.datasets.findUnique({
|
||
|
|
where: { id: datasetId, projectId }
|
||
|
|
});
|
||
|
|
|
||
|
|
if (!dataset) {
|
||
|
|
return NextResponse.json({ error: 'Dataset not found' }, { status: 404 });
|
||
|
|
}
|
||
|
|
|
||
|
|
// 2. 尝试通过 questionId 查找关联的 chunkId
|
||
|
|
let chunkId = null;
|
||
|
|
if (dataset.questionId) {
|
||
|
|
const question = await db.questions.findUnique({
|
||
|
|
where: { id: dataset.questionId }
|
||
|
|
});
|
||
|
|
if (question) {
|
||
|
|
chunkId = question.chunkId;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 3. 创建评估数据集记录
|
||
|
|
// 默认使用 open_ended 类型,因为通常数据集是问答对,适合作为评估
|
||
|
|
let evalTags = [];
|
||
|
|
try {
|
||
|
|
evalTags = JSON.parse(dataset.tags || '[]');
|
||
|
|
if (!Array.isArray(evalTags)) evalTags = [];
|
||
|
|
} catch (e) {
|
||
|
|
evalTags = [];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 排除 'Eval' 标签,并将数组转为逗号分隔的字符串
|
||
|
|
const evalTagsString = evalTags.filter(tag => tag !== 'Eval').join(',');
|
||
|
|
|
||
|
|
const evalDataset = await db.evalDatasets.create({
|
||
|
|
data: {
|
||
|
|
projectId,
|
||
|
|
question: dataset.question,
|
||
|
|
questionType: 'open_ended',
|
||
|
|
correctAnswer: dataset.answer,
|
||
|
|
tags: evalTagsString,
|
||
|
|
note: dataset.note,
|
||
|
|
chunkId: chunkId,
|
||
|
|
options: '' // 开放题不需要选项
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
// 4. 更新原数据集,添加 'Eval' 标签
|
||
|
|
let currentTags = [];
|
||
|
|
try {
|
||
|
|
currentTags = JSON.parse(dataset.tags || '[]');
|
||
|
|
} catch (e) {
|
||
|
|
// ignore error
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!currentTags.includes('Eval')) {
|
||
|
|
currentTags.push('Eval');
|
||
|
|
await db.datasets.update({
|
||
|
|
where: { id: datasetId },
|
||
|
|
data: {
|
||
|
|
tags: JSON.stringify(currentTags)
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
return NextResponse.json({ success: true, evalDataset });
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Failed to copy dataset to eval:', error);
|
||
|
|
return NextResponse.json({ error: 'Internal Server Error' }, { status: 500 });
|
||
|
|
}
|
||
|
|
}
|