mirror of
https://github.com/zyycn/codex-proxy-rs.git
synced 2026-11-06 08:06:19 +00:00
b1c24e276b24387945e4344b94ee898544efc863
codex 的 WS 客户端(codex-api/src/endpoint/responses_websocket.rs)只消费 两类 error 帧:带非 2xx HTTP status 的包装错误,以及 websocket_connection_limit_reached / previous_response_not_found 内置可重 试错误码。OpenAI 上游的中流错误帧(如 server_is_overloaded)没有 status 字段,map_wrapped_websocket_error_event 返回 None,落回 process_responses_event 也没有 error 分支——整帧被静默忽略。 客户端收不到可识别的终态,只能空等到自身 300s stream_idle_timeout 超时 再重连,5 次重连累计 20-30 分钟"正在思考",最后才把失败呈现出来。CPA 等实现之所以秒级报错,正是因为它把错误负载重写成 codex 可消费的终态。 #90 已在 SSE 边界做了同样的投影,但客户端 WS 边界(push_websocket)仍原 样转发;使用 WS transport 的 codex 桌面端不受 #90 保护。本提交在该边界 对不可消费的错误帧投影成 response.failed(消息 JSON 自带 type 字段,经 process_responses_event 的 response.failed 分支映射为可重试错误并立即重 试);带非 2xx status 或特殊错误码的可消费形状原样透传,保持 deliverable_business_failures_are_not_rewritten... 既有契约。
Note
本项目提供 Responses API,不支持
/v1/chat/completions。接入前请确认客户端支持 Responses 协议。
快速开始
使用 Docker Compose 部署版本固定的发布镜像,同时启动 PostgreSQL 和 Redis。 以下命令适用于 Linux amd64/arm64,需要 Docker Engine、Docker Compose Plugin、curl 和 OpenSSL。已有部署请先看 升级说明,不要覆盖原配置。
1. 下载部署文件并配置
mkdir -p codex-proxy-rs/deploy && cd codex-proxy-rs
# 只解析一次最新正式版本,确保两个文件来自同一 Release。
CPR_RELEASE_URL="$(curl -fsSL -o /dev/null -w '%{url_effective}' https://github.com/zyycn/codex-proxy-rs/releases/latest)"
CPR_RELEASE_TAG="${CPR_RELEASE_URL##*/}"
curl -fsSL "https://github.com/zyycn/codex-proxy-rs/releases/download/${CPR_RELEASE_TAG}/compose.yaml" \
-o deploy/compose.yaml
curl -fsSL "https://github.com/zyycn/codex-proxy-rs/releases/download/${CPR_RELEASE_TAG}/config.example.yaml" \
-o deploy/config.example.yaml
install -d -m 0750 .runtime/postgres .runtime/redis
sudo install -d -m 0770 -o "$(id -u)" -g 10001 .runtime/data .runtime/logs
sudo install -m 0640 -o "$(id -u)" -g 10001 deploy/config.example.yaml deploy/config.yaml
也可将 CPR_RELEASE_TAG 设置为指定的发布标签。Release 附带的 compose.yaml 默认使用该版本镜像,
配置模板和部署文件均包含在 checksums.txt 中;不要混用 main 分支模板与已发布镜像。
分别生成数据库和 Redis 密码:
openssl rand -hex 24
openssl rand -hex 24
编辑 deploy/config.yaml,填好以下三项:
| 配置项 | 填写内容 |
|---|---|
store.database.password |
第一个生成的 48 位十六进制密码 |
store.redis.password |
第二个生成的 48 位十六进制密码 |
admin.default_password |
管理员初始密码,至少 12 位,不能包含 $ |
2. 启动服务
docker compose -f deploy/compose.yaml config --quiet
docker compose -f deploy/compose.yaml pull
docker compose -f deploy/compose.yaml up -d --no-build --wait
curl -i http://127.0.0.1:8080/healthz
健康检查返回 204 No Content 后,打开 http://127.0.0.1:8080,
使用 admin@cpr.local 和刚设置的管理员密码登录。
默认地址只能在服务器本机访问。从其他设备使用时,需要配置 HTTPS 反向代理。
3. 添加账号与客户端密钥
- 在「账号」中添加账号,完成授权或导入。
- 按需建立账号分组,再创建客户端密钥并选择可用分组。不选分组表示可使用全部账号。
- 打开密钥的「使用密钥」,复制客户端配置。
客户端接入
Codex CLI / 桌面端:在「使用密钥」中按操作系统复制配置,或通过 CCSwitch 导入。 合并到客户端配置后重启 Codex。完整步骤、生图配置与排障见客户端配置。
其他 Responses API 客户端:填写以下信息。
| 配置 | 值 |
|---|---|
| Base URL | http://127.0.0.1:8080/v1;远程接入使用服务器的 HTTPS 地址 |
| API Key | 管理端创建的客户端密钥 |
可用模型以该密钥查询到的模型列表为准:
curl http://127.0.0.1:8080/v1/models \
-H 'Authorization: Bearer <client-api-key>'
文档
社区
感谢 LINUX DO 社区提供开放、友善的技术交流平台。
许可证
本项目基于 Apache License 2.0 开源。
Languages
Rust
90%
Vue
5.7%
TypeScript
3.7%
PLpgSQL
0.4%
Ruby
0.1%