jim800121chen 4d381c0b50 feat(task-scheduler): Phase 1 — modularize server + add OAuth/JWKS + /api/v1/* routes
Refactor server.js (647 → 99 lines) into 30+ modules under src/:
- auth/: JWKS validation, JWT middleware, OAuth client_credentials
- routes/v1/: jobs (POST/GET/:id) + promote with input validation
- routes/legacy.js: existing /jobs multipart path (backward compatible)
- services/: jobService, healthService, sseService, statusMapper,
  doneListener
- middleware/: requestId, errorHandler, perClientRateLimit,
  uploadConcurrency, upload (multer + storage)
- redis/: Lua scripts for atomic claim/release_active_job
- storage/: local + minio adapters; fileAccessAgent/: PUT promote client
- config.js: env var validation with fail-fast

Phase 1 features (T1–T11):
- T1 Auth middleware + JWKS (Member Center OAuth2 resource server)
- T2 OAuth client (Member Center client_credentials, Basic auth)
- T3 /api/v1/* router skeleton
- T4 server.js refactor (legacy endpoints fully preserved, real-Redis
  regression verified — existing worker consumer group untouched)
- T5 POST /api/v1/jobs (multipart, OWASP-audited, 2 Critical / 6 Major
  fixed; Risk-A/B documented as accepted)
- T6 GET /api/v1/jobs + GET /:id (cursor pagination, ETag, IDOR-safe)
- T7 POST /jobs/:id/promote (FAA PUT with own service token, 300s
  timeout, fail-fast on missing FAA URL)
- T8 /health upgrade (healthy/degraded/unhealthy + 30s background cache)
- T9 stage_timings (release_active_job in terminal states)
- T10 env + Docker integration (MULTIPART_* + concurrency limiter)
- T11 README (498 lines) + OpenAPI 3.0 spec (1588 lines)

Tests: 630 pass across 29 suites. Updated Dockerfile + .dockerignore +
docker-compose.yml env passthrough (no hardcoded secrets, fail-fast on
missing required vars).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 10:55:05 +08:00
2026-01-28 06:16:04 +00:00
2026-01-28 06:16:04 +00:00
2026-01-28 06:16:04 +00:00
2026-01-28 06:16:04 +00:00
2026-01-28 06:16:04 +00:00
2026-01-28 06:16:04 +00:00

Kneron Toolchain Convert Orchestrator

本專案實作「Crash 即 Reset」的 Kneron Toolchain 轉換流程:
ONNX → BIE → NEF。系統以 Scheduler 為控制面,搭配 Worker Pool 與 MinIO 交換產物。
架構以 docs/Design.md 為準。

核心設計Crash Reset

  • Redis 與 Queue 都是易失性,重啟即清空。
  • Scheduler / Worker 不做任務復原。
  • Crash 後需重新送出任務。

元件(目標架構)

  • Web UI上傳 model/quant、查狀態、下載結果。
  • Task Scheduler建立 job、更新狀態、派發任務、接收完成事件。
  • Worker PoolsONNX / BIE / NEF Worker無狀態、pull-based。
  • Redis暫存 job 狀態(不保證持久)。
  • Queue任務/完成事件(不保證持久)。
  • MinIO跨 Worker 的 input/output/log 存放。

Job 流程

  1. UI 建立 job並上傳 input 到 MinIO
  2. Scheduler 推入 queue:onnx
  3. ONNX Worker 執行完成
  4. Scheduler 推入 queue:bie
  5. BIE Worker 執行完成
  6. Scheduler 推入 queue:nef
  7. NEF Worker 執行完成
  8. Scheduler 標記 COMPLETED

Worker API Flags可選

這些旗標用於控制 evaluator / simulator 步驟。皆有預設值,不填不影響既有流程。

  • ONNX /api/onnx/process
    • enable_evaluate (default: false): 是否執行 IP evaluator原 Web GUI 流程為 OFF
    • enable_sim_fp (default: false): 是否執行浮點 E2E 模擬(尚未接線)
  • BIE /api/bie/process
    • enable_sim_fixed (default: false): 是否執行定點 E2E 模擬(尚未接線)
  • NEF /api/nef/process
    • enable_sim_hw (default: false): 是否執行硬體 E2E 模擬(尚未接線)

流程預設開關對照(原 Web GUI vs 現在 Workers

步驟 原 Web GUI 預設 現在 Workers 預設 開關
ONNX 轉換/最佳化 ON ON
IP Evaluator OFF OFF enable_evaluate
FP E2E 模擬 OFF OFF enable_sim_fp
BIE 量化 ON ON
Fixed-Point E2E 模擬 OFF OFF enable_sim_fixed
NEF Compile ON ON
HW E2E 模擬 OFF OFF enable_sim_hw

非目標

  • 不做任務持久化
  • 不做 crash 後 resume
  • 不做 exactly-once / at-least-once 保證
  • 不做 Scheduler HA
  • 不做自動 retry

備註

  • docs/Design.md 為唯一真實設計文件。
  • apps/ 與 infra 為實作中的目錄,後續可能變動。
  • ktc 有本地 patch 紀錄,見 docs/KTC_PATCHES.md若 ktc 更新需重新套用並測試)。

目錄結構(概要)

.
├── apps/                # 前端與 Scheduler實作中
├── infra/               # 基礎設施相關(實作中)
├── services/            # Worker 服務ONNX/BIE/NEF
├── ktc/                 # Kneron Toolchain Python API 封裝
├── vendor/              # 上游/第三方模組sys_flow, sys_flow_v2 等)
├── toolchain/           # 本地 toolchain/prebuild 與相關資源
├── libs/                # toolchain v1 相關資源(來源快照)
├── libs_V2/             # toolchain v2 相關資源(來源快照)
├── scripts/             # toolchain scripts / res / config
├── tests/               # 測試
├── docs/                # 設計文件
│   └── Design.md
└── requirements.txt     # Python 依賴
Description
No description provided
Readme 1.1 GiB
Languages
C++ 58.9%
Python 15.2%
PureBasic 12.9%
C 7.8%
JavaScript 4.1%
Other 0.9%