File size: 2,766 Bytes
8bff983
 
 
 
 
 
 
 
 
 
 
37e12f1
 
 
90423c7
37e12f1
90423c7
37e12f1
8bff983
 
 
37e12f1
90423c7
 
 
 
37e12f1
8bff983
 
 
37e12f1
 
 
 
 
8bff983
 
 
 
 
 
 
37e12f1
8bff983
 
37e12f1
8bff983
37e12f1
c809ef4
37e12f1
 
 
 
 
 
90423c7
 
 
 
 
 
 
 
c809ef4
8bff983
 
 
 
 
 
 
 
 
 
 
 
37e12f1
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
---
title: PDFMathTranslate Next
emoji: 📄
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
---

## PDFMathTranslate-next on HuggingFace Spaces

这个仓库部署一个单体 FastAPI 服务,包含:

1. 用户登录(Session Cookie)
2. 中文 Web UI(上传 PDF、查看任务、下载结果)
3. 任务队列(单 worker)调用 `pdf2zh_next` Python API
4. 内部 OpenAI 兼容代理:`/internal/openai/v1/chat/completions`(按模型路由)
5. 按登录用户名计费(token + USD)

### 运行架构

1. 用户访问 `:7860` 登录并提交翻译任务
2. 后台 worker 调用 `pdf2zh_next`,并把 `chat/completions` 请求发到本机内部代理
3. 内部代理根据 `model` 路由上游:
   - `SiliconFlowFree` -> 作者维护的 `chatproxy` 接口
   - 其他模型 -> OpenAI 风格上游(默认 OpenAI 官方)
4. 计费按 `username` 聚合,前端展示账单

### 必需 Secret

在 HuggingFace Space 设置:

- `BASIC_AUTH_USERS`(多行文本)

`BASIC_AUTH_USERS` 格式:

```text
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`### 本地构建示例

```bash
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 Secret `BASIC_AUTH_USERS`
  - 阶段 2:删除排除文件后,强制推送代码到 HuggingFace Spaces
- 推送前会删除以下文件:
  - `.cnb.yml`
  - `basic_auth_users.txt`
  - `src/scripts/`
- 排除列表在 `.cnb.yml``HF_EXCLUDE_FILES` 中配置(空格分隔)
- 密钥更新脚本:`src/scripts/update_space_secret.py`