first-update
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
'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';
|
||||
|
||||
export default function useDataCleaning(projectId) {
|
||||
const { t } = useTranslation();
|
||||
const [processing, setProcessing] = useState(false);
|
||||
const [progress, setProgress] = useState({
|
||||
total: 0,
|
||||
completed: 0,
|
||||
percentage: 0,
|
||||
cleanedCount: 0
|
||||
});
|
||||
|
||||
const resetProgress = useCallback(() => {
|
||||
setTimeout(() => {
|
||||
setProgress({
|
||||
total: 0,
|
||||
completed: 0,
|
||||
percentage: 0,
|
||||
cleanedCount: 0
|
||||
});
|
||||
}, 500);
|
||||
}, []);
|
||||
|
||||
const handleDataCleaning = useCallback(
|
||||
async (chunkIds, selectedModelInfo, fetchChunks) => {
|
||||
try {
|
||||
if (!chunkIds || chunkIds.length === 0) return;
|
||||
|
||||
if (!selectedModelInfo) {
|
||||
throw new Error(t('textSplit.selectModelFirst'));
|
||||
}
|
||||
|
||||
setProcessing(true);
|
||||
|
||||
if (chunkIds.length === 1) {
|
||||
const chunkId = chunkIds[0];
|
||||
const currentLanguage = i18n.language === 'zh-CN' ? '中文' : 'en';
|
||||
|
||||
const response = await request(`/api/projects/${projectId}/chunks/${chunkId}/clean`, {
|
||||
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.dataCleaningFailed', { chunkId }));
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
toast.success(
|
||||
t('textSplit.dataCleaningSuccess', {
|
||||
originalLength: data.originalLength,
|
||||
cleanedLength: data.cleanedLength
|
||||
})
|
||||
);
|
||||
|
||||
if (fetchChunks) fetchChunks();
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await request(`/api/projects/${projectId}/tasks`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
taskType: 'data-cleaning',
|
||||
modelInfo: selectedModelInfo,
|
||||
language: i18n.language,
|
||||
detail: '批量数据清洗任务',
|
||||
note: { chunkIds }
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.error || t('tasks.createFailed'));
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
if (data?.code !== 0) {
|
||||
throw new Error(data?.message || t('tasks.createFailed'));
|
||||
}
|
||||
|
||||
toast.success(`${t('tasks.createSuccess')},${t('tasks.title')}查看进度`);
|
||||
} catch (error) {
|
||||
toast.error(error.message);
|
||||
} finally {
|
||||
setProcessing(false);
|
||||
resetProgress();
|
||||
}
|
||||
},
|
||||
[projectId, t, resetProgress]
|
||||
);
|
||||
|
||||
return {
|
||||
processing,
|
||||
progress,
|
||||
setProgress,
|
||||
setProcessing,
|
||||
handleDataCleaning,
|
||||
resetProgress
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user