feat: sync deployed v1.0.0-rc.38-custom.42

Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
This commit is contained in:
cneicy committed 2026-09-26 04:49:11 +08:00
1 parent aa6c3f50f4
commit ceddfd3d6b
828 files changed
+122253 -13702

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
# Astra 返回模型校验
API 令牌的 `astra_auto_switch` 控制原始模型为 `gpt-6-astra` 的 HTTP `/v1/responses` 错配拦截和安全切换。独立字段 `astra_detection_enabled` 控制检测。关闭检测时不执行 Astra 模型比较、不拦截,并将自动切换保存为关闭;重新打开检测不会自动重新开启切换。检测开启且切换关闭时放行并记录 `mismatch_allowed`,开启时拦截并记录 `mismatch_rejected`。渠道 `responses_astra_model_guard` 字段仅保留存储兼容,界面标记停用,不再决定请求行为。
开启时,明确模型错配可以按现有路由策略安全切换,最多 3 次上游尝试。显式渠道固定、已交付内容、客户端取消、携带 previous_response_id 或 conversation 的请求不会透明切换。每次在 STREAMING_TIMEOUT 内、最多暂存 1 MiB,确认原始上游声明去除首尾空白后等于 `gpt-6-astra`,才允许提交响应头、ping 和内容。网络重试与 strict_session 策略保持现状。
接受后的流实时转发;后续错误模型事件不会交付,转为 `response.failed`,不再透明重试。每次有消耗的上游尝试独立结算,包括被拦截的结果;切换后的新尝试另行计费。沿用持久化尝试账本、usage 收集和结算,不修改价格或退款算法。
无法交付已验证结果时,客户端收到 HTTP 409 和 `response_model_rejected`;若已开始 SSE,则通过 `response.failed` 发送错误。提示包含请求及返回模型、每次消耗独立计费的说明,不包含渠道名称、地址或鉴权信息。拒收后仍收集 usage 以完成账本结算。
管理员日志详情的 `admin_info.request_details.model_guard.attempts` 保存尝试序号、渠道 ID、期望及返回模型、原因、耗时、是否交付以及已经取得的 usage。没有取得 usage 表示未知成本,不表示上游没有收费。普通用户日志不返回此字段。
请求所属用户可以查看尝试历史、实际费用、模型声明与校验结果;渠道 ID 仅管理员可见。尝试 API 增加 `charged`(已结算且费用大于零)及 `charge_explanation`。待结算尝试不会被误标为已扣费。
验证入口:`relay/response_model_test.go`;前端 `admin-request-details.test.tsx` 和 `responses-websocket-setting.test.tsx`。隔离运行验收还覆盖真实 HTTP 转发、429 混合重试、退款及单次扣费、超时关闭连接、ping 门控和客户端断线排空。
本功能仅验证上游响应的模型声明,不能识别伪报模型。首次启动新增令牌列并以迁移标记将已有令牌设为开启;新建令牌默认检测开启、自动切换关闭;已有令牌迁移后保留检测开启及原切换设置,重复启动保留用户选择。旧 Redis 哈希补齐新字段时不覆盖实时额度。启用并保存需要费用确认;令牌页的首次费用提示通过用户 setting 中的 `astra_cost_notice_ack` 记录已读。API 更新省略开关时保留原值,显式 false 正常持久化。
鉴权继续使用现有令牌所有权检查与认证缓存失效机制,新增审计字段不含凭据。安全参考:[OWASP Authentication Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html)、[OWASP Session Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html)。