4.0 KiB
4.0 KiB
Operator Market Service - Python Implementation
概述
这是 operator-market-service 的 Python 实现,已集成到 runtime/deepdata-python 项目中。
功能
- 算子管理:创建、查询、更新、删除算子
- 分类管理:树状分类结构查询
- 文件上传:支持算子文件上传和解析(支持 tar/zip 格式)
- MCP 工具集成:通过 fastapi-mcp 提供 MCP 工具接口
目录结构
app/module/operator_market/
├── __init__.py # 模块入口
├── constants.py # 常量定义
├── exceptions.py # 异常定义
├── schema/ # Pydantic Schema 定义
│ ├── __init__.py
│ ├── operator.py # 算子相关 Schema
│ ├── category.py # 分类相关 Schema
│ └── release.py # 发布版本 Schema
├── parsers/ # 文件解析器
│ ├── __init__.py
│ ├── abstract_parser.py # 抽象解析器基类
│ ├── tar_parser.py # TAR 文件解析器
│ ├── zip_parser.py # ZIP 文件解析器
│ └── parser_holder.py # 解析器持有者
├── repository/ # 数据访问层
│ ├── __init__.py
│ ├── operator_repository.py
│ ├── category_repository.py
│ ├── category_relation_repository.py
│ └── operator_release_repository.py
├── service/ # 服务层
│ ├── __init__.py
│ ├── operator_service.py
│ └── category_service.py
└── interface/ # API 接口层
├── __init__.py
├── operator_routes.py
└── category_routes.py
API 端点
算子相关 (/api/operator-market/operators)
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /list |
查询算子列表(支持分页、分类过滤、关键词搜索) |
| GET | /{operator_id} |
获取算子详情 |
| PUT | /{operator_id} |
更新算子信息 |
| POST | /create |
创建新算子 |
| POST | /upload |
上传算子文件 |
| POST | /upload/pre-upload |
预上传(获取请求 ID) |
| POST | /upload/chunk |
分块上传 |
| DELETE | /{operator_id} |
删除算子 |
| GET | /examples/download |
下载示例算子 |
分类相关 (/api/operator-market/categories)
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /tree |
获取分类树状结构 |
数据库表
t_operator- 算子表t_operator_category- 分类表t_operator_category_relation- 分类关系表t_operator_release- 算子发布版本表v_operator- 算子视图(包含分类信息)
文件格式支持
算子文件需包含 metadata.yml 文件,格式如下:
raw_id: "operator-id"
name: "算子名称"
description: "算子描述"
version: "1.0.0"
language: "python" # python, java
modal: "text" # text, image, audio, video
vendor: "deepdata" # deepdata, data-juicer, or other
inputs: {...}
outputs: {...}
runtime: {...}
settings: {...}
metrics: {...}
release:
- "更新日志1"
- "更新日志2"
待实现功能
- 算子收藏功能完善
- 标签过滤功能
使用示例
查询算子列表
curl -X POST "http://localhost:18000/api/operator-market/operators/list" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"size": 10,
"keyword": "test",
"isStar": false
}'
获取分类树
curl -X GET "http://localhost:18000/api/operator-market/categories/tree"
创建算子
curl -X POST "http://localhost:18000/api/operator-market/operators/create" \
-H "Content-Type: application/json" \
-d '{
"id": "new-operator-id",
"name": "新算子",
"description": "这是一个新算子",
"version": "1.0.0",
"fileName": "operator.tar"
}'