Summary
本 MR 将 backend/foundation 重构为 foundation 最小教学分支:扁平化目录结构(contracts/ + operators/),提供可复制的 mapper 算子示例,并移除 legacy OCR/服务/脚本等代码,便于组员独立学习算子开发。
目标受众:需要理解 contracts 与算子框架、并在此基础上开发新 mapper/filter 算子的开发者。
主要变更
架构
-
platform_foundation/→ 扁平结构-
contracts/{common,archive,parsing}/— 领域 SSOT(由原pdf_items.py拆分) -
operators/{base,protocols,registry,mapper}/— 算子框架;contracts.py重命名为protocols.py(运行时协议,与领域 contracts 区分)
-
-
UV workspace:根目录
pyproject.toml+ 唯一uv.lock;删除backend/foundation/uv.lock -
CI:
.github/workflows/foundation-ci.yml(ruff + pytest)
教学示例
-
operators/mapper/en_text_uppercase_mapper.py— L0 mapper 模板(含 Config、MetricsHooks、item/arrow 路径、register_operator) -
operators/mapper/README.md— 中文开发指南 + cookbook -
tests/test_en_text_uppercase_mapper.py— 8 个用例
文档
- 根
README.md、docs/BRANCH_SCOPE.md— 本分支 scope 说明(PR 必读) -
PDF_PIPELINE_SCHEMAS.md— 路径已对齐新结构 -
DOCKER_USAGE.md、MINERU_OCR_OPERATOR_*.md— 页首标注 Legacy(OCR 栈本分支已移除) -
INSTALL_INTERNAL_PACKAGE.md— 重写为ocr-foundation安装说明
刻意移除(非误删)
| 移除项 | 说明 |
|---|---|
backend/foundation/platform_foundation/ |
已扁平化 |
backend/services/ |
FastAPI platform-api |
scripts/ |
离线 CLI / Docker 启停 |
ChineseErrorCorrector/、FontConversion/
|
独立模块 |
platform-core-public/ 嵌套副本 |
历史重复树 |
OCR、inference、pipeline 编排等将在后续 PR 恢复,见 docs/BRANCH_SCOPE.md。
Import 迁移
| 旧 | 新 |
|---|---|
platform_foundation.contracts.pdf_items |
from contracts import PageItem |
platform_foundation.operators.contracts |
from operators.protocols import OperatorContext |
platform_foundation.operators.base |
from operators import BaseOperator |
platform_foundation.ocr.* |
本分支无 |
Test plan
-
uv sync --group dev -
uv run pytest backend/foundation/tests -v— 21 passed(含 Arrow 路径) -
uv run ruff check backend/foundation -
Reviewer 阅读 backend/foundation/operators/mapper/README.md确认教学路径清晰 -
Reviewer 确认 legacy 删除范围符合预期(见 docs/BRANCH_SCOPE.md)
合并说明
- 本 MR 大幅删减(约 −76 万行),合并后主分支将暂时无法按旧文档运行 MinerU Docker / platform-api;若需保留 OCR 栈,请先确认合并策略(例如基于其他分支恢复 services/scripts)。
- 合并前建议在 GitLab CI 确认
foundation-ciworkflow 通过。
把上面 Summary 到 Test plan 整段粘贴到 GitLab MR 描述即可。需要我直接在 GitLab 上创建 MR(需 glab 或 API token),可以说一声。