开发与发布¶
项目结构¶
文件 |
作用 |
|---|---|
|
argparse CLI;service 生命周期命令、前台 |
|
dataclass 配置模型( |
|
|
|
|
|
|
|
Starlette 应用, |
|
systemd 用户服务的安装/启停/重载/状态(持久化运行的唯一入口) |
|
config.yaml ↔ |
|
|
|
配置 schema 版本化:逐级迁移链 + 备份 + 原子重写 |
|
|
|
|
关键设计¶
正则路由:路由按顺序匹配请求体中的
model字段,首个命中生效, 末尾用".*"兜底。代理改写约定:上游请求携带 provider 的
x-api-key和固定头集; 只有路由显式设置了model时才改写 JSON 里的 model 字段。流式响应按 原始字节转发,不做解析。Key fallback:可重试错误(401/402/403/429/500/502/503/529、连接 错误、超时)按
api_keys顺序切换重试;流式请求只能在上游返回 200 之前切换。配置版本化:
config_version标记 +MIGRATIONS迁移链,升级时 逐级迁移,先备份再原子重写。
发布流程(维护者)¶
仓库托管在 https://github.com/Agony5757/flexible-gateway,通过 GitHub Actions 自动发布到 PyPI(trusted publishing,无需 API token):
# 1. 修改 flexgate/__init__.py 中的 __version__(唯一版本来源)
# 2. 提交后打 tag,tag 必须与 __version__ 一致(CI 会校验)
git tag v0.4.0
git push origin main --tags
推送 v* tag 触发 .github/workflows/release.yml:校验 tag 与
__version__ 一致 → 构建 sdist/wheel → 发布到 PyPI。首次发布前需在
PyPI 项目设置中配置 Trusted Publisher(repo:
Agony5757/flexible-gateway,workflow: release.yml)。
文档构建¶
文档使用 Sphinx + Furo
主题编写,源文件在 docs/ 目录(MyST Markdown):
pip install -r docs/requirements.txt
cd docs && make html
# 打开 docs/_build/html/index.html
推送到 main(docs/** 变更)或打 v* tag 时,.github/workflows/docs.yml
会自动构建并部署到 GitHub Pages。