You've already forked DataMate
add operator create page (#38)
* feat: Update site name to DataMate and refine text for AI data processing * feat: Refactor settings page and implement model access functionality - Created a new ModelAccess component for managing model configurations. - Removed the old Settings component and replaced it with a new SettingsPage component that integrates ModelAccess, SystemConfig, and WebhookConfig. - Added SystemConfig component for managing system settings. - Implemented WebhookConfig component for managing webhook configurations. - Updated API functions for model management in settings.apis.ts. - Adjusted routing to point to the new SettingsPage component. * feat: Implement Data Collection Page with Task Management and Execution Log - Created DataCollectionPage component to manage data collection tasks. - Added TaskManagement and ExecutionLog components for task handling and logging. - Integrated task operations including start, stop, edit, and delete functionalities. - Implemented filtering and searching capabilities in task management. - Introduced SimpleCronScheduler for scheduling tasks with cron expressions. - Updated CreateTask component to utilize new scheduling and template features. - Enhanced BasicInformation component to conditionally render fields based on visibility settings. - Refactored ImportConfiguration component to remove NAS import section. * feat: Update task creation API endpoint and enhance task creation form with new fields and validation * Refactor file upload and operator management components - Removed unnecessary console logs from file download and export functions. - Added size property to TaskItem interface for better task management. - Simplified TaskUpload component by utilizing useFileSliceUpload hook for file upload logic. - Enhanced OperatorPluginCreate component to handle file uploads and parsing more efficiently. - Updated ConfigureStep component to use Ant Design Form for better data handling and validation. - Improved PreviewStep component to navigate back to the operator market. - Added support for additional file types in UploadStep component. - Implemented delete operator functionality in OperatorMarketPage with confirmation prompts. - Cleaned up unused API functions in operator.api.ts to streamline the codebase. - Fixed number formatting utility to handle zero values correctly.
This commit is contained in:
@@ -115,20 +115,15 @@ const MockAPI = {
|
||||
batchEvaluationUsingPost: "/evaluation/batch-evaluate", // 批量评测
|
||||
|
||||
// 知识生成接口
|
||||
queryKnowledgeBasesUsingPost: "/knowledge/bases", // 获取知识库列表
|
||||
createKnowledgeBaseUsingPost: "/knowledge/bases/create", // 创建知识库
|
||||
queryKnowledgeBaseByIdUsingGet: "/knowledge/bases/:baseId", // 根据ID获取知识库详情
|
||||
updateKnowledgeBaseByIdUsingPut: "/knowledge/bases/:baseId", // 更新知识库
|
||||
deleteKnowledgeBaseByIdUsingDelete: "/knowledge/bases/:baseId", // 删除知识库
|
||||
queryKnowledgeGenerationTasksUsingPost: "/knowledge/tasks", // 获取知识生成任务列表
|
||||
createKnowledgeGenerationTaskUsingPost: "/knowledge/tasks/create", // 创建知识生成任务
|
||||
queryKnowledgeGenerationTaskByIdUsingGet: "/knowledge/tasks/:taskId", // 根据ID获取知识生成任务详情
|
||||
updateKnowledgeGenerationTaskByIdUsingPut: "/knowledge/tasks/:taskId", // 更新知识生成任务
|
||||
deleteKnowledgeGenerationTaskByIdUsingDelete: "/knowledge/tasks/:taskId", // 删除知识生成任务
|
||||
executeKnowledgeGenerationTaskByIdUsingPost:
|
||||
"/knowledge/tasks/:taskId/execute", // 执行知识生成任务
|
||||
stopKnowledgeGenerationTaskByIdUsingPost: "/knowledge/tasks/:taskId/stop", // 停止知识生成任务
|
||||
queryKnowledgeStatisticsUsingGet: "/knowledge/statistics", // 获取知识生成
|
||||
queryKnowledgeBasesUsingPost: "/knowledge-base/list", // 获取知识库列表
|
||||
createKnowledgeBaseUsingPost: "/knowledge-base/create", // 创建知识库
|
||||
queryKnowledgeBaseByIdUsingGet: "/knowledge-base/:baseId", // 根据ID获取知识库详情
|
||||
updateKnowledgeBaseByIdUsingPut: "/knowledge-base/:baseId", // 更新知识库
|
||||
deleteKnowledgeBaseByIdUsingDelete: "/knowledge-base/:baseId", // 删除知识库
|
||||
queryKnowledgeGenerationTasksUsingPost: "/knowledge-base/tasks", // 获取知识生成任务列表
|
||||
addKnowledgeGenerationFilesUsingPost: "/knowledge-base/:baseId/files", // 添加文件到知识库
|
||||
queryKnowledgeGenerationFilesByIdUsingGet: "/knowledge-base/:baseId/files/:fileId", // 根据ID获取知识生成文件详情
|
||||
deleteKnowledgeGenerationTaskByIdUsingDelete: "/knowledge-base/:baseId/files", // 删除知识生成文件
|
||||
|
||||
// 算子市场
|
||||
queryOperatorsUsingPost: "/operators/list", // 获取算子列表
|
||||
@@ -137,6 +132,10 @@ const MockAPI = {
|
||||
createOperatorUsingPost: "/operators/create", // 创建算子
|
||||
updateOperatorByIdUsingPut: "/operators/:operatorId", // 更新算子
|
||||
uploadOperatorUsingPost: "/operators/upload", // 上传算子
|
||||
uploadFileChunkUsingPost: "/operators/upload/chunk", // 上传切片
|
||||
preUploadOperatorUsingPost: "/operators/upload/pre-upload", // 预上传文件
|
||||
cancelUploadOperatorUsingPut: "/operators/upload/cancel-upload", // 取消上传
|
||||
|
||||
createLabelUsingPost: "/operators/labels", // 创建算子标签
|
||||
queryLabelsUsingGet: "/labels", // 获取算子标签列表
|
||||
deleteLabelsUsingDelete: "/labels", // 删除算子标签
|
||||
@@ -151,7 +150,6 @@ const MockAPI = {
|
||||
createModelUsingPost: "/models/create", // 创建模型
|
||||
updateModelUsingPut: "/models/:id", // 更新模型
|
||||
deleteModelUsingDelete: "/models/:id", // 删除模型
|
||||
|
||||
};
|
||||
|
||||
module.exports = addMockPrefix("/api", MockAPI);
|
||||
|
||||
161
frontend/src/mock/mock-seed/knowledge-base.cjs
Normal file
161
frontend/src/mock/mock-seed/knowledge-base.cjs
Normal file
@@ -0,0 +1,161 @@
|
||||
const Mock = require("mockjs");
|
||||
const API = require("../mock-apis.cjs");
|
||||
|
||||
// 知识库数据
|
||||
function KnowledgeBaseItem() {
|
||||
return {
|
||||
id: Mock.Random.guid().replace(/[^a-zA-Z0-9]/g, ""),
|
||||
name: Mock.Random.ctitle(5, 15),
|
||||
description: Mock.Random.csentence(10, 30),
|
||||
createdBy: Mock.Random.cname(),
|
||||
updatedBy: Mock.Random.cname(),
|
||||
embeddingModel: Mock.Random.pick([
|
||||
"text-embedding-ada-002",
|
||||
"text-embedding-3-small",
|
||||
"text-embedding-3-large",
|
||||
]),
|
||||
chatModel: Mock.Random.pick(["gpt-3.5-turbo", "gpt-4", "gpt-4-32k"]),
|
||||
createdAt: Mock.Random.datetime("yyyy-MM-dd HH:mm:ss"),
|
||||
updatedAt: Mock.Random.datetime("yyyy-MM-dd HH:mm:ss"),
|
||||
};
|
||||
}
|
||||
|
||||
const knowledgeBaseList = new Array(50).fill(null).map(KnowledgeBaseItem);
|
||||
|
||||
module.exports = function (router) {
|
||||
// 获取知识库列表
|
||||
router.post(API.queryKnowledgeBasesUsingPost, (req, res) => {
|
||||
const { page = 0, size, keyword } = req.body;
|
||||
let filteredList = knowledgeBaseList;
|
||||
if (keyword) {
|
||||
filteredList = knowledgeBaseList.filter(
|
||||
(kb) => kb.name.includes(keyword) || kb.description.includes(keyword)
|
||||
);
|
||||
}
|
||||
const start = page * size;
|
||||
const end = start + size;
|
||||
const totalElements = filteredList.length;
|
||||
const paginatedList = filteredList.slice(start, end);
|
||||
res.send({
|
||||
code: "0",
|
||||
msg: "Success",
|
||||
data: {
|
||||
totalElements,
|
||||
page,
|
||||
size,
|
||||
content: paginatedList,
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
// 创建知识库
|
||||
router.post(API.createKnowledgeBaseUsingPost, (req, res) => {
|
||||
const item = KnowledgeBaseItem();
|
||||
knowledgeBaseList.unshift(item);
|
||||
res.status(201).send(item);
|
||||
});
|
||||
|
||||
// 获取知识库详情
|
||||
router.get(
|
||||
new RegExp(API.queryKnowledgeBaseByIdUsingGet.replace(":baseId", "(\\w+)")),
|
||||
(req, res) => {
|
||||
const id = req.params.baseId;
|
||||
const item =
|
||||
knowledgeBaseList.find((kb) => kb.id === id) || KnowledgeBaseItem();
|
||||
res.send(item);
|
||||
}
|
||||
);
|
||||
|
||||
// 更新知识库
|
||||
router.put(API.updateKnowledgeBaseByIdUsingPut, (req, res) => {
|
||||
const id = req.params.baseId;
|
||||
const idx = knowledgeBaseList.findIndex((kb) => kb.id === id);
|
||||
if (idx >= 0) {
|
||||
knowledgeBaseList[idx] = { ...knowledgeBaseList[idx], ...req.body };
|
||||
res.status(201).send(knowledgeBaseList[idx]);
|
||||
} else {
|
||||
res.status(404).send({ message: "Not found" });
|
||||
}
|
||||
});
|
||||
|
||||
// 删除知识库
|
||||
router.delete(API.deleteKnowledgeBaseByIdUsingDelete, (req, res) => {
|
||||
const id = req.params.baseId;
|
||||
const idx = knowledgeBaseList.findIndex((kb) => kb.id === id);
|
||||
if (idx >= 0) {
|
||||
knowledgeBaseList.splice(idx, 1);
|
||||
res.status(201).send({ success: true });
|
||||
} else {
|
||||
res.status(404).send({ message: "Not found" });
|
||||
}
|
||||
});
|
||||
|
||||
// 获取知识生成任务列表
|
||||
router.post(API.queryKnowledgeGenerationTasksUsingPost, (req, res) => {
|
||||
const tasks = Mock.mock({
|
||||
"data|10": [
|
||||
{
|
||||
id: "@guid",
|
||||
name: "@ctitle(5,15)",
|
||||
status: '@pick(["pending","running","success","failed"])',
|
||||
createdAt: "@datetime",
|
||||
updatedAt: "@datetime",
|
||||
progress: "@integer(0,100)",
|
||||
},
|
||||
],
|
||||
total: 10,
|
||||
current: 1,
|
||||
pageSize: 10,
|
||||
});
|
||||
res.send(tasks);
|
||||
});
|
||||
|
||||
// 添加文件到知识库
|
||||
router.post(
|
||||
new RegExp(
|
||||
API.addKnowledgeGenerationFilesUsingPost.replace(":baseId", "(\\w+)")
|
||||
),
|
||||
(req, res) => {
|
||||
const file = Mock.mock({
|
||||
id: "@guid",
|
||||
name: "@ctitle(5,15)",
|
||||
size: "@integer(1000,1000000)",
|
||||
status: "uploaded",
|
||||
createdAt: "@datetime",
|
||||
});
|
||||
res.status(201).send(file);
|
||||
}
|
||||
);
|
||||
|
||||
// 获取知识生成文件详情
|
||||
router.get(
|
||||
new RegExp(
|
||||
API.queryKnowledgeGenerationFilesByIdUsingGet
|
||||
.replace(":baseId", "(\\w+)")
|
||||
.replace(":fileId", "(\\w+)")
|
||||
),
|
||||
(req, res) => {
|
||||
const file = Mock.mock({
|
||||
id: req.params.fileId,
|
||||
name: "@ctitle(5,15)",
|
||||
size: "@integer(1000,1000000)",
|
||||
status: "uploaded",
|
||||
createdAt: "@datetime",
|
||||
});
|
||||
res.send(file);
|
||||
}
|
||||
);
|
||||
|
||||
// 删除知识生成文件
|
||||
router.delete(
|
||||
new RegExp(
|
||||
API.deleteKnowledgeGenerationTaskByIdUsingDelete.replace(
|
||||
":baseId",
|
||||
"(\\w+)"
|
||||
)
|
||||
),
|
||||
(req, res) => {
|
||||
res.send({ success: true });
|
||||
}
|
||||
);
|
||||
};
|
||||
@@ -34,6 +34,32 @@ function labelItem() {
|
||||
const labelList = new Array(50).fill(null).map(labelItem);
|
||||
|
||||
module.exports = function (router) {
|
||||
router.post(API.preUploadOperatorUsingPost, (req, res) => {
|
||||
res.status(201).send(Mock.Random.guid());
|
||||
});
|
||||
|
||||
// 上传切片
|
||||
router.post(API.uploadFileChunkUsingPost, (req, res) => {
|
||||
// res.status(500).send({ message: "Simulated upload failure" });
|
||||
res.status(201).send({ data: "success" });
|
||||
});
|
||||
|
||||
// 取消上传
|
||||
router.put(API.cancelUploadOperatorUsingPut, (req, res) => {
|
||||
res.status(201).send({ data: "success" });
|
||||
});
|
||||
|
||||
router.post(API.uploadOperatorUsingPost, (req, res) => {
|
||||
res.status(201).send({
|
||||
code: "0",
|
||||
msg: "Upload successful",
|
||||
data: {
|
||||
operatorId: Mock.Random.guid().replace(/[^a-zA-Z0-9]/g, ""),
|
||||
// 其他返回数据
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
// 获取算子标签列表
|
||||
router.get(API.queryLabelsUsingGet, (req, res) => {
|
||||
const { page = 0, size = 20, keyword = "" } = req.query;
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
export const mockOperators: Operator[] = [
|
||||
{
|
||||
id: 1,
|
||||
name: "图像预处理算子",
|
||||
version: "1.2.0",
|
||||
description:
|
||||
"支持图像缩放、裁剪、旋转、颜色空间转换等常用预处理操作,优化了内存使用和处理速度",
|
||||
author: "张三",
|
||||
category: "图像处理",
|
||||
modality: ["image"],
|
||||
type: "preprocessing",
|
||||
tags: ["图像处理", "预处理", "缩放", "裁剪", "旋转"],
|
||||
createdAt: "2024-01-15",
|
||||
lastModified: "2024-01-23",
|
||||
status: "active",
|
||||
isFavorited: true,
|
||||
downloads: 1247,
|
||||
usage: 856,
|
||||
framework: "PyTorch",
|
||||
language: "Python",
|
||||
size: "2.3MB",
|
||||
dependencies: ["opencv-python", "pillow", "numpy"],
|
||||
inputFormat: ["jpg", "png", "bmp", "tiff"],
|
||||
outputFormat: ["jpg", "png", "tensor"],
|
||||
performance: {
|
||||
accuracy: 99.5,
|
||||
speed: "50ms/image",
|
||||
memory: "128MB",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "文本分词算子",
|
||||
version: "2.1.3",
|
||||
description:
|
||||
"基于深度学习的中文分词算子,支持自定义词典,在医学文本上表现优异",
|
||||
author: "李四",
|
||||
category: "自然语言处理",
|
||||
modality: ["text"],
|
||||
type: "preprocessing",
|
||||
tags: ["文本处理", "分词", "中文", "NLP", "医学"],
|
||||
createdAt: "2024-01-10",
|
||||
lastModified: "2024-01-20",
|
||||
status: "active",
|
||||
isFavorited: false,
|
||||
downloads: 892,
|
||||
usage: 634,
|
||||
framework: "TensorFlow",
|
||||
language: "Python",
|
||||
size: "15.6MB",
|
||||
dependencies: ["tensorflow", "jieba", "transformers"],
|
||||
inputFormat: ["txt", "json", "csv"],
|
||||
outputFormat: ["json", "txt"],
|
||||
performance: {
|
||||
accuracy: 96.8,
|
||||
speed: "10ms/sentence",
|
||||
memory: "256MB",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "音频特征提取",
|
||||
version: "1.0.5",
|
||||
description: "提取音频的MFCC、梅尔频谱、色度等特征,支持多种音频格式",
|
||||
author: "王五",
|
||||
category: "音频处理",
|
||||
modality: ["audio"],
|
||||
type: "preprocessing",
|
||||
tags: ["音频处理", "特征提取", "MFCC", "频谱分析"],
|
||||
createdAt: "2024-01-08",
|
||||
lastModified: "2024-01-18",
|
||||
status: "active",
|
||||
isFavorited: true,
|
||||
downloads: 456,
|
||||
usage: 312,
|
||||
framework: "PyTorch",
|
||||
language: "Python",
|
||||
size: "8.9MB",
|
||||
dependencies: ["librosa", "scipy", "numpy"],
|
||||
inputFormat: ["wav", "mp3", "flac", "m4a"],
|
||||
outputFormat: ["npy", "json", "csv"],
|
||||
performance: {
|
||||
speed: "2x实时",
|
||||
memory: "64MB",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
name: "视频帧提取算子",
|
||||
version: "1.3.2",
|
||||
description: "高效的视频帧提取算子,支持关键帧检测和均匀采样",
|
||||
author: "赵六",
|
||||
category: "视频处理",
|
||||
modality: ["video"],
|
||||
type: "preprocessing",
|
||||
tags: ["视频处理", "帧提取", "关键帧", "采样"],
|
||||
createdAt: "2024-01-05",
|
||||
lastModified: "2024-01-22",
|
||||
status: "active",
|
||||
isFavorited: false,
|
||||
downloads: 723,
|
||||
usage: 445,
|
||||
framework: "OpenCV",
|
||||
language: "Python",
|
||||
size: "12.4MB",
|
||||
dependencies: ["opencv-python", "ffmpeg-python"],
|
||||
inputFormat: ["mp4", "avi", "mov", "mkv"],
|
||||
outputFormat: ["jpg", "png", "npy"],
|
||||
performance: {
|
||||
speed: "30fps处理",
|
||||
memory: "512MB",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
name: "多模态融合算子",
|
||||
version: "2.0.1",
|
||||
description: "支持文本、图像、音频多模态数据融合的深度学习算子",
|
||||
author: "孙七",
|
||||
category: "多模态处理",
|
||||
modality: ["text", "image", "audio"],
|
||||
type: "training",
|
||||
tags: ["多模态", "融合", "深度学习", "注意力机制"],
|
||||
createdAt: "2024-01-12",
|
||||
lastModified: "2024-01-21",
|
||||
status: "beta",
|
||||
isFavorited: false,
|
||||
downloads: 234,
|
||||
usage: 156,
|
||||
framework: "PyTorch",
|
||||
language: "Python",
|
||||
size: "45.2MB",
|
||||
dependencies: ["torch", "transformers", "torchvision", "torchaudio"],
|
||||
inputFormat: ["json", "jpg", "wav"],
|
||||
outputFormat: ["tensor", "json"],
|
||||
performance: {
|
||||
accuracy: 94.2,
|
||||
speed: "100ms/sample",
|
||||
memory: "2GB",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
name: "模型推理加速",
|
||||
version: "1.1.0",
|
||||
description: "基于TensorRT的模型推理加速算子,支持多种深度学习框架",
|
||||
author: "周八",
|
||||
category: "模型优化",
|
||||
modality: ["image", "text"],
|
||||
type: "inference",
|
||||
tags: ["推理加速", "TensorRT", "优化", "GPU"],
|
||||
createdAt: "2024-01-03",
|
||||
lastModified: "2024-01-19",
|
||||
status: "active",
|
||||
isFavorited: true,
|
||||
downloads: 567,
|
||||
usage: 389,
|
||||
framework: "TensorRT",
|
||||
language: "Python",
|
||||
size: "23.7MB",
|
||||
dependencies: ["tensorrt", "pycuda", "numpy"],
|
||||
inputFormat: ["onnx", "pb", "pth"],
|
||||
outputFormat: ["tensor", "json"],
|
||||
performance: {
|
||||
speed: "5x加速",
|
||||
memory: "减少40%",
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
name: "数据增强算子",
|
||||
version: "1.4.1",
|
||||
description: "丰富的数据增强策略,包括几何变换、颜色变换、噪声添加等",
|
||||
author: "吴九",
|
||||
category: "数据增强",
|
||||
modality: ["image"],
|
||||
type: "preprocessing",
|
||||
tags: ["数据增强", "几何变换", "颜色变换", "噪声"],
|
||||
createdAt: "2024-01-01",
|
||||
lastModified: "2024-01-17",
|
||||
status: "active",
|
||||
isFavorited: false,
|
||||
downloads: 934,
|
||||
usage: 678,
|
||||
framework: "Albumentations",
|
||||
language: "Python",
|
||||
size: "6.8MB",
|
||||
dependencies: ["albumentations", "opencv-python", "numpy"],
|
||||
inputFormat: ["jpg", "png", "bmp"],
|
||||
outputFormat: ["jpg", "png", "npy"],
|
||||
performance: {
|
||||
speed: "20ms/image",
|
||||
memory: "32MB",
|
||||
},
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user