Repository navigation
Releases: lza6/new-api-Max
Releases · lza6/new-api-Max
Release list
v1.3.114–116 — 按分组切换计费方式(token计费分组)+ 密钥加密修复 + 类型全绿
v1.3.114–116 — 按分组/渠道切换计费方式 + 渠道密钥加密修复 + 前端类型全绿
v1.3.114 feat: 计费表达式支持 group / channel 变量
单模型可同时支持多种计费方式(如某些渠道按 token、某些按次),无需新增存储维度、不改表、不迁移。
pkg/billingexpr:RequestInput 增Group/ChannelID,编译环境与运行时 env 同步支持- 预扣费从 RelayInfo 填充;结算时重新取最终值(auto 分组重试/渠道 fallover 会改变二者,沿用冻结值会按错误维度计价)
- 任务(异步)计费同样注入
v1.3.115 test: 「token 计费分组」阶梯计费回归测试
- 6 例覆盖 199999/200000/499999/500000/1200000/0 边界
- 断言其他分组在 800K 上下文下仍固定按次价(分文不变)
TestElseBranchEqualsLegacyPerRequestPrice:断言 else 分支与现状按次价逐分组等值,防止「改计费方式误伤其他分组」
v1.3.116 docs: 按 token 计费分组运维说明
新增 计划书/ops/token-billing-group.md:改价需同时改 4 处、强制变更安全流程、排障表、日志字段说明。
顺带交付
- v1.3.112 fix: 渠道密钥加密 2 个 P1 —— Codex OAuth 刷新直写绕过
BeforeSave导致明文落库(已实测复现 + RED 验证);关闭开关对已加密库会致全渠道 401(订正误导注释 + 新增启动自检) - v1.3.113 fix: 前端 typecheck 从 9 错 → 0 错(
React.ElementType收窄为ComponentType<{className?: string}>,修 nav-group / chat-presets-item / account-bindings 共 8 处 + 补缺失默认值) - v1.3.109–111 fix: CSP 拦截
blob:导致游乐场图生图「点发送无反应」(P1);登录失败按注册来源精确提示「请用 X 登录」
生产验证(真实请求)
| 模型 | 分组 | prompt_tokens | matched_tier | fixed_price |
|---|---|---|---|---|
| deepseek-v4.1-flash | token计费 | 690 | tok_lt200k | $0.001 |
| deepseek-v4.1-flash | token计费 | 333,354 | tok_200k_500k | $0.0015 |
| deepseek-v4.1-flash | token计费 | 746,694 | tok_ge500k | $0.002 |
| glm-5.3-flash | token计费 | 500 | tok_lt200k | $0.004 |
| glm-5.3-flash | token计费 | 250,000 | tok_200k_500k | $0.005 |
| glm-5.3-flash | token计费 | 560,000 | tok_ge500k | $0.006 |
| 两模型 | default(对照) | — | per_request | 与原价完全一致 |
v1.3.109 — 修复 CSP blob: 拦截导致游乐场图生图无法发送 (P1)
v1.3.109 — 修复:CSP 拦截 blob: 导致游乐场图生图「点发送无反应」(P1)
问题
生产环境游乐场中选择参考图后点击「发送」无任何反应:无请求发出、无报错、文字与附件仍留在输入框。
根因链
- Caddy CSP 的
connect-src 'self'未放行blob:→ 游乐场把附件blob:URLfetch成data:URL 时被 CSP 拒绝; web/src/components/ai-elements/prompt-input.tsx的Promise.all(...).catch(() => {})静默吞掉该拒绝 →onSubmit永不调用;- 同时
img-src缺blob:→ 附件缩略图预览也不显示。
修复
deploy/Caddyfile.example:img-src与connect-src各放行blob:,并补充注释说明二者缺失各自的症状;prompt-input.tsx:附件转换失败不再静默吞错,改为上报onError(新增code: 'attachment_conversion');playground-input.tsx:接住onError并 toast 提示,用户可见可诊断;- i18n 7 语言新增对应文案(按行插入,未做 JSON 重序列化);
- 新增回归测试
prompt-input-attachment.test.tsx(2 例):blob 读取失败必须上报onError且不得调用onSubmit;正常路径应提交转换后的附件。
验证
- 生产 Caddyfile 已同步修改并 reload,新 CSP 响应头经实测确认生效;
- Playwright 真实浏览器 E2E(打生产):图生图请求成功发出,请求体内联
data:image/png;base64的image_urlpart,结果{thumb:1, delivered:1, userText:true, rawMd:false}; - 单元测试:
NODE_OPTIONS=--max-old-space-size=3072 bunx vitest run src/components/ai-elements/__tests__/prompt-input-attachment.test.tsx→ 2 passed; - typecheck / lint:改动文件无新增错误。
部署
已蓝绿零停机部署至生产(new-api:v1.3.109),公网 200,/api/status 返回 1.3.109。
v1.3.108 — 渠道系统提示词透传路径修复 (P1) + 游乐场思考程度
v1.3.108 — 渠道系统提示词透传路径修复 (P1) + 游乐场思考程度可调/可关
P1:渠道内置系统提示词在透传路径不生效
现象:渠道同时配置 system_prompt 与 pass_through_body_enabled(如渠道 50)时,用户使用游乐场/接口都拿不到内置提示词,提示词被静默丢弃。
根因:非透传分支已做注入,但透传分支直接转发原始 body,完全跳过注入。
修复:
relay/chat_completions_via_responses.go新增injectSystemPromptIntoPassThroughBody(JSON 级改写messages,其余字段原样透传)+applySystemPromptIntoMessages;relay/compatible_handler.go透传分支在SystemPrompt非空时调用;注入失败退回原始体(不阻断请求)。
测试:chat_completions_via_responses_test.go 新增 4 例(前插 / override 合并 / 无 override 保留 / 无提示词 noop)。
注意:渠道级 system_prompt 注入共 5 处路径(claude / gemini / codex / chat-via-responses / 透传)——改任一处务必检查是否遗漏。
游乐场思考程度(reasoning_effort)
参数面板新增「思考程度」下拉(默认 / 关闭(none) / 低 / 中 / 高)+ 启用开关;仅启用且非空时发送。