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