metadata
title: PDFMathTranslate Next
emoji: 📄
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
PDFMathTranslate-next on HuggingFace Spaces
这个仓库部署一个单体 FastAPI 服务,包含:
- 用户登录(Session Cookie)
- 中文 Web UI(上传 PDF、查看任务、下载结果)
- 任务队列(单 worker)调用
pdf2zh_nextPython API - 内部 OpenAI 兼容代理:
/internal/openai/v1/chat/completions(按模型路由) - 按登录用户名计费(token + USD)
运行架构
- 用户访问
:7860登录并提交翻译任务 - 后台 worker 调用
pdf2zh_next,并把chat/completions请求发到本机内部代理 - 内部代理根据
model路由上游:SiliconFlowFree-> 作者维护的chatproxy接口- 其他模型 -> OpenAI 风格上游(默认 OpenAI 官方)
- 计费按
username聚合,前端展示账单
必需 Secret
在 HuggingFace Space 设置:
BASIC_AUTH_USERS(多行文本)
BASIC_AUTH_USERS 格式:
alice:your_password_1
bob:your_password_2
规则:
- 每行一个账号,格式
username:password - 空行和
#开头行会被忽略 - 支持明文密码与 bcrypt 哈希
可选环境变量
SESSION_SECRET:Session 签名密钥INTERNAL_KEY_SALT:内部 key 生成盐(默认复用SESSION_SECRET)DEFAULT_LANG_IN:默认源语言(默认en)DEFAULT_LANG_OUT:默认目标语言(默认zh)TRANSLATION_QPS:翻译 QPS(默认4)DATA_DIR:数据目录(默认/data)OPENAI_API_KEY:仅当你希望代理“非 SiliconFlowFree 模型”时需要OPENAI_UPSTREAM_CHAT_URL:非 SiliconFlowFree 模型的 OpenAI 风格上游地址
固定模型与路由表
- 前端不提供模型选择,任务模型固定为
SiliconFlowFree - 路由表在
src/gateway.py的MODEL_ROUTE_TABLE - 当前只维护一条:
SiliconFlowFree,带两个chatproxy备用地址
健康检查
/healthz 无需认证,返回 200 ok。
本地构建示例
docker build -t pdf2zh-gated .
docker run --rm -p 7860:7860 \
-e BASIC_AUTH_USERS=$'alice:pass1\nbob:pass2' \
pdf2zh-gated
CI 同步到 Spaces 的排除策略
- 本仓库可本地维护密码文件:
basic_auth_users.txt - CNB
push分两个阶段:- 阶段 1:读取
basic_auth_users.txt,自动更新 Space SecretBASIC_AUTH_USERS - 阶段 2:删除排除文件后,强制推送代码到 HuggingFace Spaces
- 阶段 1:读取
- 推送前会删除以下文件:
.cnb.ymlbasic_auth_users.txtsrc/scripts/
- 排除列表在
.cnb.yml的HF_EXCLUDE_FILES中配置(空格分隔) - 密钥更新脚本:
src/scripts/update_space_secret.py