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

92 lines
2.6 KiB
JavaScript

'use client';
import { useState, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import { selectedModelInfoAtom } from '@/lib/store';
import { useAtomValue } from 'jotai/index';
import { toast } from 'sonner';
import i18n from '@/lib/i18n';
import axios from 'axios';
/**
* 文件处理的自定义Hook
* @param {string} projectId - 项目ID
* @returns {Object} - 文件处理状态和操作方法
*/
export default function useFileProcessing(projectId) {
const { t } = useTranslation();
const [fileProcessing, setFileProcessing] = useState(false);
const [progress, setProgress] = useState({
total: 0,
completed: 0,
percentage: 0,
questionCount: 0
});
const model = useAtomValue(selectedModelInfoAtom);
/**
* 重置进度状态
*/
const resetProgress = useCallback(() => {
setTimeout(() => {
setProgress({
total: 0,
completed: 0,
percentage: 0,
questionCount: 0
});
}, 1000); // 延迟重置,让用户看到完成的进度
}, []);
/**
* 处理文件
* @param {Array} files - 文件列表
* @param {string} pdfStrategy - PDF处理策略
* @param {string} selectedViosnModel - 选定的视觉模型
*/
const handleFileProcessing = useCallback(
async (files, pdfStrategy, selectedViosnModel, domainTreeAction) => {
try {
const currentLanguage = i18n.language === 'zh-CN' ? '中文' : 'en';
//获取到视觉策略要使用的模型
const availableModels = JSON.parse(localStorage.getItem('modelConfigList'));
const vsionModel = availableModels.find(m => m.id === selectedViosnModel);
const response = await axios.post(`/api/projects/${projectId}/tasks`, {
taskType: 'file-processing',
modelInfo: model,
language: currentLanguage,
detail: '文件处理任务',
note: {
vsionModel,
projectId,
fileList: files,
strategy: pdfStrategy,
domainTreeAction
}
});
if (response.data?.code !== 0) {
throw new Error(t('textSplit.pdfProcessingFailed') + (response.data?.error || ''));
}
//提示后台任务进行中
toast.success(t('textSplit.pdfProcessingToast'));
} catch (error) {
toast.error(t('textSplit.pdfProcessingFailed') + error.message || '');
}
},
[projectId, t, resetProgress, model]
);
return {
fileProcessing,
progress,
setFileProcessing,
setProgress,
handleFileProcessing,
resetProgress
};
}