first-update
This commit is contained in:
226
easy-dataset-main/components/ExportDatasetDialog.js
Normal file
226
easy-dataset-main/components/ExportDatasetDialog.js
Normal file
@@ -0,0 +1,226 @@
|
||||
// ExportDatasetDialog.js 组件
|
||||
import React, { useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Box, Tabs, Tab } from '@mui/material';
|
||||
|
||||
// 导入拆分后的组件
|
||||
import LocalExportTab from './export/LocalExportTab';
|
||||
import LlamaFactoryTab from './export/LlamaFactoryTab';
|
||||
import HuggingFaceTab from './export/HuggingFaceTab';
|
||||
|
||||
const ExportDatasetDialog = ({ open, onClose, onExport, projectId }) => {
|
||||
const { t } = useTranslation();
|
||||
const [formatType, setFormatType] = useState('alpaca');
|
||||
const [systemPrompt, setSystemPrompt] = useState('');
|
||||
const [reasoningLanguage, setReasoningLanguage] = useState('');
|
||||
const [confirmedOnly, setConfirmedOnly] = useState(false);
|
||||
const [fileFormat, setFileFormat] = useState('json');
|
||||
const [includeCOT, setIncludeCOT] = useState(true);
|
||||
const [currentTab, setCurrentTab] = useState(0);
|
||||
// alpaca 格式特有的设置
|
||||
const [alpacaFieldType, setAlpacaFieldType] = useState('instruction'); // 'instruction' 或 'input'
|
||||
const [customInstruction, setCustomInstruction] = useState(''); // 当选择 input 时使用的自定义 instruction
|
||||
const [customFields, setCustomFields] = useState({
|
||||
questionField: 'instruction',
|
||||
answerField: 'output',
|
||||
cotField: 'complexCOT', // 添加思维链字段名
|
||||
includeLabels: false,
|
||||
includeChunk: false, // 添加是否包含chunk字段
|
||||
questionOnly: false // 添加仅导出问题选项
|
||||
});
|
||||
|
||||
const handleFileFormatChange = event => {
|
||||
setFileFormat(event.target.value);
|
||||
};
|
||||
|
||||
const handleFormatChange = event => {
|
||||
setFormatType(event.target.value);
|
||||
// 根据格式类型设置默认字段名
|
||||
if (event.target.value === 'alpaca') {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
questionField: 'instruction',
|
||||
answerField: 'output'
|
||||
});
|
||||
} else if (event.target.value === 'sharegpt') {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
questionField: 'content',
|
||||
answerField: 'content'
|
||||
});
|
||||
} else if (event.target.value === 'multilingual-thinking') {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
questionField: 'content',
|
||||
answerField: 'content'
|
||||
});
|
||||
} else if (event.target.value === 'custom') {
|
||||
// 自定义格式保持当前值
|
||||
}
|
||||
};
|
||||
|
||||
const handleSystemPromptChange = event => {
|
||||
setSystemPrompt(event.target.value);
|
||||
};
|
||||
|
||||
const handleReasoningLanguageChange = event => {
|
||||
setReasoningLanguage(event.target.value);
|
||||
};
|
||||
const handleConfirmedOnlyChange = event => {
|
||||
setConfirmedOnly(event.target.checked);
|
||||
};
|
||||
|
||||
// 新增处理函数
|
||||
const handleIncludeCOTChange = event => {
|
||||
setIncludeCOT(event.target.checked);
|
||||
};
|
||||
|
||||
const handleCustomFieldChange = field => event => {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
[field]: event.target.value
|
||||
});
|
||||
};
|
||||
|
||||
const handleIncludeLabelsChange = event => {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
includeLabels: event.target.checked
|
||||
});
|
||||
};
|
||||
|
||||
const handleIncludeChunkChange = event => {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
includeChunk: event.target.checked
|
||||
});
|
||||
};
|
||||
|
||||
const handleQuestionOnlyChange = event => {
|
||||
setCustomFields({
|
||||
...customFields,
|
||||
questionOnly: event.target.checked
|
||||
});
|
||||
};
|
||||
|
||||
// 处理 Alpaca 字段类型变更
|
||||
const handleAlpacaFieldTypeChange = event => {
|
||||
setAlpacaFieldType(event.target.value);
|
||||
};
|
||||
|
||||
// 处理自定义 instruction 变更
|
||||
const handleCustomInstructionChange = event => {
|
||||
setCustomInstruction(event.target.value);
|
||||
};
|
||||
|
||||
const handleExport = options => {
|
||||
// 如果 LocalExportTab 传入了完整的导出配置(例如平衡导出),直接使用该配置
|
||||
if (options && typeof options === 'object' && options.balanceMode) {
|
||||
onExport(options);
|
||||
return;
|
||||
}
|
||||
|
||||
// 否则使用当前对话框内的状态组装导出配置
|
||||
onExport({
|
||||
formatType,
|
||||
systemPrompt,
|
||||
reasoningLanguage,
|
||||
confirmedOnly,
|
||||
fileFormat,
|
||||
includeCOT,
|
||||
alpacaFieldType, // 添加 alpaca 字段类型
|
||||
customInstruction, // 添加自定义 instruction
|
||||
customFields: formatType === 'custom' ? customFields : undefined
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog
|
||||
open={open}
|
||||
onClose={onClose}
|
||||
maxWidth="md"
|
||||
fullWidth
|
||||
PaperProps={{
|
||||
sx: {
|
||||
borderRadius: 2
|
||||
}
|
||||
}}
|
||||
>
|
||||
<DialogTitle>{t('export.title')}</DialogTitle>
|
||||
<DialogContent>
|
||||
<Box sx={{ borderBottom: 1, borderColor: 'divider', mb: 2 }}>
|
||||
<Tabs value={currentTab} onChange={(e, newValue) => setCurrentTab(newValue)} aria-label="export tabs">
|
||||
<Tab label={t('export.localTab')} />
|
||||
<Tab label={t('export.llamaFactoryTab')} />
|
||||
<Tab label={t('export.huggingFaceTab')} />
|
||||
</Tabs>
|
||||
</Box>
|
||||
|
||||
{/* 第一个标签页:本地导出 */}
|
||||
{currentTab === 0 && (
|
||||
<LocalExportTab
|
||||
fileFormat={fileFormat}
|
||||
formatType={formatType}
|
||||
systemPrompt={systemPrompt}
|
||||
reasoningLanguage={reasoningLanguage}
|
||||
confirmedOnly={confirmedOnly}
|
||||
includeCOT={includeCOT}
|
||||
customFields={customFields}
|
||||
alpacaFieldType={alpacaFieldType}
|
||||
customInstruction={customInstruction}
|
||||
handleFileFormatChange={handleFileFormatChange}
|
||||
handleFormatChange={handleFormatChange}
|
||||
handleSystemPromptChange={handleSystemPromptChange}
|
||||
handleReasoningLanguageChange={handleReasoningLanguageChange}
|
||||
handleConfirmedOnlyChange={handleConfirmedOnlyChange}
|
||||
handleIncludeCOTChange={handleIncludeCOTChange}
|
||||
handleCustomFieldChange={handleCustomFieldChange}
|
||||
handleIncludeLabelsChange={handleIncludeLabelsChange}
|
||||
handleIncludeChunkChange={handleIncludeChunkChange}
|
||||
handleQuestionOnlyChange={handleQuestionOnlyChange}
|
||||
handleAlpacaFieldTypeChange={handleAlpacaFieldTypeChange}
|
||||
handleCustomInstructionChange={handleCustomInstructionChange}
|
||||
handleExport={handleExport}
|
||||
projectId={projectId}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* 第二个标签页:Llama Factory */}
|
||||
{currentTab === 1 && (
|
||||
<LlamaFactoryTab
|
||||
projectId={projectId}
|
||||
systemPrompt={systemPrompt}
|
||||
reasoningLanguage={reasoningLanguage}
|
||||
confirmedOnly={confirmedOnly}
|
||||
includeCOT={includeCOT}
|
||||
formatType={formatType}
|
||||
handleSystemPromptChange={handleSystemPromptChange}
|
||||
handleReasoningLanguageChange={handleReasoningLanguageChange}
|
||||
handleConfirmedOnlyChange={handleConfirmedOnlyChange}
|
||||
handleIncludeCOTChange={handleIncludeCOTChange}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* 第三个标签页:HuggingFace */}
|
||||
{currentTab === 2 && (
|
||||
<HuggingFaceTab
|
||||
projectId={projectId}
|
||||
systemPrompt={systemPrompt}
|
||||
reasoningLanguage={reasoningLanguage}
|
||||
confirmedOnly={confirmedOnly}
|
||||
includeCOT={includeCOT}
|
||||
formatType={formatType}
|
||||
fileFormat={fileFormat}
|
||||
customFields={customFields}
|
||||
handleSystemPromptChange={handleSystemPromptChange}
|
||||
handleReasoningLanguageChange={handleReasoningLanguageChange}
|
||||
handleConfirmedOnlyChange={handleConfirmedOnlyChange}
|
||||
handleIncludeCOTChange={handleIncludeCOTChange}
|
||||
/>
|
||||
)}
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
|
||||
export default ExportDatasetDialog;
|
||||
Reference in New Issue
Block a user