import { useState } from "react"; import type { Dataset } from "@/pages/DataManagement/dataset.model"; import { Steps, Card, Select, Input, Checkbox, Button, Badge, Divider, Radio, Form, message, } from "antd"; import { Eye, Trash2, Settings, ArrowLeft, ArrowRight, Play, Edit, Copy, Save, RefreshCw, ChevronDown, ChevronRight, Search, CheckCircle, Code, X, MoreHorizontal, Activity, MessageSquare, Brain, } from "lucide-react"; import { Link, useNavigate } from "react-router"; import DevelopmentInProgress from "@/components/DevelopmentInProgress"; const { TextArea } = Input; export default function SynthesisTaskCreate() { return ; const navigate = useNavigate(); const [form] = Form.useForm(); const [searchQuery, setSearchQuery] = useState(""); const [createStep, setCreateStep] = useState(1); const [selectedFiles, setSelectedFiles] = useState([]); const [datasets] = useState([]); const [files] = useState([]); const [selectedSynthesisTypes, setSelectedSynthesisTypes] = useState< string[] >(["qa_judge"]); const [showDebugCard, setShowDebugCard] = useState(false); const [debugStepId, setDebugStepId] = useState(null); const [expandedTypes, setExpandedTypes] = useState([ "qa", "distillation", ]); // 表单数据 const [formValues, setFormValues] = useState({ name: "", sourceDataset: "", targetCount: 1000, description: "", executionMode: "immediate", scheduleStrategy: "", outputPath: "", enableQualityCheck: false, enableNotification: false, }); const synthesisTypes = [ { id: "qa", name: "生成问答对", icon: MessageSquare, count: 14, expanded: true, description: "基于文本生成各类问答对", children: [ { id: "qa_judge", name: "文字生成问答对_判断题", count: 1, description: "生成判断题形式的问答对", }, { id: "qa_choice", name: "文字生成问答对_选择题", count: 0, description: "生成多选题形式的问答对", }, { id: "qa_fill", name: "文字生成问答对_填空题", count: 0, description: "生成填空题形式的问答对", }, { id: "qa_short", name: "相关文本描述问答对_金融领域", count: 0, description: "金融领域的专业问答对", }, ], }, { id: "distillation", name: "生成蒸馏", icon: Brain, count: 6, expanded: true, description: "知识蒸馏数据生成", children: [ { id: "dist_text", name: "相关文本生成蒸馏", count: 0, description: "基于文本的知识蒸馏", }, { id: "dist_qa", name: "问答数据", count: 0, description: "问答形式的蒸馏数据", }, { id: "dist_instruct", name: "相关指令生成蒸馏问题_few-shot", count: 0, description: "Few-shot指令蒸馏", }, { id: "dist_summary", name: "问答数据为基础蒸馏", count: 0, description: "基于问答数据的蒸馏", }, { id: "dist_reasoning", name: "问答数据为基础高质量", count: 0, description: "高质量推理数据蒸馏", }, ], }, ]; const toggleTypeExpansion = (typeId: string) => { setExpandedTypes((prev) => prev.includes(typeId) ? prev.filter((id) => id !== typeId) : [...prev, typeId] ); }; const handleSynthesisTypeSelect = (typeId: string) => { setSelectedSynthesisTypes((prev) => { if (prev.includes(typeId)) { return prev.filter((id) => id !== typeId); } else { return [...prev, typeId]; } }); }; const handleValuesChange = (_, allValues) => { setFormValues({ ...formValues, ...allValues }); }; const handleSelectAllFiles = () => { const filteredFiles = files.filter((file) => file.name.toLowerCase().includes(searchQuery.toLowerCase()) ); if (selectedFiles.length === filteredFiles.length) { setSelectedFiles([]); } else { setSelectedFiles(filteredFiles.map((file) => file.id)); } }; const handleRemoveSelectedFile = (fileId: string) => { setSelectedFiles(selectedFiles.filter((id) => id !== fileId)); }; const handleCreateTask = async () => { try { const values = await form.validateFields(); if ( !values.name || !values.sourceDataset || selectedFiles.length === 0 || selectedSynthesisTypes.length === 0 || !values.outputPath || !values.targetCount || (values.executionMode === "scheduled" && !values.scheduleStrategy) ) { message.error("请填写所有必填项"); return; } const newTask: SynthesisTask = { id: Date.now(), name: values.name, type: selectedSynthesisTypes[0].includes("qa") ? "qa" : "distillation", status: values.executionMode === "immediate" ? "pending" : "paused", progress: 0, sourceDataset: values.sourceDataset, targetCount: values.targetCount, generatedCount: 0, createdAt: new Date().toISOString().split("T")[0], template: "自动生成模板", estimatedTime: "预计 30 分钟", }; setTasks([newTask, ...tasks]); setShowCreateTask(false); setCreateStep(1); // Reset form form.resetFields(); setSelectedFiles([]); // Auto-start simulation if immediate execution if (values.executionMode === "immediate") { setTimeout(() => { setTasks((prev) => prev.map((task) => task.id === newTask.id ? { ...task, status: "running" } : task ) ); const interval = setInterval(() => { setTasks((prev) => prev.map((task) => { if (task.id === newTask.id && task.status === "running") { const newProgress = Math.min( task.progress + Math.random() * 8 + 2, 100 ); const isCompleted = newProgress >= 100; return { ...task, progress: newProgress, generatedCount: Math.floor( (newProgress / 100) * task.targetCount ), status: isCompleted ? "completed" : "running", estimatedTime: isCompleted ? "已完成" : `剩余 ${Math.ceil((100 - newProgress) / 10)} 分钟`, }; } return task; }) ); }, 1000); setTimeout(() => clearInterval(interval), 12000); }, 1000); } } catch { // 校验失败 } }; const renderCreateTaskPage = () => { if (createStep === 1) { return (

基本信息