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

92 lines
2.6 KiB
JavaScript
Raw Normal View History

2026-03-17 14:36:31 +08:00
'use client';
import { useState, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import i18n from '@/lib/i18n';
import request from '@/lib/util/request';
import { toast } from 'sonner';
/**
* 测评题目生成的自定义Hook
* @param {string} projectId - 项目ID
* @returns {Object} - 测评题目生成状态和操作方法
*/
export default function useEvalGeneration(projectId) {
const { t } = useTranslation();
const [generating, setGenerating] = useState({});
/**
* 为单个文本块生成测评题目
* @param {string} chunkId - 文本块ID
* @param {Object} selectedModelInfo - 选定的模型信息
* @param {Function} onSuccess - 成功回调
*/
const handleGenerateEvalQuestions = useCallback(
async (chunkId, selectedModelInfo, onSuccess) => {
try {
// 检查模型信息
if (!selectedModelInfo) {
throw new Error(t('textSplit.selectModelFirst'));
}
// 设置生成状态
setGenerating(prev => ({ ...prev, [chunkId]: true }));
// 获取当前语言环境
const currentLanguage = i18n.language === 'zh-CN' ? 'zh-CN' : 'en';
// 调用API生成测评题目
const response = await request(
`/api/projects/${projectId}/chunks/${encodeURIComponent(chunkId)}/eval-questions`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: selectedModelInfo,
language: currentLanguage
})
}
);
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || t('textSplit.generateEvalQuestionsFailed'));
}
const data = await response.json();
// 显示成功消息
toast.success(
t('textSplit.evalQuestionsGeneratedSuccess', {
total: data.total,
defaultValue: `成功生成 ${data.total} 道测评题目`
})
);
// 调用成功回调
if (onSuccess) {
onSuccess(data);
}
} catch (error) {
console.error('Error generating eval questions:', error);
toast.error(error.message || t('textSplit.generateEvalQuestionsFailed'));
} finally {
// 清除生成状态
setGenerating(prev => {
const newState = { ...prev };
delete newState[chunkId];
return newState;
});
}
},
[projectId, t]
);
return {
generating,
handleGenerateEvalQuestions
};
}