ft_wyt #6
16
README.md
16
README.md
@@ -58,15 +58,15 @@ pip install -r requirements.txt
|
|||||||
uvicorn app.main:app --reload --port 17861
|
uvicorn app.main:app --reload --port 17861
|
||||||
```
|
```
|
||||||
|
|
||||||
默认 API 前缀为 `/api`,例如:
|
默认接口前缀为 `/modelTF`,例如:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
GET /api/health
|
GET /modelTF/health
|
||||||
POST /api/login
|
POST /modelTF/login
|
||||||
GET /api/model-manage
|
GET /modelTF/model-manage
|
||||||
GET /api/dataset-manage
|
GET /modelTF/dataset-manage
|
||||||
GET /api/fine-tune
|
GET /modelTF/fine-tune
|
||||||
GET /api/compute/nodes
|
GET /modelTF/compute/nodes
|
||||||
```
|
```
|
||||||
|
|
||||||
本地运行时默认数据库路径:
|
本地运行时默认数据库路径:
|
||||||
@@ -83,7 +83,7 @@ npm install
|
|||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
前端开发服务默认运行在 `http://localhost:16801`,并通过 Vite proxy 将 `/api` 转发到 `http://localhost:17861`。
|
前端开发服务默认运行在 `http://localhost:16801`,并通过 Vite proxy 将 `/modelTF` 转发到 `http://localhost:17861`。
|
||||||
|
|
||||||
## 算力服务启动
|
## 算力服务启动
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
backend/
|
backend/
|
||||||
app/
|
app/
|
||||||
main.py # FastAPI 应用入口
|
main.py # FastAPI 应用入口
|
||||||
api/v1/ # 对前端暴露的 API 路由
|
api/v1/ # 对前端暴露的 接口路由
|
||||||
core/ # 配置、日志、中间件、权限等基础能力
|
core/ # 配置、日志、中间件、权限等基础能力
|
||||||
db/ # 数据库连接、迁移集成、事务工具
|
db/ # 数据库连接、迁移集成、事务工具
|
||||||
modules/ # 业务模块
|
modules/ # 业务模块
|
||||||
@@ -48,7 +48,7 @@ uvicorn app.main:app --reload
|
|||||||
健康检查:
|
健康检查:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
GET /api/v1/health
|
GET /modelTF/health
|
||||||
```
|
```
|
||||||
|
|
||||||
## 日志
|
## 日志
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ def _int_env(name: str, default: int) -> int:
|
|||||||
class Settings:
|
class Settings:
|
||||||
app_name: str = os.getenv("APP_NAME", "YG Fine-Tune Platform API")
|
app_name: str = os.getenv("APP_NAME", "YG Fine-Tune Platform API")
|
||||||
app_env: str = os.getenv("APP_ENV", "local")
|
app_env: str = os.getenv("APP_ENV", "local")
|
||||||
api_prefix: str = os.getenv("API_PREFIX", "/api")
|
route_prefix: str = os.getenv("MODELTF_ROUTE_PREFIX", "/modelTF")
|
||||||
app_mode: str = os.getenv("APP_MODE", "local")
|
app_mode: str = os.getenv("APP_MODE", "local")
|
||||||
local_db_path: str = os.getenv("LOCAL_DB_PATH", "./runtime/platform.db")
|
local_db_path: str = os.getenv("LOCAL_DB_PATH", "./runtime/platform.db")
|
||||||
compute_mode: str = os.getenv("COMPUTE_MODE", "simulator")
|
compute_mode: str = os.getenv("COMPUTE_MODE", "simulator")
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ def create_app() -> FastAPI:
|
|||||||
|
|
||||||
app = FastAPI(title=settings.app_name)
|
app = FastAPI(title=settings.app_name)
|
||||||
setup_request_logging(app)
|
setup_request_logging(app)
|
||||||
app.include_router(api_router, prefix=settings.api_prefix)
|
app.include_router(api_router, prefix=settings.route_prefix)
|
||||||
return app
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from compute.engines.llama_factory.adapter import build_command, parse_log_line
|
|||||||
def create_app() -> FastAPI:
|
def create_app() -> FastAPI:
|
||||||
app = FastAPI(title="YG Fine-Tune Compute API")
|
app = FastAPI(title="YG Fine-Tune Compute API")
|
||||||
jobs: dict[str, dict[str, Any]] = {}
|
jobs: dict[str, dict[str, Any]] = {}
|
||||||
|
route_prefix = os.getenv("MODELTF_ROUTE_PREFIX", "/modelTF").rstrip("/") or "/modelTF"
|
||||||
|
|
||||||
def now() -> float:
|
def now() -> float:
|
||||||
return time.time()
|
return time.time()
|
||||||
@@ -101,14 +102,14 @@ def create_app() -> FastAPI:
|
|||||||
)
|
)
|
||||||
return gpus
|
return gpus
|
||||||
|
|
||||||
@app.get("/health")
|
@app.get(f"{route_prefix}/health")
|
||||||
async def health_check() -> dict[str, str]:
|
async def health_check() -> dict[str, str]:
|
||||||
return {
|
return {
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
"compute_host_id": os.getenv("COMPUTE_HOST_ID", "unknown"),
|
"compute_host_id": os.getenv("COMPUTE_HOST_ID", "unknown"),
|
||||||
}
|
}
|
||||||
|
|
||||||
@app.get("/api/v1/compute/health")
|
@app.get(f"{route_prefix}/v1/compute/health")
|
||||||
async def compute_health_check() -> dict[str, str | bool]:
|
async def compute_health_check() -> dict[str, str | bool]:
|
||||||
data_root = Path(os.getenv("YG_FT_DATA_ROOT", "/data/yg-ft"))
|
data_root = Path(os.getenv("YG_FT_DATA_ROOT", "/data/yg-ft"))
|
||||||
llama_factory_home = Path(os.getenv("LLAMA_FACTORY_HOME", "/app/LLaMA-Factory"))
|
llama_factory_home = Path(os.getenv("LLAMA_FACTORY_HOME", "/app/LLaMA-Factory"))
|
||||||
@@ -122,15 +123,15 @@ def create_app() -> FastAPI:
|
|||||||
"llama_factory_home_exists": llama_factory_home.exists(),
|
"llama_factory_home_exists": llama_factory_home.exists(),
|
||||||
}
|
}
|
||||||
|
|
||||||
@app.get("/api/v1/compute/jobs")
|
@app.get(f"{route_prefix}/v1/compute/jobs")
|
||||||
async def list_jobs_alias() -> dict[str, list[dict[str, Any]]]:
|
async def list_jobs_alias() -> dict[str, list[dict[str, Any]]]:
|
||||||
return {"items": [job_status(job) for job in jobs.values()]}
|
return {"items": [job_status(job) for job in jobs.values()]}
|
||||||
|
|
||||||
@app.get("/compute/resources/gpus")
|
@app.get(f"{route_prefix}/compute/resources/gpus")
|
||||||
async def list_gpus() -> dict[str, Any]:
|
async def list_gpus() -> dict[str, Any]:
|
||||||
return {"items": gpu_resources(), "compute_host_id": host_id()}
|
return {"items": gpu_resources(), "compute_host_id": host_id()}
|
||||||
|
|
||||||
@app.post("/compute/jobs")
|
@app.post(f"{route_prefix}/compute/jobs")
|
||||||
async def create_job(payload: dict[str, Any]) -> dict[str, Any]:
|
async def create_job(payload: dict[str, Any]) -> dict[str, Any]:
|
||||||
try:
|
try:
|
||||||
command = build_command(payload, os.getenv("LLAMA_FACTORY_HOME", "/app/LLaMA-Factory"))
|
command = build_command(payload, os.getenv("LLAMA_FACTORY_HOME", "/app/LLaMA-Factory"))
|
||||||
@@ -153,18 +154,18 @@ def create_app() -> FastAPI:
|
|||||||
jobs[job_id] = job
|
jobs[job_id] = job
|
||||||
return job_status(job)
|
return job_status(job)
|
||||||
|
|
||||||
@app.get("/compute/jobs")
|
@app.get(f"{route_prefix}/compute/jobs")
|
||||||
async def list_jobs() -> dict[str, Any]:
|
async def list_jobs() -> dict[str, Any]:
|
||||||
return {"items": [job_status(job) for job in jobs.values()]}
|
return {"items": [job_status(job) for job in jobs.values()]}
|
||||||
|
|
||||||
@app.get("/compute/jobs/{job_id}")
|
@app.get(f"{route_prefix}/compute/jobs/{{job_id}}")
|
||||||
async def get_job(job_id: str) -> dict[str, Any]:
|
async def get_job(job_id: str) -> dict[str, Any]:
|
||||||
job = jobs.get(job_id)
|
job = jobs.get(job_id)
|
||||||
if not job:
|
if not job:
|
||||||
raise HTTPException(status_code=404, detail="job not found")
|
raise HTTPException(status_code=404, detail="job not found")
|
||||||
return job_status(job)
|
return job_status(job)
|
||||||
|
|
||||||
@app.post("/compute/jobs/{job_id}/stop")
|
@app.post(f"{route_prefix}/compute/jobs/{{job_id}}/stop")
|
||||||
async def stop_job(job_id: str) -> dict[str, Any]:
|
async def stop_job(job_id: str) -> dict[str, Any]:
|
||||||
job = jobs.get(job_id)
|
job = jobs.get(job_id)
|
||||||
if not job:
|
if not job:
|
||||||
@@ -173,7 +174,7 @@ def create_app() -> FastAPI:
|
|||||||
job["progress"] = min(job.get("progress", 0), 99)
|
job["progress"] = min(job.get("progress", 0), 99)
|
||||||
return job
|
return job
|
||||||
|
|
||||||
@app.get("/compute/jobs/{job_id}/logs")
|
@app.get(f"{route_prefix}/compute/jobs/{{job_id}}/logs")
|
||||||
async def job_logs(job_id: str) -> dict[str, Any]:
|
async def job_logs(job_id: str) -> dict[str, Any]:
|
||||||
job = jobs.get(job_id)
|
job = jobs.get(job_id)
|
||||||
if not job:
|
if not job:
|
||||||
@@ -182,14 +183,14 @@ def create_app() -> FastAPI:
|
|||||||
metrics = [parse_log_line(line) for line in job["logs"].splitlines()]
|
metrics = [parse_log_line(line) for line in job["logs"].splitlines()]
|
||||||
return {"job_id": job_id, "content": job["logs"], "metrics": [m for m in metrics if m]}
|
return {"job_id": job_id, "content": job["logs"], "metrics": [m for m in metrics if m]}
|
||||||
|
|
||||||
@app.post("/compute/files/upload")
|
@app.post(f"{route_prefix}/compute/files/upload")
|
||||||
async def upload_file(payload: dict[str, Any]) -> dict[str, Any]:
|
async def upload_file(payload: dict[str, Any]) -> dict[str, Any]:
|
||||||
file_id = str(payload.get("id") or f"file_{int(now() * 1000)}")
|
file_id = str(payload.get("id") or f"file_{int(now() * 1000)}")
|
||||||
return {"id": file_id, "status": "available", "local_path": f"/data/yg-ft/uploads/{file_id}"}
|
return {"id": file_id, "status": "available", "local_path": f"/data/yg-ft/uploads/{file_id}"}
|
||||||
|
|
||||||
@app.get("/compute/files/{file_id}/download")
|
@app.get(f"{route_prefix}/compute/files/{{file_id}}/download")
|
||||||
async def download_file(file_id: str) -> dict[str, Any]:
|
async def download_file(file_id: str) -> dict[str, Any]:
|
||||||
return {"id": file_id, "status": "ready", "download_url": f"/compute/files/{file_id}/download"}
|
return {"id": file_id, "status": "ready", "download_url": f"{route_prefix}/compute/files/{file_id}/download"}
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
| 镜像 | 用途 |
|
| 镜像 | 用途 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `python:3.12-slim` | 应用后端基础镜像,后端运行环境要求 Python 3.12 及以上 |
|
| `python:3.12-slim` | 应用后端基础镜像,后端运行环境要求 Python 3.12 及以上 |
|
||||||
| `nginx:1.27-alpine` | 前端静态资源与 `/api` 反向代理运行镜像 |
|
| `nginx:1.27-alpine` | 前端静态资源与 `/modelTF` 反向代理运行镜像 |
|
||||||
| `hiyouga/llamafactory:latest` | 算力服务基础镜像,基于 LLaMA-Factory 官方镜像扩展 Compute API |
|
| `hiyouga/llamafactory:latest` | 算力服务基础镜像,基于 LLaMA-Factory 官方镜像扩展 Compute API |
|
||||||
| `postgres:16-alpine` | 开发阶段内置 PostgreSQL |
|
| `postgres:16-alpine` | 开发阶段内置 PostgreSQL |
|
||||||
| `redis:7-alpine` | 开发阶段内置 Redis |
|
| `redis:7-alpine` | 开发阶段内置 Redis |
|
||||||
@@ -152,8 +152,8 @@ docker compose up -d
|
|||||||
健康检查:
|
健康检查:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
GET http://<compute-server-ip>:19100/health
|
GET http://<compute-server-ip>:19100/modelTF/health
|
||||||
GET http://<compute-server-ip>:19100/api/v1/compute/health
|
GET http://<compute-server-ip>:19100/modelTF/v1/compute/health
|
||||||
```
|
```
|
||||||
|
|
||||||
算力侧代码和数据外挂:
|
算力侧代码和数据外挂:
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
APP_ENV=prod
|
APP_ENV=prod
|
||||||
APP_NAME=YG Fine-Tune Platform API
|
APP_NAME=YG Fine-Tune Platform API
|
||||||
API_PREFIX=/api
|
MODELTF_ROUTE_PREFIX=/modelTF
|
||||||
|
|
||||||
FRONTEND_IMAGE=yg-ft-frontend-runtime:latest
|
FRONTEND_IMAGE=yg-ft-frontend-runtime:latest
|
||||||
BACKEND_API_IMAGE=yg-ft-backend-api:latest
|
BACKEND_API_IMAGE=yg-ft-backend-api:latest
|
||||||
@@ -30,7 +30,7 @@ LOG_ERROR_FILE_PREFIX=error
|
|||||||
LOG_MAX_BYTES=20971520
|
LOG_MAX_BYTES=20971520
|
||||||
LOG_RETENTION_DAYS=10
|
LOG_RETENTION_DAYS=10
|
||||||
|
|
||||||
API_PROXY_PASS=http://backend-api:8000
|
BACKEND_PROXY_PASS=http://backend-api:8000
|
||||||
|
|
||||||
# Split deployment: set these to the compute server address, for example http://10.10.20.31:19100.
|
# Split deployment: set these to the compute server address, for example http://10.10.20.31:19100.
|
||||||
COMPUTE_API_BASE_URL=http://compute-api:9100
|
COMPUTE_API_BASE_URL=http://compute-api:9100
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "${FRONTEND_PORT:-16801}:80"
|
- "${FRONTEND_PORT:-16801}:80"
|
||||||
environment:
|
environment:
|
||||||
API_PROXY_PASS: ${API_PROXY_PASS:-http://backend-api:8000}
|
BACKEND_PROXY_PASS: ${BACKEND_PROXY_PASS:-http://backend-api:8000}
|
||||||
volumes:
|
volumes:
|
||||||
- ../../frontend/dist:/usr/share/nginx/html:ro
|
- ../../frontend/dist:/usr/share/nginx/html:ro
|
||||||
- ../nginx.conf.template:/etc/nginx/templates/default.conf.template:ro
|
- ../nginx.conf.template:/etc/nginx/templates/default.conf.template:ro
|
||||||
@@ -31,7 +31,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
APP_ENV: ${APP_ENV:-prod}
|
APP_ENV: ${APP_ENV:-prod}
|
||||||
APP_NAME: ${APP_NAME:-YG Fine-Tune Platform API}
|
APP_NAME: ${APP_NAME:-YG Fine-Tune Platform API}
|
||||||
API_PREFIX: ${API_PREFIX:-/api}
|
MODELTF_ROUTE_PREFIX: ${MODELTF_ROUTE_PREFIX:-/modelTF}
|
||||||
DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://yg_ft:change_me@postgres:5432/yg_ft}
|
DATABASE_URL: ${DATABASE_URL:-postgresql+asyncpg://yg_ft:change_me@postgres:5432/yg_ft}
|
||||||
REDIS_URL: ${REDIS_URL:-redis://redis:6379/0}
|
REDIS_URL: ${REDIS_URL:-redis://redis:6379/0}
|
||||||
USE_BUILTIN_POSTGRES: ${USE_BUILTIN_POSTGRES:-true}
|
USE_BUILTIN_POSTGRES: ${USE_BUILTIN_POSTGRES:-true}
|
||||||
@@ -56,7 +56,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- yg-ft-app
|
- yg-ft-app
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/api/v1/health', timeout=3).read()\""]
|
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/modelTF/health', timeout=3).read()\""]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
COMPUTE_ENV=prod
|
COMPUTE_ENV=prod
|
||||||
COMPUTE_HOST_ID=gpu-node-01
|
COMPUTE_HOST_ID=gpu-node-01
|
||||||
|
MODELTF_ROUTE_PREFIX=/modelTF
|
||||||
# Five-digit host ports exposed outside the compute server.
|
# Five-digit host ports exposed outside the compute server.
|
||||||
COMPUTE_API_PORT=19100
|
COMPUTE_API_PORT=19100
|
||||||
FILE_GATEWAY_PORT=19101
|
FILE_GATEWAY_PORT=19101
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
COMPUTE_ENV: ${COMPUTE_ENV:-prod}
|
COMPUTE_ENV: ${COMPUTE_ENV:-prod}
|
||||||
COMPUTE_HOST_ID: ${COMPUTE_HOST_ID:-gpu-node-01}
|
COMPUTE_HOST_ID: ${COMPUTE_HOST_ID:-gpu-node-01}
|
||||||
|
MODELTF_ROUTE_PREFIX: ${MODELTF_ROUTE_PREFIX:-/modelTF}
|
||||||
COMPUTE_SERVICE_TOKEN: ${COMPUTE_SERVICE_TOKEN:-change_me}
|
COMPUTE_SERVICE_TOKEN: ${COMPUTE_SERVICE_TOKEN:-change_me}
|
||||||
ENABLE_APP_CALLBACK: ${ENABLE_APP_CALLBACK:-false}
|
ENABLE_APP_CALLBACK: ${ENABLE_APP_CALLBACK:-false}
|
||||||
LLAMA_FACTORY_HOME: ${LLAMA_FACTORY_HOME:-/app/LLaMA-Factory}
|
LLAMA_FACTORY_HOME: ${LLAMA_FACTORY_HOME:-/app/LLaMA-Factory}
|
||||||
@@ -25,7 +26,7 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- yg-ft-compute
|
- yg-ft-compute
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:9100/health', timeout=3).read()\""]
|
test: ["CMD-SHELL", "python -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:9100/modelTF/health', timeout=3).read()\""]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ server {
|
|||||||
try_files $uri $uri/ /index.html;
|
try_files $uri $uri/ /index.html;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /api {
|
location /modelTF {
|
||||||
proxy_pass ${API_PROXY_PASS};
|
proxy_pass ${BACKEND_PROXY_PASS};
|
||||||
proxy_http_version 1.1;
|
proxy_http_version 1.1;
|
||||||
proxy_set_header Host $host;
|
proxy_set_header Host $host;
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
@@ -27,4 +27,4 @@ server {
|
|||||||
expires 30d;
|
expires 30d;
|
||||||
add_header Cache-Control "public, immutable";
|
add_header Cache-Control "public, immutable";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 模型微调平台后端接口设计
|
# 模型微调平台后端接口设计
|
||||||
|
|
||||||
> 后端建议使用 FastAPI,统一挂载 `/api` 前缀。本文根据当前 Vue 前端路由、API 模块、mock 数据和页面交互反推接口,并补充完整微调平台必须具备的用户中心、权限控制、审计、异步任务、文件版本与监控能力。
|
> 后端建议使用 FastAPI,统一挂载 `/modelTF` 前缀。本文根据当前 Vue 前端路由、API 模块、mock 数据和页面交互反推接口,并补充完整微调平台必须具备的用户中心、权限控制、审计、异步任务、文件版本与监控能力。
|
||||||
|
|
||||||
## 1. 通用约定
|
## 1. 通用约定
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 2.1 登录
|
### 2.1 登录
|
||||||
|
|
||||||
`POST /api/login`
|
`POST /modelTF/login`
|
||||||
|
|
||||||
请求:
|
请求:
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 2.2 当前用户
|
### 2.2 当前用户
|
||||||
|
|
||||||
`GET /api/me`
|
`GET /modelTF/me`
|
||||||
|
|
||||||
用于刷新页面后恢复用户信息和权限,避免完全依赖 localStorage。
|
用于刷新页面后恢复用户信息和权限,避免完全依赖 localStorage。
|
||||||
|
|
||||||
@@ -100,11 +100,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
| 方法 | 路径 | 说明 | 权限 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| GET | `/api/users` | 用户列表 | `user-settings` |
|
| GET | `/modelTF/users` | 用户列表 | `user-settings` |
|
||||||
| POST | `/api/users` | 创建用户 | `user-settings` |
|
| POST | `/modelTF/users` | 创建用户 | `user-settings` |
|
||||||
| PUT | `/api/users/{id}` | 更新角色、状态、页面权限 | `user-settings` |
|
| PUT | `/modelTF/users/{id}` | 更新角色、状态、页面权限 | `user-settings` |
|
||||||
| DELETE | `/api/users/{id}` | 删除用户 | `user-settings` |
|
| DELETE | `/modelTF/users/{id}` | 删除用户 | `user-settings` |
|
||||||
| PUT | `/api/users/{id}/password` | 重置密码 | `user-settings` |
|
| PUT | `/modelTF/users/{id}/password` | 重置密码 | `user-settings` |
|
||||||
|
|
||||||
创建用户请求:
|
创建用户请求:
|
||||||
|
|
||||||
@@ -133,7 +133,7 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 3.1 首页看板
|
### 3.1 首页看板
|
||||||
|
|
||||||
`GET /api/dashboard/overview?period=7d`
|
`GET /modelTF/dashboard/overview?period=7d`
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
|
|
||||||
@@ -162,7 +162,7 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 3.2 健康指标
|
### 3.2 健康指标
|
||||||
|
|
||||||
`GET /api/health`
|
`GET /modelTF/health`
|
||||||
|
|
||||||
响应字段兼容前端 `HealthMetrics`:
|
响应字段兼容前端 `HealthMetrics`:
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 3.3 平台性能
|
### 3.3 平台性能
|
||||||
|
|
||||||
`GET /api/system-info`
|
`GET /modelTF/system-info`
|
||||||
|
|
||||||
返回 CPU、内存、磁盘、GPU、网络、系统运行时间。GPU 进程字段建议包含 `pid`、`name`、`memory_used_gb`、`task_name`、`user`。
|
返回 CPU、内存、磁盘、GPU、网络、系统运行时间。GPU 进程字段建议包含 `pid`、`name`、`memory_used_gb`、`task_name`、`user`。
|
||||||
|
|
||||||
@@ -184,11 +184,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/log-files?date=2026-07-16` | 系统日志文件列表 |
|
| GET | `/modelTF/log-files?date=2026-07-16` | 系统日志文件列表 |
|
||||||
| GET | `/api/log-content?file=system.log` | 系统日志内容 |
|
| GET | `/modelTF/log-content?file=system.log` | 系统日志内容 |
|
||||||
| GET | `/api/training-log-files` | 训练日志文件列表 |
|
| GET | `/modelTF/training-log-files` | 训练日志文件列表 |
|
||||||
| GET | `/api/training-log-content?file=xxx.log` | 训练日志内容 |
|
| GET | `/modelTF/training-log-content?file=xxx.log` | 训练日志内容 |
|
||||||
| POST | `/api/web-log` | 前端错误/行为日志 |
|
| POST | `/modelTF/web-log` | 前端错误/行为日志 |
|
||||||
|
|
||||||
日志内容应支持 `tail`、`offset`、`limit` 参数,避免一次返回超大文件。
|
日志内容应支持 `tail`、`offset`、`limit` 参数,避免一次返回超大文件。
|
||||||
|
|
||||||
@@ -198,14 +198,14 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/model-manage` | 模型列表 |
|
| GET | `/modelTF/model-manage` | 模型列表 |
|
||||||
| GET | `/api/model-manage/{id}` | 模型详情 |
|
| GET | `/modelTF/model-manage/{id}` | 模型详情 |
|
||||||
| GET | `/api/model-manage/name/{name}` | 按名称查询 |
|
| GET | `/modelTF/model-manage/name/{name}` | 按名称查询 |
|
||||||
| POST | `/api/model-manage` | 创建模型 |
|
| POST | `/modelTF/model-manage` | 创建模型 |
|
||||||
| PUT | `/api/model-manage/{id}` | 编辑模型 |
|
| PUT | `/modelTF/model-manage/{id}` | 编辑模型 |
|
||||||
| DELETE | `/api/model-manage/{id}` | 删除模型 |
|
| DELETE | `/modelTF/model-manage/{id}` | 删除模型 |
|
||||||
| PUT | `/api/model-manage/{id}/purpose` | 修改用途 |
|
| PUT | `/modelTF/model-manage/{id}/purpose` | 修改用途 |
|
||||||
| GET | `/api/model-manage/local-models` | 扫描本地模型目录 |
|
| GET | `/modelTF/model-manage/local-models` | 扫描本地模型目录 |
|
||||||
|
|
||||||
创建/编辑请求:
|
创建/编辑请求:
|
||||||
|
|
||||||
@@ -234,10 +234,10 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/model-manage/trained-models` | 已训练模型列表 |
|
| GET | `/modelTF/model-manage/trained-models` | 已训练模型列表 |
|
||||||
| DELETE | `/api/model-manage/trained-models/{id}?type=merged\|lora` | 删除训练产物 |
|
| DELETE | `/modelTF/model-manage/trained-models/{id}?type=merged\|lora` | 删除训练产物 |
|
||||||
| POST | `/api/model-manage/merge` | 合并 LoRA 权重 |
|
| POST | `/modelTF/model-manage/merge` | 合并 LoRA 权重 |
|
||||||
| GET | `/api/model-manage/trained-models/{model_name}/export` | 导出模型文件 |
|
| GET | `/modelTF/model-manage/trained-models/{model_name}/export` | 导出模型文件 |
|
||||||
|
|
||||||
合并请求:
|
合并请求:
|
||||||
|
|
||||||
@@ -264,14 +264,14 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/dataset-manage` | 数据集列表 |
|
| GET | `/modelTF/dataset-manage` | 数据集列表 |
|
||||||
| GET | `/api/dataset-manage/{id}` | 数据集详情 |
|
| GET | `/modelTF/dataset-manage/{id}` | 数据集详情 |
|
||||||
| POST | `/api/dataset-manage` | 创建数据集 |
|
| POST | `/modelTF/dataset-manage` | 创建数据集 |
|
||||||
| PUT | `/api/dataset-manage/{id}` | 更新数据集 |
|
| PUT | `/modelTF/dataset-manage/{id}` | 更新数据集 |
|
||||||
| DELETE | `/api/dataset-manage/{id}` | 删除数据集 |
|
| DELETE | `/modelTF/dataset-manage/{id}` | 删除数据集 |
|
||||||
| POST | `/api/dataset-manage/upload/{dataset_id}` | 上传文件,字段名 `files` |
|
| POST | `/modelTF/dataset-manage/upload/{dataset_id}` | 上传文件,字段名 `files` |
|
||||||
| GET | `/api/dataset-manage/download/{dataset_id}` | 打包下载数据集 |
|
| GET | `/modelTF/dataset-manage/download/{dataset_id}` | 打包下载数据集 |
|
||||||
| GET | `/api/dataset-manage/download/{dataset_id}/{file_id}` | 下载单文件 |
|
| GET | `/modelTF/dataset-manage/download/{dataset_id}/{file_id}` | 下载单文件 |
|
||||||
|
|
||||||
创建数据集:
|
创建数据集:
|
||||||
|
|
||||||
@@ -296,12 +296,12 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/dataset-manage/preview/{file_id}` | 当前版本内容预览 |
|
| GET | `/modelTF/dataset-manage/preview/{file_id}` | 当前版本内容预览 |
|
||||||
| GET | `/api/dataset-manage/versions/{file_id}` | 文件版本列表 |
|
| GET | `/modelTF/dataset-manage/versions/{file_id}` | 文件版本列表 |
|
||||||
| GET | `/api/dataset-manage/versions/{file_id}/{version_id}` | 读取历史版本 |
|
| GET | `/modelTF/dataset-manage/versions/{file_id}/{version_id}` | 读取历史版本 |
|
||||||
| POST | `/api/dataset-manage/versions/{file_id}` | 保存为新版本 |
|
| POST | `/modelTF/dataset-manage/versions/{file_id}` | 保存为新版本 |
|
||||||
| PUT | `/api/dataset-manage/versions/{file_id}/active` | 切换当前版本 |
|
| PUT | `/modelTF/dataset-manage/versions/{file_id}/active` | 切换当前版本 |
|
||||||
| DELETE | `/api/dataset-manage/versions/{file_id}/{version_id}` | 删除非当前、非初始版本 |
|
| DELETE | `/modelTF/dataset-manage/versions/{file_id}/{version_id}` | 删除非当前、非初始版本 |
|
||||||
|
|
||||||
创建新版本:
|
创建新版本:
|
||||||
|
|
||||||
@@ -324,15 +324,15 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/data-process` | 数据处理任务列表 |
|
| GET | `/modelTF/data-process` | 数据处理任务列表 |
|
||||||
| POST | `/api/data-process` | 创建草稿任务 |
|
| POST | `/modelTF/data-process` | 创建草稿任务 |
|
||||||
| GET | `/api/data-process/{id}` | 任务详情 |
|
| GET | `/modelTF/data-process/{id}` | 任务详情 |
|
||||||
| PUT | `/api/data-process/{id}` | 更新任务配置 |
|
| PUT | `/modelTF/data-process/{id}` | 更新任务配置 |
|
||||||
| DELETE | `/api/data-process/{id}` | 删除任务 |
|
| DELETE | `/modelTF/data-process/{id}` | 删除任务 |
|
||||||
| POST | `/api/data-process/{id}/start` | 启动处理 |
|
| POST | `/modelTF/data-process/{id}/start` | 启动处理 |
|
||||||
| POST | `/api/data-process/{id}/stop` | 停止处理 |
|
| POST | `/modelTF/data-process/{id}/stop` | 停止处理 |
|
||||||
| GET | `/api/data-process/{id}/progress` | 查询进度 |
|
| GET | `/modelTF/data-process/{id}/progress` | 查询进度 |
|
||||||
| GET | `/api/data-process/{id}/events` | SSE 实时进度 |
|
| GET | `/modelTF/data-process/{id}/events` | SSE 实时进度 |
|
||||||
|
|
||||||
创建任务:
|
创建任务:
|
||||||
|
|
||||||
@@ -358,10 +358,10 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/data-process/{id}/source-files` | 上传源文件,字段名 `files` |
|
| POST | `/modelTF/data-process/{id}/source-files` | 上传源文件,字段名 `files` |
|
||||||
| DELETE | `/api/data-process/{id}/source-files/{file_id}` | 移除源文件 |
|
| DELETE | `/modelTF/data-process/{id}/source-files/{file_id}` | 移除源文件 |
|
||||||
| POST | `/api/data-process/{id}/external/test` | 测试外部数据源连接 |
|
| POST | `/modelTF/data-process/{id}/external/test` | 测试外部数据源连接 |
|
||||||
| POST | `/api/data-process/{id}/external/pull` | 拉取外部数据并生成源文件 |
|
| POST | `/modelTF/data-process/{id}/external/pull` | 拉取外部数据并生成源文件 |
|
||||||
|
|
||||||
外部数据源请求:
|
外部数据源请求:
|
||||||
|
|
||||||
@@ -383,11 +383,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/data-process/{id}/preview/build` | 根据源文件和配置生成预览切片 |
|
| POST | `/modelTF/data-process/{id}/preview/build` | 根据源文件和配置生成预览切片 |
|
||||||
| GET | `/api/data-process/{id}/preview` | 查询预览切片 |
|
| GET | `/modelTF/data-process/{id}/preview` | 查询预览切片 |
|
||||||
| PUT | `/api/data-process/{id}/preview/{preview_id}` | 编辑切片内容 |
|
| PUT | `/modelTF/data-process/{id}/preview/{preview_id}` | 编辑切片内容 |
|
||||||
| POST | `/api/data-process/{id}/preview` | 手动新增切片 |
|
| POST | `/modelTF/data-process/{id}/preview` | 手动新增切片 |
|
||||||
| DELETE | `/api/data-process/{id}/preview/{preview_id}` | 删除切片 |
|
| DELETE | `/modelTF/data-process/{id}/preview/{preview_id}` | 删除切片 |
|
||||||
|
|
||||||
预览切片字段:
|
预览切片字段:
|
||||||
|
|
||||||
@@ -410,11 +410,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/data-process/{id}/generate` | 启动 LLM 生成 |
|
| POST | `/modelTF/data-process/{id}/generate` | 启动 LLM 生成 |
|
||||||
| GET | `/api/data-process/{id}/results` | 查询结果明细 |
|
| GET | `/modelTF/data-process/{id}/results` | 查询结果明细 |
|
||||||
| PUT | `/api/data-process/{id}/results/{result_id}` | 编辑结果 |
|
| PUT | `/modelTF/data-process/{id}/results/{result_id}` | 编辑结果 |
|
||||||
| POST | `/api/data-process/{id}/results/{result_id}/restore` | 恢复原始结果 |
|
| POST | `/modelTF/data-process/{id}/results/{result_id}/restore` | 恢复原始结果 |
|
||||||
| POST | `/api/data-process/{id}/publish` | 发布为数据集 |
|
| POST | `/modelTF/data-process/{id}/publish` | 发布为数据集 |
|
||||||
|
|
||||||
结果字段:
|
结果字段:
|
||||||
|
|
||||||
@@ -445,17 +445,17 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/fine-tune` | 训练任务列表 |
|
| GET | `/modelTF/fine-tune` | 训练任务列表 |
|
||||||
| GET | `/api/fine-tune/{id}` | 训练任务详情 |
|
| GET | `/modelTF/fine-tune/{id}` | 训练任务详情 |
|
||||||
| GET | `/api/fine-tune/check-name?name=xxx` | 任务名查重 |
|
| GET | `/modelTF/fine-tune/check-name?name=xxx` | 任务名查重 |
|
||||||
| POST | `/api/fine-tune` | 创建训练任务记录 |
|
| POST | `/modelTF/fine-tune` | 创建训练任务记录 |
|
||||||
| POST | `/api/fine-tune/start` | 启动训练 |
|
| POST | `/modelTF/fine-tune/start` | 启动训练 |
|
||||||
| PUT | `/api/fine-tune/{id}` | 更新任务 |
|
| PUT | `/modelTF/fine-tune/{id}` | 更新任务 |
|
||||||
| POST | `/api/fine-tune/stop/{id}` | 停止任务 |
|
| POST | `/modelTF/fine-tune/stop/{id}` | 停止任务 |
|
||||||
| DELETE | `/api/fine-tune/{id}` | 删除任务 |
|
| DELETE | `/modelTF/fine-tune/{id}` | 删除任务 |
|
||||||
| GET | `/api/fine-tune/progress/{id}` | 获取训练进度 |
|
| GET | `/modelTF/fine-tune/progress/{id}` | 获取训练进度 |
|
||||||
| GET | `/api/fine-tune/{id}/events` | SSE 训练日志/进度 |
|
| GET | `/modelTF/fine-tune/{id}/events` | SSE 训练日志/进度 |
|
||||||
| POST | `/api/fine-tune/tensorboard/start` | 启动 TensorBoard |
|
| POST | `/modelTF/fine-tune/tensorboard/start` | 启动 TensorBoard |
|
||||||
|
|
||||||
启动训练请求兼容前端 `FineTuneStartPayload`:
|
启动训练请求兼容前端 `FineTuneStartPayload`:
|
||||||
|
|
||||||
@@ -496,14 +496,14 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
训练日志页还会联合调用:
|
训练日志页还会联合调用:
|
||||||
|
|
||||||
- `GET /api/fine-tune/{id}` 获取任务参数。
|
- `GET /modelTF/fine-tune/{id}` 获取任务参数。
|
||||||
- `GET /api/dataset-manage/{id}` 获取训练集信息。
|
- `GET /modelTF/dataset-manage/{id}` 获取训练集信息。
|
||||||
- `GET /api/system-info` 获取 GPU 状态。
|
- `GET /modelTF/system-info` 获取 GPU 状态。
|
||||||
- `GET /api/training-log-files`、`GET /api/training-log-content` 获取日志。
|
- `GET /modelTF/training-log-files`、`GET /modelTF/training-log-content` 获取日志。
|
||||||
|
|
||||||
建议新增:
|
建议新增:
|
||||||
|
|
||||||
`GET /api/fine-tune/{id}/overview`
|
`GET /modelTF/fine-tune/{id}/overview`
|
||||||
|
|
||||||
一次返回任务、数据集、GPU、日志摘要、指标曲线,减少页面聚合复杂度。
|
一次返回任务、数据集、GPU、日志摘要、指标曲线,减少页面聚合复杂度。
|
||||||
|
|
||||||
@@ -513,11 +513,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/model-eval` | 评测任务列表 |
|
| GET | `/modelTF/model-eval` | 评测任务列表 |
|
||||||
| GET | `/api/model-eval/{id}` | 评测详情 |
|
| GET | `/modelTF/model-eval/{id}` | 评测详情 |
|
||||||
| POST | `/api/model-eval/start` | 启动评测 |
|
| POST | `/modelTF/model-eval/start` | 启动评测 |
|
||||||
| DELETE | `/api/model-eval/{id}` | 删除评测 |
|
| DELETE | `/modelTF/model-eval/{id}` | 删除评测 |
|
||||||
| GET | `/api/model-eval/{id}/events` | SSE 评测进度 |
|
| GET | `/modelTF/model-eval/{id}/events` | SSE 评测进度 |
|
||||||
|
|
||||||
启动评测:
|
启动评测:
|
||||||
|
|
||||||
@@ -550,11 +550,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/dimension` | 维度列表 |
|
| GET | `/modelTF/dimension` | 维度列表 |
|
||||||
| GET | `/api/dimension/{id}` | 维度详情 |
|
| GET | `/modelTF/dimension/{id}` | 维度详情 |
|
||||||
| POST | `/api/dimension` | 创建维度 |
|
| POST | `/modelTF/dimension` | 创建维度 |
|
||||||
| PUT | `/api/dimension/{id}` | 编辑维度 |
|
| PUT | `/modelTF/dimension/{id}` | 编辑维度 |
|
||||||
| DELETE | `/api/dimension/{id}` | 删除维度 |
|
| DELETE | `/modelTF/dimension/{id}` | 删除维度 |
|
||||||
|
|
||||||
维度请求:
|
维度请求:
|
||||||
|
|
||||||
@@ -583,17 +583,17 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/model-compare` | 推理/对比任务列表 |
|
| GET | `/modelTF/model-compare` | 推理/对比任务列表 |
|
||||||
| GET | `/api/model-compare/{id}` | 任务详情 |
|
| GET | `/modelTF/model-compare/{id}` | 任务详情 |
|
||||||
| POST | `/api/model-compare` | 创建任务 |
|
| POST | `/modelTF/model-compare` | 创建任务 |
|
||||||
| DELETE | `/api/model-compare/{id}` | 删除任务 |
|
| DELETE | `/modelTF/model-compare/{id}` | 删除任务 |
|
||||||
| POST | `/api/model-compare/{id}/load` | 加载任务内模型 |
|
| POST | `/modelTF/model-compare/{id}/load` | 加载任务内模型 |
|
||||||
| POST | `/api/model-compare/{id}/unload` | 卸载任务内模型 |
|
| POST | `/modelTF/model-compare/{id}/unload` | 卸载任务内模型 |
|
||||||
| GET | `/api/model-compare/{id}/load-status` | 查询加载状态 |
|
| GET | `/modelTF/model-compare/{id}/load-status` | 查询加载状态 |
|
||||||
| POST | `/api/model-compare/{id}/load-status` | 更新加载状态 |
|
| POST | `/modelTF/model-compare/{id}/load-status` | 更新加载状态 |
|
||||||
| POST | `/api/model-compare/{id}/start-model` | 启动单个模型服务 |
|
| POST | `/modelTF/model-compare/{id}/start-model` | 启动单个模型服务 |
|
||||||
| POST | `/api/model-compare/stop-by-pid` | 按 PID 停止模型 |
|
| POST | `/modelTF/model-compare/stop-by-pid` | 按 PID 停止模型 |
|
||||||
| POST | `/api/model-compare/all/stop-all` | 停止全部旧模型服务 |
|
| POST | `/modelTF/model-compare/all/stop-all` | 停止全部旧模型服务 |
|
||||||
|
|
||||||
创建任务:
|
创建任务:
|
||||||
|
|
||||||
@@ -617,12 +617,12 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/model-compare/stream-chat` | 流式对话,建议 SSE/chunked |
|
| POST | `/modelTF/model-compare/stream-chat` | 流式对话,建议 SSE/chunked |
|
||||||
| POST | `/api/model-compare/chat-with-port` | 指定端口非流式对话 |
|
| POST | `/modelTF/model-compare/chat-with-port` | 指定端口非流式对话 |
|
||||||
| POST | `/api/model-chat/batch` | API 模型批量对话 |
|
| POST | `/modelTF/model-chat/batch` | API 模型批量对话 |
|
||||||
| POST | `/api/model-chat/local/chat` | 本地模型对话 |
|
| POST | `/modelTF/model-chat/local/chat` | 本地模型对话 |
|
||||||
| POST | `/api/model-chat/local/preload` | 预加载本地模型 |
|
| POST | `/modelTF/model-chat/local/preload` | 预加载本地模型 |
|
||||||
| POST | `/api/model-chat/trained/preload` | 预加载已训练模型 |
|
| POST | `/modelTF/model-chat/trained/preload` | 预加载已训练模型 |
|
||||||
|
|
||||||
流式请求:
|
流式请求:
|
||||||
|
|
||||||
@@ -649,10 +649,10 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/data-convert/jobs` | 创建转换任务,multipart 上传源文件 |
|
| POST | `/modelTF/data-convert/jobs` | 创建转换任务,multipart 上传源文件 |
|
||||||
| GET | `/api/data-convert/jobs/{id}` | 转换任务详情 |
|
| GET | `/modelTF/data-convert/jobs/{id}` | 转换任务详情 |
|
||||||
| GET | `/api/data-convert/jobs/{id}/download` | 下载转换结果 |
|
| GET | `/modelTF/data-convert/jobs/{id}/download` | 下载转换结果 |
|
||||||
| DELETE | `/api/data-convert/jobs/{id}` | 删除转换任务 |
|
| DELETE | `/modelTF/data-convert/jobs/{id}` | 删除转换任务 |
|
||||||
|
|
||||||
请求字段:
|
请求字段:
|
||||||
|
|
||||||
@@ -667,11 +667,11 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/tools` | 工具列表 |
|
| GET | `/modelTF/tools` | 工具列表 |
|
||||||
| POST | `/api/tools` | 创建工具 |
|
| POST | `/modelTF/tools` | 创建工具 |
|
||||||
| GET | `/api/tools/{id}` | 工具详情 |
|
| GET | `/modelTF/tools/{id}` | 工具详情 |
|
||||||
| PUT | `/api/tools/{id}` | 编辑工具 |
|
| PUT | `/modelTF/tools/{id}` | 编辑工具 |
|
||||||
| DELETE | `/api/tools/{id}` | 删除工具 |
|
| DELETE | `/modelTF/tools/{id}` | 删除工具 |
|
||||||
|
|
||||||
字段:`name`、`description`、`url`、`icon`、`visibility`、`owner_id`。
|
字段:`name`、`description`、`url`、`icon`、`visibility`、`owner_id`。
|
||||||
|
|
||||||
@@ -706,12 +706,12 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 | 权限 |
|
| 方法 | 路径 | 说明 | 权限 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| GET | `/api/tenants` | 租户列表 | 平台管理员 |
|
| GET | `/modelTF/tenants` | 租户列表 | 平台管理员 |
|
||||||
| POST | `/api/tenants` | 创建租户 | 平台管理员 |
|
| POST | `/modelTF/tenants` | 创建租户 | 平台管理员 |
|
||||||
| GET | `/api/tenants/{id}` | 租户详情 | 租户管理员 |
|
| GET | `/modelTF/tenants/{id}` | 租户详情 | 租户管理员 |
|
||||||
| PUT | `/api/tenants/{id}` | 更新租户 | 平台管理员 |
|
| PUT | `/modelTF/tenants/{id}` | 更新租户 | 平台管理员 |
|
||||||
| PUT | `/api/tenants/{id}/quota` | 设置租户配额 | 平台管理员 |
|
| PUT | `/modelTF/tenants/{id}/quota` | 设置租户配额 | 平台管理员 |
|
||||||
| PUT | `/api/tenants/{id}/retention-policy` | 设置租户留存策略 | 平台管理员 |
|
| PUT | `/modelTF/tenants/{id}/retention-policy` | 设置租户留存策略 | 平台管理员 |
|
||||||
|
|
||||||
创建租户:
|
创建租户:
|
||||||
|
|
||||||
@@ -738,15 +738,15 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/projects` | 当前用户可访问项目列表 |
|
| GET | `/modelTF/projects` | 当前用户可访问项目列表 |
|
||||||
| POST | `/api/projects` | 创建项目 |
|
| POST | `/modelTF/projects` | 创建项目 |
|
||||||
| GET | `/api/projects/{id}` | 项目详情 |
|
| GET | `/modelTF/projects/{id}` | 项目详情 |
|
||||||
| PUT | `/api/projects/{id}` | 更新项目 |
|
| PUT | `/modelTF/projects/{id}` | 更新项目 |
|
||||||
| POST | `/api/projects/{id}/archive` | 归档项目 |
|
| POST | `/modelTF/projects/{id}/archive` | 归档项目 |
|
||||||
| GET | `/api/projects/{id}/members` | 项目成员 |
|
| GET | `/modelTF/projects/{id}/members` | 项目成员 |
|
||||||
| POST | `/api/projects/{id}/members` | 添加成员 |
|
| POST | `/modelTF/projects/{id}/members` | 添加成员 |
|
||||||
| PUT | `/api/projects/{id}/members/{user_id}` | 修改项目角色 |
|
| PUT | `/modelTF/projects/{id}/members/{user_id}` | 修改项目角色 |
|
||||||
| DELETE | `/api/projects/{id}/members/{user_id}` | 移除成员 |
|
| DELETE | `/modelTF/projects/{id}/members/{user_id}` | 移除成员 |
|
||||||
|
|
||||||
创建项目:
|
创建项目:
|
||||||
|
|
||||||
@@ -772,9 +772,9 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/resources/{resource_type}/{resource_id}/acl` | 查询资源授权 |
|
| GET | `/modelTF/resources/{resource_type}/{resource_id}/acl` | 查询资源授权 |
|
||||||
| PUT | `/api/resources/{resource_type}/{resource_id}/acl` | 覆盖资源授权 |
|
| PUT | `/modelTF/resources/{resource_type}/{resource_id}/acl` | 覆盖资源授权 |
|
||||||
| POST | `/api/resources/{resource_type}/{resource_id}/share` | 快速分享给用户/项目角色 |
|
| POST | `/modelTF/resources/{resource_type}/{resource_id}/share` | 快速分享给用户/项目角色 |
|
||||||
|
|
||||||
授权请求:
|
授权请求:
|
||||||
|
|
||||||
@@ -801,14 +801,14 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/approvals` | 审批列表,支持 `type=pending/mine/done` |
|
| GET | `/modelTF/approvals` | 审批列表,支持 `type=pending/mine/done` |
|
||||||
| POST | `/api/approvals` | 发起审批 |
|
| POST | `/modelTF/approvals` | 发起审批 |
|
||||||
| GET | `/api/approvals/{id}` | 审批详情 |
|
| GET | `/modelTF/approvals/{id}` | 审批详情 |
|
||||||
| POST | `/api/approvals/{id}/approve` | 通过 |
|
| POST | `/modelTF/approvals/{id}/approve` | 通过 |
|
||||||
| POST | `/api/approvals/{id}/reject` | 驳回 |
|
| POST | `/modelTF/approvals/{id}/reject` | 驳回 |
|
||||||
| POST | `/api/approvals/{id}/cancel` | 撤回 |
|
| POST | `/modelTF/approvals/{id}/cancel` | 撤回 |
|
||||||
| GET | `/api/approval-templates` | 审批模板列表 |
|
| GET | `/modelTF/approval-templates` | 审批模板列表 |
|
||||||
| PUT | `/api/approval-templates/{id}` | 更新审批模板 |
|
| PUT | `/modelTF/approval-templates/{id}` | 更新审批模板 |
|
||||||
|
|
||||||
发起审批:
|
发起审批:
|
||||||
|
|
||||||
@@ -831,28 +831,28 @@ page=1&page_size=20&keyword=xxx&sort=-created_at
|
|||||||
|
|
||||||
### 13.5 算力资源与队列
|
### 13.5 算力资源与队列
|
||||||
|
|
||||||
应用平台对前端暴露 `/api/compute/*`,实际由 Compute Gateway 调用算力平台内部接口。
|
应用平台对前端暴露 `/modelTF/compute/*`,实际由 Compute Gateway 调用算力平台内部接口。
|
||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/compute/nodes` | 算力节点列表 |
|
| GET | `/modelTF/compute/nodes` | 算力节点列表 |
|
||||||
| POST | `/api/compute/nodes` | 新增算力节点 |
|
| POST | `/modelTF/compute/nodes` | 新增算力节点 |
|
||||||
| GET | `/api/compute/nodes/{id}` | 算力节点详情 |
|
| GET | `/modelTF/compute/nodes/{id}` | 算力节点详情 |
|
||||||
| PUT | `/api/compute/nodes/{id}` | 编辑节点地址、权重、标签、路径和启用状态 |
|
| PUT | `/modelTF/compute/nodes/{id}` | 编辑节点地址、权重、标签、路径和启用状态 |
|
||||||
| POST | `/api/compute/nodes/{id}/test-connection` | 测试 Compute API/File Gateway 连通性 |
|
| POST | `/modelTF/compute/nodes/{id}/test-connection` | 测试 Compute API/File Gateway 连通性 |
|
||||||
| POST | `/api/compute/nodes/{id}/enable` | 启用节点 |
|
| POST | `/modelTF/compute/nodes/{id}/enable` | 启用节点 |
|
||||||
| POST | `/api/compute/nodes/{id}/disable` | 禁用节点,不接收新任务 |
|
| POST | `/modelTF/compute/nodes/{id}/disable` | 禁用节点,不接收新任务 |
|
||||||
| POST | `/api/compute/nodes/{id}/drain` | 进入维护模式,已有任务跑完后下线 |
|
| POST | `/modelTF/compute/nodes/{id}/drain` | 进入维护模式,已有任务跑完后下线 |
|
||||||
| POST | `/api/compute/nodes/{id}/health-check` | 主动触发节点健康检查 |
|
| POST | `/modelTF/compute/nodes/{id}/health-check` | 主动触发节点健康检查 |
|
||||||
| GET | `/api/compute/nodes/{id}/engines` | 节点训练引擎和版本 |
|
| GET | `/modelTF/compute/nodes/{id}/engines` | 节点训练引擎和版本 |
|
||||||
| GET | `/api/compute/nodes/{id}/replicas` | 节点本地资源副本 |
|
| GET | `/modelTF/compute/nodes/{id}/replicas` | 节点本地资源副本 |
|
||||||
| GET | `/api/compute/gpus` | GPU 状态 |
|
| GET | `/modelTF/compute/gpus` | GPU 状态 |
|
||||||
| GET | `/api/compute/queue` | 任务队列 |
|
| GET | `/modelTF/compute/queue` | 任务队列 |
|
||||||
| GET | `/api/compute/jobs/{id}` | 算力任务详情 |
|
| GET | `/modelTF/compute/jobs/{id}` | 算力任务详情 |
|
||||||
| POST | `/api/compute/jobs/{id}/retry` | 重试任务 |
|
| POST | `/modelTF/compute/jobs/{id}/retry` | 重试任务 |
|
||||||
| POST | `/api/compute/jobs/{id}/priority` | 调整优先级 |
|
| POST | `/modelTF/compute/jobs/{id}/priority` | 调整优先级 |
|
||||||
| POST | `/api/internal/compute-sync/jobs/poll` | 应用平台主动轮询并同步算力任务状态 |
|
| POST | `/modelTF/internal/compute-sync/jobs/poll` | 应用平台主动轮询并同步算力任务状态 |
|
||||||
| POST | `/api/internal/compute-sync/resources` | 调度前同步数据集/模型到目标节点 |
|
| POST | `/modelTF/internal/compute-sync/resources` | 调度前同步数据集/模型到目标节点 |
|
||||||
|
|
||||||
算力节点设计说明:
|
算力节点设计说明:
|
||||||
|
|
||||||
@@ -913,13 +913,13 @@ GPU 响应字段:
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/compute/jobs` | 创建训练/评测/数据处理/推理任务 |
|
| POST | `/modelTF/compute/jobs` | 创建训练/评测/数据处理/推理任务 |
|
||||||
| GET | `/compute/jobs/{id}` | 查询任务 |
|
| GET | `/modelTF/compute/jobs/{id}` | 查询任务 |
|
||||||
| POST | `/compute/jobs/{id}/stop` | 停止任务 |
|
| POST | `/modelTF/compute/jobs/{id}/stop` | 停止任务 |
|
||||||
| GET | `/compute/jobs/{id}/logs` | 拉取日志 |
|
| GET | `/modelTF/compute/jobs/{id}/logs` | 拉取日志 |
|
||||||
| GET | `/compute/resources/gpus` | 查询 GPU |
|
| GET | `/modelTF/compute/resources/gpus` | 查询 GPU |
|
||||||
| POST | `/compute/files/upload` | 上传到算力本地磁盘 |
|
| POST | `/modelTF/compute/files/upload` | 上传到算力本地磁盘 |
|
||||||
| GET | `/compute/files/{id}/download` | 下载文件 |
|
| GET | `/modelTF/compute/files/{id}/download` | 下载文件 |
|
||||||
|
|
||||||
创建算力任务:
|
创建算力任务:
|
||||||
|
|
||||||
@@ -994,13 +994,13 @@ GPU 响应字段:
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| POST | `/api/files/upload-session` | 创建分片上传会话 |
|
| POST | `/modelTF/files/upload-session` | 创建分片上传会话 |
|
||||||
| PUT | `/api/files/upload-session/{id}/parts/{part_no}` | 上传分片 |
|
| PUT | `/modelTF/files/upload-session/{id}/parts/{part_no}` | 上传分片 |
|
||||||
| POST | `/api/files/upload-session/{id}/complete` | 完成上传 |
|
| POST | `/modelTF/files/upload-session/{id}/complete` | 完成上传 |
|
||||||
| GET | `/api/files/{id}/preview` | 文件预览 |
|
| GET | `/modelTF/files/{id}/preview` | 文件预览 |
|
||||||
| GET | `/api/files/{id}/download-url` | 获取短时下载链接 |
|
| GET | `/modelTF/files/{id}/download-url` | 获取短时下载链接 |
|
||||||
| POST | `/api/import/local-model` | 从算力节点本地路径导入模型 |
|
| POST | `/modelTF/import/local-model` | 从算力节点本地路径导入模型 |
|
||||||
| POST | `/api/import/local-dataset` | 从算力节点本地路径导入数据集 |
|
| POST | `/modelTF/import/local-dataset` | 从算力节点本地路径导入数据集 |
|
||||||
|
|
||||||
离线导入模型:
|
离线导入模型:
|
||||||
|
|
||||||
@@ -1019,10 +1019,10 @@ GPU 响应字段:
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/training-engines` | 训练引擎列表 |
|
| GET | `/modelTF/training-engines` | 训练引擎列表 |
|
||||||
| GET | `/api/training-engines/{id}` | 引擎详情 |
|
| GET | `/modelTF/training-engines/{id}` | 引擎详情 |
|
||||||
| GET | `/api/training-engines/{id}/schema` | 参数 schema |
|
| GET | `/modelTF/training-engines/{id}/schema` | 参数 schema |
|
||||||
| POST | `/api/training-engines/{id}/health-check` | 健康检查 |
|
| POST | `/modelTF/training-engines/{id}/health-check` | 健康检查 |
|
||||||
|
|
||||||
LLaMA-Factory 引擎声明:
|
LLaMA-Factory 引擎声明:
|
||||||
|
|
||||||
@@ -1042,11 +1042,11 @@ LLaMA-Factory 引擎声明:
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/fine-tune/{id}/checkpoints` | checkpoint 列表 |
|
| GET | `/modelTF/fine-tune/{id}/checkpoints` | checkpoint 列表 |
|
||||||
| POST | `/api/fine-tune/{id}/retry` | 失败任务重试 |
|
| POST | `/modelTF/fine-tune/{id}/retry` | 失败任务重试 |
|
||||||
| POST | `/api/fine-tune/{id}/resume` | 从 checkpoint 恢复训练 |
|
| POST | `/modelTF/fine-tune/{id}/resume` | 从 checkpoint 恢复训练 |
|
||||||
| DELETE | `/api/fine-tune/{id}/checkpoints/{checkpoint_id}` | 删除 checkpoint,可能触发审批 |
|
| DELETE | `/modelTF/fine-tune/{id}/checkpoints/{checkpoint_id}` | 删除 checkpoint,可能触发审批 |
|
||||||
| PUT | `/api/fine-tune/{id}/checkpoint-retention` | 设置 checkpoint 保留策略 |
|
| PUT | `/modelTF/fine-tune/{id}/checkpoint-retention` | 设置 checkpoint 保留策略 |
|
||||||
|
|
||||||
默认保留策略:最近 3 个、最优 2 个、已发布模型关联 checkpoint 不自动删除、失败任务保留 14 天。
|
默认保留策略:最近 3 个、最优 2 个、已发布模型关联 checkpoint 不自动删除、失败任务保留 14 天。
|
||||||
|
|
||||||
@@ -1054,13 +1054,13 @@ LLaMA-Factory 引擎声明:
|
|||||||
|
|
||||||
| 方法 | 路径 | 说明 |
|
| 方法 | 路径 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| GET | `/api/audit-logs` | 操作审计 |
|
| GET | `/modelTF/audit-logs` | 操作审计 |
|
||||||
| GET | `/api/login-logs` | 登录审计 |
|
| GET | `/modelTF/login-logs` | 登录审计 |
|
||||||
| GET | `/api/download-logs` | 下载审计 |
|
| GET | `/modelTF/download-logs` | 下载审计 |
|
||||||
| GET | `/api/retention-policies` | 留存策略 |
|
| GET | `/modelTF/retention-policies` | 留存策略 |
|
||||||
| PUT | `/api/retention-policies/{id}` | 更新留存策略 |
|
| PUT | `/modelTF/retention-policies/{id}` | 更新留存策略 |
|
||||||
| GET | `/api/quotas/usage` | 配额使用 |
|
| GET | `/modelTF/quotas/usage` | 配额使用 |
|
||||||
| GET | `/api/usage/summary` | GPU 小时、磁盘、推理调用统计 |
|
| GET | `/modelTF/usage/summary` | GPU 小时、磁盘、推理调用统计 |
|
||||||
|
|
||||||
第一版只做用量统计,不做账单计费;第二期可扩展成本核算。
|
第一版只做用量统计,不做账单计费;第二期可扩展成本核算。
|
||||||
|
|
||||||
@@ -1072,88 +1072,88 @@ LLaMA-Factory 引擎声明:
|
|||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 登录页 | `/login` | `POST /api/login`、`GET /api/me`、`POST /api/logout` | 登录、恢复用户、退出 |
|
| 登录页 | `/login` | `POST /modelTF/login`、`GET /modelTF/me`、`POST /modelTF/logout` | 登录、恢复用户、退出 |
|
||||||
| 用户中心 | `/user-settings` | `GET /api/users` | 用户列表、搜索、状态筛选 |
|
| 用户中心 | `/user-settings` | `GET /modelTF/users` | 用户列表、搜索、状态筛选 |
|
||||||
| 创建用户 | `/user-settings/create` | `POST /api/users` | 创建本地用户 |
|
| 创建用户 | `/user-settings/create` | `POST /modelTF/users` | 创建本地用户 |
|
||||||
| 用户权限 | `/user-settings/:id/permission` | `PUT /api/users/{id}`、`PUT /api/users/{id}/password` | 用户角色、状态、页面权限、重置密码 |
|
| 用户权限 | `/user-settings/:id/permission` | `PUT /modelTF/users/{id}`、`PUT /modelTF/users/{id}/password` | 用户角色、状态、页面权限、重置密码 |
|
||||||
| 无权限页 | `/permission-denied` | 无专属接口,可调用 `GET /api/me` | 展示当前用户权限和返回入口 |
|
| 无权限页 | `/permission-denied` | 无专属接口,可调用 `GET /modelTF/me` | 展示当前用户权限和返回入口 |
|
||||||
|
|
||||||
### 14.2 租户、项目和资源授权
|
### 14.2 租户、项目和资源授权
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 租户管理 | `/tenants` | `GET /api/tenants`、`POST /api/tenants` | 租户列表、创建租户 |
|
| 租户管理 | `/tenants` | `GET /modelTF/tenants`、`POST /modelTF/tenants` | 租户列表、创建租户 |
|
||||||
| 租户详情 | `/tenants/:id` | `GET /api/tenants/{id}`、`PUT /api/tenants/{id}`、`PUT /api/tenants/{id}/quota`、`PUT /api/tenants/{id}/retention-policy` | 租户配置、配额、留存 |
|
| 租户详情 | `/tenants/:id` | `GET /modelTF/tenants/{id}`、`PUT /modelTF/tenants/{id}`、`PUT /modelTF/tenants/{id}/quota`、`PUT /modelTF/tenants/{id}/retention-policy` | 租户配置、配额、留存 |
|
||||||
| 项目列表 | `/projects` | `GET /api/projects`、`POST /api/projects` | 项目列表、创建项目 |
|
| 项目列表 | `/projects` | `GET /modelTF/projects`、`POST /modelTF/projects` | 项目列表、创建项目 |
|
||||||
| 项目详情 | `/projects/:id` | `GET /api/projects/{id}`、`PUT /api/projects/{id}`、`POST /api/projects/{id}/archive` | 项目概览、归档 |
|
| 项目详情 | `/projects/:id` | `GET /modelTF/projects/{id}`、`PUT /modelTF/projects/{id}`、`POST /modelTF/projects/{id}/archive` | 项目概览、归档 |
|
||||||
| 项目成员 | `/projects/:id/members` | `GET /api/projects/{id}/members`、`POST /api/projects/{id}/members`、`PUT /api/projects/{id}/members/{user_id}`、`DELETE /api/projects/{id}/members/{user_id}` | 成员和项目角色 |
|
| 项目成员 | `/projects/:id/members` | `GET /modelTF/projects/{id}/members`、`POST /modelTF/projects/{id}/members`、`PUT /modelTF/projects/{id}/members/{user_id}`、`DELETE /modelTF/projects/{id}/members/{user_id}` | 成员和项目角色 |
|
||||||
| 资源授权 | 资源详情弹窗或 `/projects/:id/permissions` | `GET /api/resources/{resource_type}/{resource_id}/acl`、`PUT /api/resources/{resource_type}/{resource_id}/acl`、`POST /api/resources/{resource_type}/{resource_id}/share` | 模型/数据集/任务级 ACL |
|
| 资源授权 | 资源详情弹窗或 `/projects/:id/permissions` | `GET /modelTF/resources/{resource_type}/{resource_id}/acl`、`PUT /modelTF/resources/{resource_type}/{resource_id}/acl`、`POST /modelTF/resources/{resource_type}/{resource_id}/share` | 模型/数据集/任务级 ACL |
|
||||||
|
|
||||||
### 14.3 看板、监控和日志
|
### 14.3 看板、监控和日志
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 服务看板 | `/dashboard` | `GET /api/dashboard/overview`、`GET /api/health` | 首页聚合、轻量健康指标 |
|
| 服务看板 | `/dashboard` | `GET /modelTF/dashboard/overview`、`GET /modelTF/health` | 首页聚合、轻量健康指标 |
|
||||||
| 平台性能 | `/hardware` | `GET /api/system-info`、`GET /api/compute/gpus` | CPU、内存、磁盘、GPU、任务占用 |
|
| 平台性能 | `/hardware` | `GET /modelTF/system-info`、`GET /modelTF/compute/gpus` | CPU、内存、磁盘、GPU、任务占用 |
|
||||||
| 系统日志 | `/logs` | `GET /api/log-files`、`GET /api/log-content` | 系统日志列表和内容 |
|
| 系统日志 | `/logs` | `GET /modelTF/log-files`、`GET /modelTF/log-content` | 系统日志列表和内容 |
|
||||||
| 训练日志页 | `/training-log/:id` | `GET /api/fine-tune/{id}/overview`、`GET /api/training-log-files`、`GET /api/training-log-content` | 训练日志、指标、GPU 状态 |
|
| 训练日志页 | `/training-log/:id` | `GET /modelTF/fine-tune/{id}/overview`、`GET /modelTF/training-log-files`、`GET /modelTF/training-log-content` | 训练日志、指标、GPU 状态 |
|
||||||
|
|
||||||
### 14.4 模型管理
|
### 14.4 模型管理
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 模型列表 | `/model-manage` | `GET /api/model-manage`、`DELETE /api/model-manage/{id}`、`PUT /api/model-manage/{id}/purpose` | 模型列表、删除审批入口、用途变更 |
|
| 模型列表 | `/model-manage` | `GET /modelTF/model-manage`、`DELETE /modelTF/model-manage/{id}`、`PUT /modelTF/model-manage/{id}/purpose` | 模型列表、删除审批入口、用途变更 |
|
||||||
| 模型创建/编辑 | `/model-manage/create`、`/model-manage/:id/edit` | `GET /api/model-manage/{id}`、`POST /api/model-manage`、`PUT /api/model-manage/{id}`、`GET /api/model-manage/local-models` | 本地/API 模型登记 |
|
| 模型创建/编辑 | `/model-manage/create`、`/model-manage/:id/edit` | `GET /modelTF/model-manage/{id}`、`POST /modelTF/model-manage`、`PUT /modelTF/model-manage/{id}`、`GET /modelTF/model-manage/local-models` | 本地/API 模型登记 |
|
||||||
| 离线导入模型 | 模型创建页或导入弹窗 | `POST /api/import/local-model` | 从算力节点本地路径导入 |
|
| 离线导入模型 | 模型创建页或导入弹窗 | `POST /modelTF/import/local-model` | 从算力节点本地路径导入 |
|
||||||
| 已训练模型 | 模型列表/选择弹窗 | `GET /api/model-manage/trained-models`、`DELETE /api/model-manage/trained-models/{id}` | 训练产物列表和删除 |
|
| 已训练模型 | 模型列表/选择弹窗 | `GET /modelTF/model-manage/trained-models`、`DELETE /modelTF/model-manage/trained-models/{id}` | 训练产物列表和删除 |
|
||||||
| 权重合并 | `/model-manage/merge` | `POST /api/model-manage/merge` | LoRA 合并任务 |
|
| 权重合并 | `/model-manage/merge` | `POST /modelTF/model-manage/merge` | LoRA 合并任务 |
|
||||||
| 模型导出 | 模型列表/详情 | `GET /api/model-manage/trained-models/{model_name}/export` | 导出下载,必要时触发审批 |
|
| 模型导出 | 模型列表/详情 | `GET /modelTF/model-manage/trained-models/{model_name}/export` | 导出下载,必要时触发审批 |
|
||||||
|
|
||||||
### 14.5 数据集与数据处理
|
### 14.5 数据集与数据处理
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 数据集列表 | `/dataset` | `GET /api/dataset-manage`、`DELETE /api/dataset-manage/{id}`、`GET /api/dataset-manage/download/{id}` | 数据集列表、删除、打包下载 |
|
| 数据集列表 | `/dataset` | `GET /modelTF/dataset-manage`、`DELETE /modelTF/dataset-manage/{id}`、`GET /modelTF/dataset-manage/download/{id}` | 数据集列表、删除、打包下载 |
|
||||||
| 数据集创建/编辑 | `/dataset/create`、`/dataset/:id/edit` | `POST /api/dataset-manage`、`PUT /api/dataset-manage/{id}`、`POST /api/dataset-manage/upload/{dataset_id}` | 数据集元数据和文件上传 |
|
| 数据集创建/编辑 | `/dataset/create`、`/dataset/:id/edit` | `POST /modelTF/dataset-manage`、`PUT /modelTF/dataset-manage/{id}`、`POST /modelTF/dataset-manage/upload/{dataset_id}` | 数据集元数据和文件上传 |
|
||||||
| 离线导入数据集 | 数据集创建页或导入弹窗 | `POST /api/import/local-dataset` | 从算力节点目录导入 |
|
| 离线导入数据集 | 数据集创建页或导入弹窗 | `POST /modelTF/import/local-dataset` | 从算力节点目录导入 |
|
||||||
| 数据集预览 | `/dataset/:id/preview` | `GET /api/dataset-manage/preview/{file_id}`、`GET /api/dataset-manage/versions/{file_id}`、`POST /api/dataset-manage/versions/{file_id}`、`PUT /api/dataset-manage/versions/{file_id}/active`、`DELETE /api/dataset-manage/versions/{file_id}/{version_id}` | 文件预览、版本、在线编辑 |
|
| 数据集预览 | `/dataset/:id/preview` | `GET /modelTF/dataset-manage/preview/{file_id}`、`GET /modelTF/dataset-manage/versions/{file_id}`、`POST /modelTF/dataset-manage/versions/{file_id}`、`PUT /modelTF/dataset-manage/versions/{file_id}/active`、`DELETE /modelTF/dataset-manage/versions/{file_id}/{version_id}` | 文件预览、版本、在线编辑 |
|
||||||
| 数据处理列表 | `/data-process` | `GET /api/data-process`、`DELETE /api/data-process/{id}` | 处理任务列表 |
|
| 数据处理列表 | `/data-process` | `GET /modelTF/data-process`、`DELETE /modelTF/data-process/{id}` | 处理任务列表 |
|
||||||
| 数据处理创建向导 | `/data-process/create` | `POST /api/data-process`、`POST /api/data-process/{id}/source-files`、`POST /api/data-process/{id}/preview/build`、`POST /api/data-process/{id}/generate`、`POST /api/data-process/{id}/publish` | 创建、上传、预览、生成、发布 |
|
| 数据处理创建向导 | `/data-process/create` | `POST /modelTF/data-process`、`POST /modelTF/data-process/{id}/source-files`、`POST /modelTF/data-process/{id}/preview/build`、`POST /modelTF/data-process/{id}/generate`、`POST /modelTF/data-process/{id}/publish` | 创建、上传、预览、生成、发布 |
|
||||||
| 数据处理详情 | `/data-process/:id` | `GET /api/data-process/{id}`、`GET /api/data-process/{id}/results`、`GET /api/data-process/{id}/progress`、`GET /api/data-process/{id}/events` | 详情、结果、进度 |
|
| 数据处理详情 | `/data-process/:id` | `GET /modelTF/data-process/{id}`、`GET /modelTF/data-process/{id}/results`、`GET /modelTF/data-process/{id}/progress`、`GET /modelTF/data-process/{id}/events` | 详情、结果、进度 |
|
||||||
| 数据转换 | `/data-convert` | `POST /api/data-convert/jobs`、`GET /api/data-convert/jobs/{id}`、`GET /api/data-convert/jobs/{id}/download` | JSON/JSONL 转换 |
|
| 数据转换 | `/data-convert` | `POST /modelTF/data-convert/jobs`、`GET /modelTF/data-convert/jobs/{id}`、`GET /modelTF/data-convert/jobs/{id}/download` | JSON/JSONL 转换 |
|
||||||
|
|
||||||
### 14.6 微调训练
|
### 14.6 微调训练
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 微调列表 | `/fine-tune` | `GET /api/fine-tune`、`POST /api/fine-tune/stop/{id}`、`DELETE /api/fine-tune/{id}` | 训练任务列表、停止、删除 |
|
| 微调列表 | `/fine-tune` | `GET /modelTF/fine-tune`、`POST /modelTF/fine-tune/stop/{id}`、`DELETE /modelTF/fine-tune/{id}` | 训练任务列表、停止、删除 |
|
||||||
| 微调创建 | `/fine-tune/create` | `GET /api/fine-tune/check-name`、`POST /api/fine-tune`、`POST /api/fine-tune/start`、`GET /api/model-manage`、`GET /api/dataset-manage`、`GET /api/compute/gpus` | 参数配置、GPU 选择、启动训练 |
|
| 微调创建 | `/fine-tune/create` | `GET /modelTF/fine-tune/check-name`、`POST /modelTF/fine-tune`、`POST /modelTF/fine-tune/start`、`GET /modelTF/model-manage`、`GET /modelTF/dataset-manage`、`GET /modelTF/compute/gpus` | 参数配置、GPU 选择、启动训练 |
|
||||||
| 训练详情/日志 | `/training-log/:id` | `GET /api/fine-tune/{id}`、`GET /api/fine-tune/progress/{id}`、`GET /api/fine-tune/{id}/events`、`GET /api/fine-tune/{id}/checkpoints` | 日志、进度、checkpoint |
|
| 训练详情/日志 | `/training-log/:id` | `GET /modelTF/fine-tune/{id}`、`GET /modelTF/fine-tune/progress/{id}`、`GET /modelTF/fine-tune/{id}/events`、`GET /modelTF/fine-tune/{id}/checkpoints` | 日志、进度、checkpoint |
|
||||||
| 恢复/重试训练 | 训练详情页 | `POST /api/fine-tune/{id}/retry`、`POST /api/fine-tune/{id}/resume` | 从 checkpoint 重试或恢复 |
|
| 恢复/重试训练 | 训练详情页 | `POST /modelTF/fine-tune/{id}/retry`、`POST /modelTF/fine-tune/{id}/resume` | 从 checkpoint 重试或恢复 |
|
||||||
| Checkpoint 管理 | 训练详情页、存储管理页 | `DELETE /api/fine-tune/{id}/checkpoints/{checkpoint_id}`、`PUT /api/fine-tune/{id}/checkpoint-retention` | 清理策略和删除 |
|
| Checkpoint 管理 | 训练详情页、存储管理页 | `DELETE /modelTF/fine-tune/{id}/checkpoints/{checkpoint_id}`、`PUT /modelTF/fine-tune/{id}/checkpoint-retention` | 清理策略和删除 |
|
||||||
| TensorBoard | 训练详情页 | `POST /api/fine-tune/tensorboard/start` | 启动 TensorBoard |
|
| TensorBoard | 训练详情页 | `POST /modelTF/fine-tune/tensorboard/start` | 启动 TensorBoard |
|
||||||
|
|
||||||
### 14.7 评测、推理、对比和服务发布
|
### 14.7 评测、推理、对比和服务发布
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 评测列表 | `/model-eval` | `GET /api/model-eval`、`DELETE /api/model-eval/{id}` | 评测任务列表 |
|
| 评测列表 | `/model-eval` | `GET /modelTF/model-eval`、`DELETE /modelTF/model-eval/{id}` | 评测任务列表 |
|
||||||
| 评测创建 | `/model-eval/create` | `POST /api/model-eval/start`、`GET /api/dimension`、`GET /api/model-manage/trained-models`、`GET /api/dataset-manage`、`GET /api/compute/gpus` | 选择模型、数据集、维度、GPU |
|
| 评测创建 | `/model-eval/create` | `POST /modelTF/model-eval/start`、`GET /modelTF/dimension`、`GET /modelTF/model-manage/trained-models`、`GET /modelTF/dataset-manage`、`GET /modelTF/compute/gpus` | 选择模型、数据集、维度、GPU |
|
||||||
| 评测详情 | `/model-eval/:id` | `GET /api/model-eval/{id}`、`GET /api/model-eval/{id}/events` | 综合结果、样本评分 |
|
| 评测详情 | `/model-eval/:id` | `GET /modelTF/model-eval/{id}`、`GET /modelTF/model-eval/{id}/events` | 综合结果、样本评分 |
|
||||||
| 评测维度 | `/model-eval/dimension/:id/edit` | `GET /api/dimension/{id}`、`POST /api/dimension`、`PUT /api/dimension/{id}`、`DELETE /api/dimension/{id}` | 维度和 Prompt 管理 |
|
| 评测维度 | `/model-eval/dimension/:id/edit` | `GET /modelTF/dimension/{id}`、`POST /modelTF/dimension`、`PUT /modelTF/dimension/{id}`、`DELETE /modelTF/dimension/{id}` | 维度和 Prompt 管理 |
|
||||||
| 推理列表 | `/model-inference` | `GET /api/model-compare`、`POST /api/model-compare/{id}/load`、`POST /api/model-compare/{id}/unload` | 推理任务和加载状态 |
|
| 推理列表 | `/model-inference` | `GET /modelTF/model-compare`、`POST /modelTF/model-compare/{id}/load`、`POST /modelTF/model-compare/{id}/unload` | 推理任务和加载状态 |
|
||||||
| 推理创建 | `/model-inference/create` | `POST /api/model-compare`、`GET /api/model-manage`、`GET /api/model-manage/trained-models`、`GET /api/compute/gpus` | 选择模型和 GPU |
|
| 推理创建 | `/model-inference/create` | `POST /modelTF/model-compare`、`GET /modelTF/model-manage`、`GET /modelTF/model-manage/trained-models`、`GET /modelTF/compute/gpus` | 选择模型和 GPU |
|
||||||
| 推理对话 | `/model-inference/chat/:id` | `GET /api/model-compare/{id}`、`POST /api/model-compare/stream-chat`、`POST /api/model-compare/chat-with-port` | 单模型对话 |
|
| 推理对话 | `/model-inference/chat/:id` | `GET /modelTF/model-compare/{id}`、`POST /modelTF/model-compare/stream-chat`、`POST /modelTF/model-compare/chat-with-port` | 单模型对话 |
|
||||||
| 模型对比 | `/model-compare/chat/:id`、`/model-compare/result` | `POST /api/model-chat/batch`、`POST /api/model-chat/local/chat`、`POST /api/model-chat/local/preload`、`POST /api/model-chat/trained/preload` | 多模型对比和预加载 |
|
| 模型对比 | `/model-compare/chat/:id`、`/model-compare/result` | `POST /modelTF/model-chat/batch`、`POST /modelTF/model-chat/local/chat`、`POST /modelTF/model-chat/local/preload`、`POST /modelTF/model-chat/trained/preload` | 多模型对比和预加载 |
|
||||||
| 模型服务治理 | `/model-services`、`/model-services/:id` | `POST /api/approvals`、`GET /api/compute/jobs/{id}`、`GET /api/usage/summary` | 测试/生产服务发布、调用统计、下线审批 |
|
| 模型服务治理 | `/model-services`、`/model-services/:id` | `POST /modelTF/approvals`、`GET /modelTF/compute/jobs/{id}`、`GET /modelTF/usage/summary` | 测试/生产服务发布、调用统计、下线审批 |
|
||||||
|
|
||||||
### 14.8 审批、审计、算力和存储运维
|
### 14.8 审批、审计、算力和存储运维
|
||||||
|
|
||||||
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
| 页面模块 | 路由/入口 | 接口 | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| 审批中心 | `/approvals`、`/approvals/pending`、`/approvals/mine`、`/approvals/:id` | `GET /api/approvals`、`POST /api/approvals`、`GET /api/approvals/{id}`、`POST /api/approvals/{id}/approve`、`POST /api/approvals/{id}/reject`、`POST /api/approvals/{id}/cancel` | 审批列表和审批动作 |
|
| 审批中心 | `/approvals`、`/approvals/pending`、`/approvals/mine`、`/approvals/:id` | `GET /modelTF/approvals`、`POST /modelTF/approvals`、`GET /modelTF/approvals/{id}`、`POST /modelTF/approvals/{id}/approve`、`POST /modelTF/approvals/{id}/reject`、`POST /modelTF/approvals/{id}/cancel` | 审批列表和审批动作 |
|
||||||
| 审批设置 | `/approval-settings` | `GET /api/approval-templates`、`PUT /api/approval-templates/{id}` | 审批模板 |
|
| 审批设置 | `/approval-settings` | `GET /modelTF/approval-templates`、`PUT /modelTF/approval-templates/{id}` | 审批模板 |
|
||||||
| 算力资源 | `/compute`、`/compute/gpus`、`/compute/queue`、`/compute/nodes` | `GET/POST/PUT /api/compute/nodes`、`POST /api/compute/nodes/{id}/test-connection`、`POST /api/compute/nodes/{id}/enable`、`POST /api/compute/nodes/{id}/disable`、`POST /api/compute/nodes/{id}/drain`、`GET /api/compute/gpus`、`GET /api/compute/queue`、`POST /api/compute/jobs/{id}/retry`、`POST /api/compute/jobs/{id}/priority` | GPU、节点、队列、节点权重、标签、维护状态、资源副本 |
|
| 算力资源 | `/compute`、`/compute/gpus`、`/compute/queue`、`/compute/nodes` | `GET/POST/PUT /modelTF/compute/nodes`、`POST /modelTF/compute/nodes/{id}/test-connection`、`POST /modelTF/compute/nodes/{id}/enable`、`POST /modelTF/compute/nodes/{id}/disable`、`POST /modelTF/compute/nodes/{id}/drain`、`GET /modelTF/compute/gpus`、`GET /modelTF/compute/queue`、`POST /modelTF/compute/jobs/{id}/retry`、`POST /modelTF/compute/jobs/{id}/priority` | GPU、节点、队列、节点权重、标签、维护状态、资源副本 |
|
||||||
| 存储管理 | `/storage` | `GET /api/quotas/usage`、`GET /api/files/{id}/download-url`、`GET /api/retention-policies`、`PUT /api/retention-policies/{id}` | 磁盘占用、下载、留存 |
|
| 存储管理 | `/storage` | `GET /modelTF/quotas/usage`、`GET /modelTF/files/{id}/download-url`、`GET /modelTF/retention-policies`、`PUT /modelTF/retention-policies/{id}` | 磁盘占用、下载、留存 |
|
||||||
| 审计中心 | `/audit-logs`、`/login-logs`、`/download-logs` | `GET /api/audit-logs`、`GET /api/login-logs`、`GET /api/download-logs` | 操作、登录、下载审计 |
|
| 审计中心 | `/audit-logs`、`/login-logs`、`/download-logs` | `GET /modelTF/audit-logs`、`GET /modelTF/login-logs`、`GET /modelTF/download-logs` | 操作、登录、下载审计 |
|
||||||
| 训练引擎管理 | `/training-engines` | `GET /api/training-engines`、`GET /api/training-engines/{id}`、`GET /api/training-engines/{id}/schema`、`POST /api/training-engines/{id}/health-check` | 引擎能力和健康 |
|
| 训练引擎管理 | `/training-engines` | `GET /modelTF/training-engines`、`GET /modelTF/training-engines/{id}`、`GET /modelTF/training-engines/{id}/schema`、`POST /modelTF/training-engines/{id}/health-check` | 引擎能力和健康 |
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ LOG_RETENTION_DAYS=10
|
|||||||
"@timestamp": "2026-07-16T13:20:10.123",
|
"@timestamp": "2026-07-16T13:20:10.123",
|
||||||
"level": "INFO",
|
"level": "INFO",
|
||||||
"logger": "app.access",
|
"logger": "app.access",
|
||||||
"message": "request completed method=GET path=/api/v1/health status_code=200 duration_ms=3.12 client=127.0.0.1",
|
"message": "request completed method=GET path=/modelTF/health status_code=200 duration_ms=3.12 client=127.0.0.1",
|
||||||
"module": "logging",
|
"module": "logging",
|
||||||
"function": "request_logging_middleware",
|
"function": "request_logging_middleware",
|
||||||
"file": "D:\\AI\\codex-code\\YG_FT\\backend\\app\\core\\logging.py",
|
"file": "D:\\AI\\codex-code\\YG_FT\\backend\\app\\core\\logging.py",
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ compute/engines/openrlhf/
|
|||||||
|
|
||||||
```env
|
```env
|
||||||
APP_ENV=prod
|
APP_ENV=prod
|
||||||
API_PREFIX=/api
|
MODELTF_ROUTE_PREFIX=/modelTF
|
||||||
DATABASE_URL=postgresql+asyncpg://yg_ft:***@postgres:5432/yg_ft
|
DATABASE_URL=postgresql+asyncpg://yg_ft:***@postgres:5432/yg_ft
|
||||||
REDIS_URL=redis://redis:6379/0
|
REDIS_URL=redis://redis:6379/0
|
||||||
LOG_DIR=/opt/yg-ft/logs/backend
|
LOG_DIR=/opt/yg-ft/logs/backend
|
||||||
@@ -324,7 +324,7 @@ CUDA_VISIBLE_DEVICES=0,1,2,3
|
|||||||
|
|
||||||
- PostgreSQL 已初始化 `docs/postgres-schema.sql`。
|
- PostgreSQL 已初始化 `docs/postgres-schema.sql`。
|
||||||
- Redis 可连通。
|
- Redis 可连通。
|
||||||
- 后端 `GET /api/v1/health` 正常。
|
- 后端 `GET /modelTF/health` 正常。
|
||||||
- Compute API 健康检查正常。
|
- Compute API 健康检查正常。
|
||||||
- Compute Agent 能识别 GPU、显存、CUDA 版本。
|
- Compute Agent 能识别 GPU、显存、CUDA 版本。
|
||||||
- LLaMA-Factory 能在命令行完成最小训练样例。
|
- LLaMA-Factory 能在命令行完成最小训练样例。
|
||||||
|
|||||||
@@ -68,11 +68,11 @@ compute/
|
|||||||
```
|
```
|
||||||
|
|
||||||
已覆盖能力:
|
已覆盖能力:
|
||||||
- `/health` 与 `/api/v1/compute/health` 节点健康检查。
|
- `/modelTF/health` 与 `/modelTF/v1/compute/health` 节点健康检查。
|
||||||
- `/compute/resources/gpus` GPU 状态模拟。
|
- `/modelTF/compute/resources/gpus` GPU 状态模拟。
|
||||||
- `/compute/jobs` 创建、查询、停止训练任务。
|
- `/modelTF/compute/jobs` 创建、查询、停止训练任务。
|
||||||
- `/compute/jobs/{id}/logs` 拉取训练日志与解析指标。
|
- `/modelTF/compute/jobs/{id}/logs` 拉取训练日志与解析指标。
|
||||||
- `/compute/files/upload` 与 `/compute/files/{id}/download` 文件网关占位。
|
- `/modelTF/compute/files/upload` 与 `/modelTF/compute/files/{id}/download` 文件网关占位。
|
||||||
- LLaMA-Factory 参数校验、命令生成、日志指标解析。
|
- LLaMA-Factory 参数校验、命令生成、日志指标解析。
|
||||||
|
|
||||||
设计约定:
|
设计约定:
|
||||||
|
|||||||
@@ -86,14 +86,14 @@ flowchart LR
|
|||||||
|
|
||||||
| 方向 | 接口 | 说明 |
|
| 方向 | 接口 | 说明 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 应用 -> 算力 | `POST /compute/jobs` | 创建训练/评测/数据处理/推理任务 |
|
| 应用 -> 算力 | `POST /modelTF/compute/jobs` | 创建训练/评测/数据处理/推理任务 |
|
||||||
| 应用 -> 算力 | `POST /compute/jobs/{id}/stop` | 停止任务 |
|
| 应用 -> 算力 | `POST /modelTF/compute/jobs/{id}/stop` | 停止任务 |
|
||||||
| 应用 -> 算力 | `GET /compute/jobs/{id}` | 查询任务状态 |
|
| 应用 -> 算力 | `GET /modelTF/compute/jobs/{id}` | 查询任务状态 |
|
||||||
| 应用 -> 算力 | `GET /compute/jobs/{id}/logs` | 拉取日志 |
|
| 应用 -> 算力 | `GET /modelTF/compute/jobs/{id}/logs` | 拉取日志 |
|
||||||
| 应用 -> 算力 | `GET /compute/resources/gpus` | 查询 GPU 状态 |
|
| 应用 -> 算力 | `GET /modelTF/compute/resources/gpus` | 查询 GPU 状态 |
|
||||||
| 应用 -> 算力 | `POST /compute/files/upload` | 上传文件到算力本地磁盘 |
|
| 应用 -> 算力 | `POST /modelTF/compute/files/upload` | 上传文件到算力本地磁盘 |
|
||||||
| 应用 -> 算力 | `GET /compute/files/{object_id}/download` | 下载文件 |
|
| 应用 -> 算力 | `GET /modelTF/compute/files/{object_id}/download` | 下载文件 |
|
||||||
| 应用 -> 算力 | `GET /compute/jobs?status=running` | 定时轮询任务状态、指标、产物索引 |
|
| 应用 -> 算力 | `GET /modelTF/compute/jobs?status=running` | 定时轮询任务状态、指标、产物索引 |
|
||||||
|
|
||||||
## 3. 本地磁盘存储设计
|
## 3. 本地磁盘存储设计
|
||||||
|
|
||||||
@@ -556,54 +556,54 @@ LLaMA-Factory 适配器负责:
|
|||||||
|
|
||||||
租户:
|
租户:
|
||||||
|
|
||||||
- `GET /api/tenants`
|
- `GET /modelTF/tenants`
|
||||||
- `POST /api/tenants`
|
- `POST /modelTF/tenants`
|
||||||
- `GET /api/tenants/{id}`
|
- `GET /modelTF/tenants/{id}`
|
||||||
- `PUT /api/tenants/{id}`
|
- `PUT /modelTF/tenants/{id}`
|
||||||
- `PUT /api/tenants/{id}/quota`
|
- `PUT /modelTF/tenants/{id}/quota`
|
||||||
- `PUT /api/tenants/{id}/retention-policy`
|
- `PUT /modelTF/tenants/{id}/retention-policy`
|
||||||
|
|
||||||
项目:
|
项目:
|
||||||
|
|
||||||
- `GET /api/projects`
|
- `GET /modelTF/projects`
|
||||||
- `POST /api/projects`
|
- `POST /modelTF/projects`
|
||||||
- `GET /api/projects/{id}`
|
- `GET /modelTF/projects/{id}`
|
||||||
- `PUT /api/projects/{id}`
|
- `PUT /modelTF/projects/{id}`
|
||||||
- `POST /api/projects/{id}/archive`
|
- `POST /modelTF/projects/{id}/archive`
|
||||||
- `GET /api/projects/{id}/members`
|
- `GET /modelTF/projects/{id}/members`
|
||||||
- `POST /api/projects/{id}/members`
|
- `POST /modelTF/projects/{id}/members`
|
||||||
- `PUT /api/projects/{id}/members/{user_id}`
|
- `PUT /modelTF/projects/{id}/members/{user_id}`
|
||||||
- `DELETE /api/projects/{id}/members/{user_id}`
|
- `DELETE /modelTF/projects/{id}/members/{user_id}`
|
||||||
|
|
||||||
资源授权:
|
资源授权:
|
||||||
|
|
||||||
- `GET /api/resources/{resource_type}/{resource_id}/acl`
|
- `GET /modelTF/resources/{resource_type}/{resource_id}/acl`
|
||||||
- `PUT /api/resources/{resource_type}/{resource_id}/acl`
|
- `PUT /modelTF/resources/{resource_type}/{resource_id}/acl`
|
||||||
- `POST /api/resources/{resource_type}/{resource_id}/share`
|
- `POST /modelTF/resources/{resource_type}/{resource_id}/share`
|
||||||
|
|
||||||
审批:
|
审批:
|
||||||
|
|
||||||
- `GET /api/approvals`
|
- `GET /modelTF/approvals`
|
||||||
- `POST /api/approvals`
|
- `POST /modelTF/approvals`
|
||||||
- `GET /api/approvals/{id}`
|
- `GET /modelTF/approvals/{id}`
|
||||||
- `POST /api/approvals/{id}/approve`
|
- `POST /modelTF/approvals/{id}/approve`
|
||||||
- `POST /api/approvals/{id}/reject`
|
- `POST /modelTF/approvals/{id}/reject`
|
||||||
- `POST /api/approvals/{id}/cancel`
|
- `POST /modelTF/approvals/{id}/cancel`
|
||||||
|
|
||||||
算力:
|
算力:
|
||||||
|
|
||||||
- `GET /api/compute/nodes`
|
- `GET /modelTF/compute/nodes`
|
||||||
- `GET /api/compute/gpus`
|
- `GET /modelTF/compute/gpus`
|
||||||
- `GET /api/compute/queue`
|
- `GET /modelTF/compute/queue`
|
||||||
- `POST /api/compute/jobs/{id}/retry`
|
- `POST /modelTF/compute/jobs/{id}/retry`
|
||||||
- `POST /api/compute/jobs/{id}/priority`
|
- `POST /modelTF/compute/jobs/{id}/priority`
|
||||||
|
|
||||||
训练引擎:
|
训练引擎:
|
||||||
|
|
||||||
- `GET /api/training-engines`
|
- `GET /modelTF/training-engines`
|
||||||
- `GET /api/training-engines/{id}`
|
- `GET /modelTF/training-engines/{id}`
|
||||||
- `POST /api/training-engines/{id}/health-check`
|
- `POST /modelTF/training-engines/{id}/health-check`
|
||||||
- `GET /api/training-engines/{id}/schema`
|
- `GET /modelTF/training-engines/{id}/schema`
|
||||||
|
|
||||||
## 10. 端到端业务流程
|
## 10. 端到端业务流程
|
||||||
|
|
||||||
|
|||||||
@@ -412,11 +412,11 @@ YG_FT/
|
|||||||
|
|
||||||
联调接口:
|
联调接口:
|
||||||
|
|
||||||
- `GET /api/users`
|
- `GET /modelTF/users`
|
||||||
- `POST /api/users`
|
- `POST /modelTF/users`
|
||||||
- `PUT /api/users/{id}`
|
- `PUT /modelTF/users/{id}`
|
||||||
- `DELETE /api/users/{id}`
|
- `DELETE /modelTF/users/{id}`
|
||||||
- `PUT /api/users/{id}/password`
|
- `PUT /modelTF/users/{id}/password`
|
||||||
|
|
||||||
#### 项目空间
|
#### 项目空间
|
||||||
|
|
||||||
@@ -439,12 +439,12 @@ YG_FT/
|
|||||||
|
|
||||||
联调接口:
|
联调接口:
|
||||||
|
|
||||||
- `GET /api/projects`
|
- `GET /modelTF/projects`
|
||||||
- `POST /api/projects`
|
- `POST /modelTF/projects`
|
||||||
- `GET /api/projects/{id}`
|
- `GET /modelTF/projects/{id}`
|
||||||
- `PUT /api/projects/{id}`
|
- `PUT /modelTF/projects/{id}`
|
||||||
- `GET /api/projects/{id}/members`
|
- `GET /modelTF/projects/{id}/members`
|
||||||
- `POST /api/projects/{id}/members`
|
- `POST /modelTF/projects/{id}/members`
|
||||||
|
|
||||||
#### 审批中心
|
#### 审批中心
|
||||||
|
|
||||||
@@ -466,10 +466,10 @@ YG_FT/
|
|||||||
|
|
||||||
联调接口:
|
联调接口:
|
||||||
|
|
||||||
- `GET /api/approvals`
|
- `GET /modelTF/approvals`
|
||||||
- `POST /api/approvals/{id}/approve`
|
- `POST /modelTF/approvals/{id}/approve`
|
||||||
- `POST /api/approvals/{id}/reject`
|
- `POST /modelTF/approvals/{id}/reject`
|
||||||
- `POST /api/approvals/{id}/cancel`
|
- `POST /modelTF/approvals/{id}/cancel`
|
||||||
|
|
||||||
#### 算力资源中心
|
#### 算力资源中心
|
||||||
|
|
||||||
@@ -493,10 +493,10 @@ YG_FT/
|
|||||||
|
|
||||||
联调接口:
|
联调接口:
|
||||||
|
|
||||||
- `GET /api/compute/gpus`
|
- `GET /modelTF/compute/gpus`
|
||||||
- `GET /api/compute/queue`
|
- `GET /modelTF/compute/queue`
|
||||||
- `GET /api/compute/nodes`
|
- `GET /modelTF/compute/nodes`
|
||||||
- `GET /api/quotas/usage`
|
- `GET /modelTF/quotas/usage`
|
||||||
|
|
||||||
### 5.2 现有页面改造
|
### 5.2 现有页面改造
|
||||||
|
|
||||||
@@ -532,9 +532,9 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `POST /api/login`
|
- `POST /modelTF/login`
|
||||||
- `POST /api/logout`
|
- `POST /modelTF/logout`
|
||||||
- `GET /api/me`
|
- `GET /modelTF/me`
|
||||||
|
|
||||||
#### Tenant / Project 模块
|
#### Tenant / Project 模块
|
||||||
|
|
||||||
@@ -548,9 +548,9 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `/api/tenants`
|
- `/modelTF/tenants`
|
||||||
- `/api/projects`
|
- `/modelTF/projects`
|
||||||
- `/api/projects/{id}/members`
|
- `/modelTF/projects/{id}/members`
|
||||||
|
|
||||||
#### Resource ACL 模块
|
#### Resource ACL 模块
|
||||||
|
|
||||||
@@ -562,8 +562,8 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `GET /api/resources/{resource_type}/{resource_id}/acl`
|
- `GET /modelTF/resources/{resource_type}/{resource_id}/acl`
|
||||||
- `PUT /api/resources/{resource_type}/{resource_id}/acl`
|
- `PUT /modelTF/resources/{resource_type}/{resource_id}/acl`
|
||||||
|
|
||||||
#### Compute Gateway 模块
|
#### Compute Gateway 模块
|
||||||
|
|
||||||
@@ -581,16 +581,16 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `GET /api/compute/gpus`
|
- `GET /modelTF/compute/gpus`
|
||||||
- `GET /api/compute/queue`
|
- `GET /modelTF/compute/queue`
|
||||||
- `GET/POST/PUT /api/compute/nodes`
|
- `GET/POST/PUT /modelTF/compute/nodes`
|
||||||
- `POST /api/compute/nodes/{id}/test-connection`
|
- `POST /modelTF/compute/nodes/{id}/test-connection`
|
||||||
- `POST /api/compute/nodes/{id}/enable`
|
- `POST /modelTF/compute/nodes/{id}/enable`
|
||||||
- `POST /api/compute/nodes/{id}/disable`
|
- `POST /modelTF/compute/nodes/{id}/disable`
|
||||||
- `POST /api/compute/nodes/{id}/drain`
|
- `POST /modelTF/compute/nodes/{id}/drain`
|
||||||
- `GET /api/compute/nodes/{id}/replicas`
|
- `GET /modelTF/compute/nodes/{id}/replicas`
|
||||||
- `POST /api/internal/compute-sync/jobs/poll`
|
- `POST /modelTF/internal/compute-sync/jobs/poll`
|
||||||
- `POST /api/internal/compute-sync/resources`
|
- `POST /modelTF/internal/compute-sync/resources`
|
||||||
|
|
||||||
#### Fine Tune 模块
|
#### Fine Tune 模块
|
||||||
|
|
||||||
@@ -606,7 +606,7 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- 沿用 `docs/backend-api-design.md` 的 `/api/fine-tune` 系列。
|
- 沿用 `docs/backend-api-design.md` 的 `/modelTF/fine-tune` 系列。
|
||||||
|
|
||||||
#### Approval 模块
|
#### Approval 模块
|
||||||
|
|
||||||
@@ -619,8 +619,8 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `/api/approvals`
|
- `/modelTF/approvals`
|
||||||
- `/api/approval-templates`
|
- `/modelTF/approval-templates`
|
||||||
|
|
||||||
#### Audit 模块
|
#### Audit 模块
|
||||||
|
|
||||||
@@ -634,8 +634,8 @@ YG_FT/
|
|||||||
|
|
||||||
交付接口:
|
交付接口:
|
||||||
|
|
||||||
- `GET /api/audit-logs`
|
- `GET /modelTF/audit-logs`
|
||||||
- `GET /api/login-logs`
|
- `GET /modelTF/login-logs`
|
||||||
|
|
||||||
### 6.2 P1 模块
|
### 6.2 P1 模块
|
||||||
|
|
||||||
@@ -660,13 +660,13 @@ YG_FT/
|
|||||||
|
|
||||||
接口:
|
接口:
|
||||||
|
|
||||||
- `POST /compute/jobs`
|
- `POST /modelTF/compute/jobs`
|
||||||
- `GET /compute/jobs/{id}`
|
- `GET /modelTF/compute/jobs/{id}`
|
||||||
- `POST /compute/jobs/{id}/stop`
|
- `POST /modelTF/compute/jobs/{id}/stop`
|
||||||
- `GET /compute/jobs/{id}/logs`
|
- `GET /modelTF/compute/jobs/{id}/logs`
|
||||||
- `GET /compute/resources/gpus`
|
- `GET /modelTF/compute/resources/gpus`
|
||||||
- `POST /compute/files/upload`
|
- `POST /modelTF/compute/files/upload`
|
||||||
- `GET /compute/files/{id}/download`
|
- `GET /modelTF/compute/files/{id}/download`
|
||||||
|
|
||||||
职责:
|
职责:
|
||||||
|
|
||||||
@@ -1044,66 +1044,66 @@ YG_FT/
|
|||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 登录和会话 | `/login` | 登录表单、错误提示、登录后跳转、会话过期处理 | `POST /api/login`、`GET /api/me`、JWT 中间件 | `users`、`login_sessions`、`v_user_effective_permissions` | 无 |
|
| 登录和会话 | `/login` | 登录表单、错误提示、登录后跳转、会话过期处理 | `POST /modelTF/login`、`GET /modelTF/me`、JWT 中间件 | `users`、`login_sessions`、`v_user_effective_permissions` | 无 |
|
||||||
| 主布局和权限菜单 | `/` | 菜单按权限过滤、用户信息、项目切换器 | 当前用户权限、当前项目上下文 | `permissions`、`role_permissions`、`project_members` | 登录 |
|
| 主布局和权限菜单 | `/` | 菜单按权限过滤、用户信息、项目切换器 | 当前用户权限、当前项目上下文 | `permissions`、`role_permissions`、`project_members` | 登录 |
|
||||||
| 用户中心 | `/user-settings`、`/user-settings/create`、`/user-settings/:id/permission` | 用户列表、创建、禁用、重置密码、页面权限 | `/api/users` 系列 | `users`、`user_permissions`、`tenant_users` | 租户/项目 |
|
| 用户中心 | `/user-settings`、`/user-settings/create`、`/user-settings/:id/permission` | 用户列表、创建、禁用、重置密码、页面权限 | `/modelTF/users` 系列 | `users`、`user_permissions`、`tenant_users` | 租户/项目 |
|
||||||
| 无权限页 | `/permission-denied` | 无权限说明、返回入口 | 权限异常返回统一错误码 | 无新增 | 主布局 |
|
| 无权限页 | `/permission-denied` | 无权限说明、返回入口 | 权限异常返回统一错误码 | 无新增 | 主布局 |
|
||||||
|
|
||||||
### 16.2 租户和项目空间
|
### 16.2 租户和项目空间
|
||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 租户管理 | `/tenants`、`/tenants/:id` | 租户列表、创建/禁用、配额、留存策略 | `/api/tenants` 系列 | `tenants`、`tenant_users`、`quotas`、`retention_policies` | 用户中心 |
|
| 租户管理 | `/tenants`、`/tenants/:id` | 租户列表、创建/禁用、配额、留存策略 | `/modelTF/tenants` 系列 | `tenants`、`tenant_users`、`quotas`、`retention_policies` | 用户中心 |
|
||||||
| 项目列表和详情 | `/projects`、`/projects/:id` | 项目列表、创建、归档、资源概览 | `/api/projects` 系列 | `projects`、`quota_usage` | 租户 |
|
| 项目列表和详情 | `/projects`、`/projects/:id` | 项目列表、创建、归档、资源概览 | `/modelTF/projects` 系列 | `projects`、`quota_usage` | 租户 |
|
||||||
| 项目成员 | `/projects/:id/members` | 成员列表、添加成员、角色选择 | `/api/projects/{id}/members` 系列 | `project_members` | 项目 |
|
| 项目成员 | `/projects/:id/members` | 成员列表、添加成员、角色选择 | `/modelTF/projects/{id}/members` 系列 | `project_members` | 项目 |
|
||||||
| 资源授权 | `/projects/:id/permissions`、资源详情弹窗 | ACL 表格、用户/角色授权 | `/api/resources/{type}/{id}/acl` | `resource_acl` | 项目、资源表 |
|
| 资源授权 | `/projects/:id/permissions`、资源详情弹窗 | ACL 表格、用户/角色授权 | `/modelTF/resources/{type}/{id}/acl` | `resource_acl` | 项目、资源表 |
|
||||||
|
|
||||||
### 16.3 数据集和数据处理
|
### 16.3 数据集和数据处理
|
||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 数据集列表 | `/dataset` | 列表、搜索、项目过滤、下载、删除审批入口 | `GET/DELETE /api/dataset-manage` | `datasets`、`resource_acl`、`approval_instances` | 项目上下文 |
|
| 数据集列表 | `/dataset` | 列表、搜索、项目过滤、下载、删除审批入口 | `GET/DELETE /modelTF/dataset-manage` | `datasets`、`resource_acl`、`approval_instances` | 项目上下文 |
|
||||||
| 数据集创建/上传 | `/dataset/create`、`/dataset/:id/edit` | 表单、分片上传、离线导入弹窗 | `POST /api/dataset-manage`、`POST /api/files/upload-session`、`POST /api/import/local-dataset` | `datasets`、`dataset_files`、`storage_objects`、`file_upload_sessions`、`local_import_jobs` | 文件网关 |
|
| 数据集创建/上传 | `/dataset/create`、`/dataset/:id/edit` | 表单、分片上传、离线导入弹窗 | `POST /modelTF/dataset-manage`、`POST /modelTF/files/upload-session`、`POST /modelTF/import/local-dataset` | `datasets`、`dataset_files`、`storage_objects`、`file_upload_sessions`、`local_import_jobs` | 文件网关 |
|
||||||
| 数据集预览/版本 | `/dataset/:id/preview` | 文件列表、内容预览、版本栏、在线编辑 | `/api/dataset-manage/preview`、`/versions` 系列 | `dataset_file_versions`、`dataset_records` | 数据集上传 |
|
| 数据集预览/版本 | `/dataset/:id/preview` | 文件列表、内容预览、版本栏、在线编辑 | `/modelTF/dataset-manage/preview`、`/versions` 系列 | `dataset_file_versions`、`dataset_records` | 数据集上传 |
|
||||||
| 数据处理列表 | `/data-process` | 任务列表、状态、输出数据集跳转 | `/api/data-process` 系列 | `data_process_tasks` | 数据集 |
|
| 数据处理列表 | `/data-process` | 任务列表、状态、输出数据集跳转 | `/modelTF/data-process` 系列 | `data_process_tasks` | 数据集 |
|
||||||
| 数据处理创建向导 | `/data-process/create` | 任务配置、模型选择、源文件、预览切片、生成、结果编辑、发布 | `/api/data-process/{id}/source-files`、`preview/build`、`generate`、`publish` | `data_process_source_files`、`data_process_preview_items`、`data_process_results` | 数据集、模型、文件网关 |
|
| 数据处理创建向导 | `/data-process/create` | 任务配置、模型选择、源文件、预览切片、生成、结果编辑、发布 | `/modelTF/data-process/{id}/source-files`、`preview/build`、`generate`、`publish` | `data_process_source_files`、`data_process_preview_items`、`data_process_results` | 数据集、模型、文件网关 |
|
||||||
| 数据处理详情 | `/data-process/:id` | 运行统计、失败原因、结果表格 | `GET /api/data-process/{id}`、`results`、`events` | `data_process_tasks`、`data_process_results` | 数据处理任务 |
|
| 数据处理详情 | `/data-process/:id` | 运行统计、失败原因、结果表格 | `GET /modelTF/data-process/{id}`、`results`、`events` | `data_process_tasks`、`data_process_results` | 数据处理任务 |
|
||||||
| 数据转换 | `/data-convert` | 文件上传、转换状态、下载 | `/api/data-convert/jobs` 系列 | `data_convert_jobs`、`storage_objects` | 文件网关 |
|
| 数据转换 | `/data-convert` | 文件上传、转换状态、下载 | `/modelTF/data-convert/jobs` 系列 | `data_convert_jobs`、`storage_objects` | 文件网关 |
|
||||||
|
|
||||||
### 16.4 模型管理和训练
|
### 16.4 模型管理和训练
|
||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 模型列表 | `/model-manage` | 列表、用途标签、授权、导出、删除审批 | `/api/model-manage` 系列 | `models`、`trained_models`、`resource_acl` | 项目上下文 |
|
| 模型列表 | `/model-manage` | 列表、用途标签、授权、导出、删除审批 | `/modelTF/model-manage` 系列 | `models`、`trained_models`、`resource_acl` | 项目上下文 |
|
||||||
| 模型创建/离线导入 | `/model-manage/create`、`/model-manage/:id/edit` | 本地/API 模型表单、离线导入 | `POST/PUT /api/model-manage`、`POST /api/import/local-model` | `models`、`storage_objects`、`local_import_jobs` | 文件网关 |
|
| 模型创建/离线导入 | `/model-manage/create`、`/model-manage/:id/edit` | 本地/API 模型表单、离线导入 | `POST/PUT /modelTF/model-manage`、`POST /modelTF/import/local-model` | `models`、`storage_objects`、`local_import_jobs` | 文件网关 |
|
||||||
| 权重合并 | `/model-manage/merge` | 选择训练产物、合并状态 | `POST /api/model-manage/merge`、`GET /api/compute/jobs/{id}` | `trained_models`、`compute_jobs` | 算力平台 |
|
| 权重合并 | `/model-manage/merge` | 选择训练产物、合并状态 | `POST /modelTF/model-manage/merge`、`GET /modelTF/compute/jobs/{id}` | `trained_models`、`compute_jobs` | 算力平台 |
|
||||||
| 微调列表 | `/fine-tune` | 任务列表、停止、删除、日志入口 | `/api/fine-tune` 系列 | `fine_tune_tasks` | 模型、数据集 |
|
| 微调列表 | `/fine-tune` | 任务列表、停止、删除、日志入口 | `/modelTF/fine-tune` 系列 | `fine_tune_tasks` | 模型、数据集 |
|
||||||
| 微调创建 | `/fine-tune/create` | 训练参数、GPU 选择、命令预览、审批提示 | `POST /api/fine-tune`、`POST /api/fine-tune/start`、`GET /api/compute/gpus` | `fine_tune_tasks`、`compute_jobs`、`gpu_allocations` | 算力平台、审批 |
|
| 微调创建 | `/fine-tune/create` | 训练参数、GPU 选择、命令预览、审批提示 | `POST /modelTF/fine-tune`、`POST /modelTF/fine-tune/start`、`GET /modelTF/compute/gpus` | `fine_tune_tasks`、`compute_jobs`、`gpu_allocations` | 算力平台、审批 |
|
||||||
| 训练日志和 checkpoint | `/training-log/:id` | 日志 tail、指标曲线、checkpoint、恢复/重试 | `GET /api/fine-tune/{id}/overview`、`checkpoints`、`resume`、`retry` | `fine_tune_metrics`、`fine_tune_checkpoints` | 训练任务 |
|
| 训练日志和 checkpoint | `/training-log/:id` | 日志 tail、指标曲线、checkpoint、恢复/重试 | `GET /modelTF/fine-tune/{id}/overview`、`checkpoints`、`resume`、`retry` | `fine_tune_metrics`、`fine_tune_checkpoints` | 训练任务 |
|
||||||
| 训练引擎管理 | `/training-engines` | 引擎列表、schema、健康检查 | `/api/training-engines` 系列 | `training_engines` | 算力 Agent |
|
| 训练引擎管理 | `/training-engines` | 引擎列表、schema、健康检查 | `/modelTF/training-engines` 系列 | `training_engines` | 算力 Agent |
|
||||||
|
|
||||||
### 16.5 评测、推理和发布
|
### 16.5 评测、推理和发布
|
||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 评测列表 | `/model-eval` | 列表、分数、状态、删除 | `/api/model-eval` 系列 | `eval_tasks` | 模型、数据集 |
|
| 评测列表 | `/model-eval` | 列表、分数、状态、删除 | `/modelTF/model-eval` 系列 | `eval_tasks` | 模型、数据集 |
|
||||||
| 评测创建 | `/model-eval/create` | 模型/数据集/维度/GPU 选择、指标配置 | `POST /api/model-eval/start`、`GET /api/dimension` | `eval_tasks`、`eval_dimensions`、`compute_jobs` | 算力平台 |
|
| 评测创建 | `/model-eval/create` | 模型/数据集/维度/GPU 选择、指标配置 | `POST /modelTF/model-eval/start`、`GET /modelTF/dimension` | `eval_tasks`、`eval_dimensions`、`compute_jobs` | 算力平台 |
|
||||||
| 评测详情 | `/model-eval/:id` | 综合评价、维度汇总、样本结果、人工复核预留 | `GET /api/model-eval/{id}`、`events` | `eval_sample_results`、`eval_dimension_summaries` | 评测任务 |
|
| 评测详情 | `/model-eval/:id` | 综合评价、维度汇总、样本结果、人工复核预留 | `GET /modelTF/model-eval/{id}`、`events` | `eval_sample_results`、`eval_dimension_summaries` | 评测任务 |
|
||||||
| 评测维度 | `/model-eval/dimension/:id/edit` | 维度表单、Prompt 编辑 | `/api/dimension` 系列 | `eval_dimensions` | 模型管理 |
|
| 评测维度 | `/model-eval/dimension/:id/edit` | 维度表单、Prompt 编辑 | `/modelTF/dimension` 系列 | `eval_dimensions` | 模型管理 |
|
||||||
| 推理列表/创建 | `/model-inference`、`/model-inference/create` | 任务列表、模型选择、GPU 选择、加载状态 | `/api/model-compare`、`load/unload` | `inference_tasks`、`inference_task_models` | 算力平台 |
|
| 推理列表/创建 | `/model-inference`、`/model-inference/create` | 任务列表、模型选择、GPU 选择、加载状态 | `/modelTF/model-compare`、`load/unload` | `inference_tasks`、`inference_task_models` | 算力平台 |
|
||||||
| 推理对话 | `/model-inference/chat/:id` | 单模型流式对话、历史消息 | `stream-chat`、`chat-with-port` | `chat_sessions`、`chat_messages` | 推理服务 |
|
| 推理对话 | `/model-inference/chat/:id` | 单模型流式对话、历史消息 | `stream-chat`、`chat-with-port` | `chat_sessions`、`chat_messages` | 推理服务 |
|
||||||
| 模型对比 | `/model-compare/chat/:id`、`/model-compare/result` | 多模型对话、结果对比 | `/api/model-chat/*` | `chat_sessions`、`chat_messages` | 推理任务 |
|
| 模型对比 | `/model-compare/chat/:id`、`/model-compare/result` | 多模型对话、结果对比 | `/modelTF/model-chat/*` | `chat_sessions`、`chat_messages` | 推理任务 |
|
||||||
| 模型服务治理 | `/model-services`、`/model-services/:id` | 测试/生产服务、发布申请、下线、调用统计 | `POST /api/approvals`、`GET /api/usage/summary` | `model_services`、`approval_instances` | 审批、算力平台 |
|
| 模型服务治理 | `/model-services`、`/model-services/:id` | 测试/生产服务、发布申请、下线、调用统计 | `POST /modelTF/approvals`、`GET /modelTF/usage/summary` | `model_services`、`approval_instances` | 审批、算力平台 |
|
||||||
|
|
||||||
### 16.6 审批、审计、算力和存储运维
|
### 16.6 审批、审计、算力和存储运维
|
||||||
|
|
||||||
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
| 工作包 | 页面/路由 | 前端开发 | 后端开发 | DB 关联 | 依赖 |
|
||||||
| --- | --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- | --- |
|
||||||
| 审批中心 | `/approvals`、`/approvals/pending`、`/approvals/mine`、`/approvals/:id` | 审批列表、详情、通过/驳回/撤回 | `/api/approvals` 系列 | `approval_instances`、`approval_steps` | 用户、项目 |
|
| 审批中心 | `/approvals`、`/approvals/pending`、`/approvals/mine`、`/approvals/:id` | 审批列表、详情、通过/驳回/撤回 | `/modelTF/approvals` 系列 | `approval_instances`、`approval_steps` | 用户、项目 |
|
||||||
| 审批模板 | `/approval-settings` | 动作策略、审批人规则、超时配置 | `/api/approval-templates` 系列 | `approval_templates` | 租户/项目 |
|
| 审批模板 | `/approval-settings` | 动作策略、审批人规则、超时配置 | `/modelTF/approval-templates` 系列 | `approval_templates` | 租户/项目 |
|
||||||
| 算力资源中心 | `/compute`、`/compute/gpus`、`/compute/queue`、`/compute/nodes` | GPU 卡片、节点状态、队列、优先级、节点新增/编辑、连接测试、启用/禁用、维护模式、节点权重/标签、本地资源副本 | `/api/compute/*`、`/compute/*` 内部接口 | `compute_nodes`、`compute_node_engines`、`gpu_devices`、`compute_jobs`、`gpu_allocations`、`resource_replicas`、`resource_sync_jobs` | Compute API/Agent/File Gateway |
|
| 算力资源中心 | `/compute`、`/compute/gpus`、`/compute/queue`、`/compute/nodes` | GPU 卡片、节点状态、队列、优先级、节点新增/编辑、连接测试、启用/禁用、维护模式、节点权重/标签、本地资源副本 | `/modelTF/compute/*`、`/modelTF/compute/*` 内部接口 | `compute_nodes`、`compute_node_engines`、`gpu_devices`、`compute_jobs`、`gpu_allocations`、`resource_replicas`、`resource_sync_jobs` | Compute API/Agent/File Gateway |
|
||||||
| 存储管理 | `/storage` | 磁盘占用、大文件、临时文件、checkpoint 清理 | `GET /api/quotas/usage`、`GET/PUT /api/retention-policies` | `storage_nodes`、`storage_objects`、`cleanup_jobs`、`retention_policies` | 文件网关 |
|
| 存储管理 | `/storage` | 磁盘占用、大文件、临时文件、checkpoint 清理 | `GET /modelTF/quotas/usage`、`GET/PUT /modelTF/retention-policies` | `storage_nodes`、`storage_objects`、`cleanup_jobs`、`retention_policies` | 文件网关 |
|
||||||
| 审计中心 | `/audit-logs`、`/login-logs`、`/download-logs` | 筛选、详情、导出 | `GET /api/audit-logs`、`GET /api/login-logs`、`GET /api/download-logs` | `audit_logs`、`login_sessions` | 审计中间件 |
|
| 审计中心 | `/audit-logs`、`/login-logs`、`/download-logs` | 筛选、详情、导出 | `GET /modelTF/audit-logs`、`GET /modelTF/login-logs`、`GET /modelTF/download-logs` | `audit_logs`、`login_sessions` | 审计中间件 |
|
||||||
|
|
||||||
### 16.7 页面开发优先级建议
|
### 16.7 页面开发优先级建议
|
||||||
|
|
||||||
|
|||||||
@@ -89,10 +89,10 @@ export const downloadFileUrl = (
|
|||||||
fileId: string | number,
|
fileId: string | number,
|
||||||
versionId?: string,
|
versionId?: string,
|
||||||
) => {
|
) => {
|
||||||
const baseUrl = `/api/dataset-manage/download/${datasetId}/${fileId}`
|
const baseUrl = `/modelTF/dataset-manage/download/${datasetId}/${fileId}`
|
||||||
return versionId ? `${baseUrl}?version_id=${encodeURIComponent(versionId)}` : baseUrl
|
return versionId ? `${baseUrl}?version_id=${encodeURIComponent(versionId)}` : baseUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打包下载数据集 URL */
|
/** 打包下载数据集 URL */
|
||||||
export const downloadDatasetUrl = (datasetId: string | number) =>
|
export const downloadDatasetUrl = (datasetId: string | number) =>
|
||||||
`/api/dataset-manage/download/${datasetId}`
|
`/modelTF/dataset-manage/download/${datasetId}`
|
||||||
|
|||||||
@@ -45,4 +45,4 @@ export const mergeModel = (data: {
|
|||||||
|
|
||||||
/** 导出已训练模型权重 */
|
/** 导出已训练模型权重 */
|
||||||
export const exportModelUrl = (modelName: string) =>
|
export const exportModelUrl = (modelName: string) =>
|
||||||
`/api/model-manage/trained-models/${encodeURIComponent(modelName)}/export`
|
`/modelTF/model-manage/trained-models/${encodeURIComponent(modelName)}/export`
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ export interface ApiResult<T = any> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const service: AxiosInstance = axios.create({
|
const service: AxiosInstance = axios.create({
|
||||||
// Use a relative path; Vite proxies /api to http://localhost:17861 in local development.
|
// Use a relative path; Vite proxies /modelTF to http://localhost:17861 in local development.
|
||||||
baseURL: '/api',
|
baseURL: '/modelTF',
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ export default defineConfig({
|
|||||||
server: {
|
server: {
|
||||||
port: 16801,
|
port: 16801,
|
||||||
proxy: {
|
proxy: {
|
||||||
// Frontend uses /api and proxies to the local five-digit backend port.
|
// Frontend uses /modelTF and proxies to the local five-digit backend port.
|
||||||
'/api': {
|
'/modelTF': {
|
||||||
target: 'http://localhost:17861',
|
target: 'http://localhost:17861',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user