7 Commits
Author SHA1 Message Date
rui40000andClaude Opus 5 205a7c0e31 越光 / ZenMux 节点新增网络自动重连,应对 SSL 断连等链路抖动
线上跑批时最常见的失败不是参数错,而是链路抖动,典型报错是
SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol'))。
此前这两个节点只有针对 HTTP 400 的「自适应参数重试」(业务层),
网络异常直接落到 except ConnectionError 返回错误字符串——而 SSLError
正是 ConnectionError 的子类,等于一次失败就放弃。

新增 max_retries(默认 3)与 timeout(默认 180)两个参数:

会重连:SSL 握手被打断、连接被重置、连接/读超时、响应体截断
(ChunkedEncodingError / JSONDecodeError),以及 429 限流与 5xx 临时故障。
不重连:参数类 400、鉴权类 401/403、404——重试结果相同,只会拖慢报错。

退避 1s→2s→4s→8s→16s 指数增长并叠加 ±25% 抖动。抖动是必要的:一条
工作流里常有多个 API 节点同时失败,无抖动会让它们在同一毫秒一起重连,
把刚缓过来的服务端再打垮一次。服务端给了 Retry-After 时以它为准。

与既有的自适应参数重试分属两层、互不消耗额度;参数被剔除后的 payload
在后续重连中保留,不会重蹈覆辙。HTTPError 报错信息补上已重连次数,
以免用户误以为没有重试。

mock 验证 24 项全通过:失败序列后成功、重试耗尽、max_retries=0/5、
退避递增与抖动、Retry-After、429/5xx/401/404 分流、读超时、响应体截断、
连接重置、参数自适应不受影响、旧工作流不传新参数的向后兼容、ZenMux 同样生效。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-19 09:47:47 +08:00
rui40000andClaude Opus 4.8 5d3834503e fix: 八方向拆分不再切断角色;全仓库参数补齐中文 tooltip
【修复】角色被格线切断(脚、手杖、飘起的斗篷被削掉)
新增 expand_beyond_cell(默认开启):格子只用来判定「这是哪个方向」,
角色的实际范围由它自身的连通区域决定,按质心归属确保邻居不混入。
实测 8/8 方向的裁剪框边缘 alpha 从 1.00(内容顶到边界=被切断)
降到 0.00,S 方向高度 326→356、E 方向宽度 150→188 把缺的部分找了回来。
代价是需要两遍扫描(先求全序列并集框再提取),耗时 4.7s→14.9s。

【规则】每个参数都必须有中文 tooltip,作为以后的统一约定
全仓库 26 个节点 169 个参数,此前缺 115 个,现已 100% 覆盖。
tooltip 写「怎么调」而不只是「是什么」:给取值区间的实际影响、
推荐值与踩坑提示(如 OpenAI/ZenMux 的地址栏不能带 :// ,
素材拆分节点用于动画序列时顺序会漂移等)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-29 19:07:01 +08:00
rui40000andClaude Fable 5 9dd4fbd890 fix: ZenMux 节点自适应参数重试,兼容弃用 temperature 等模型
用户实测 anthropic/claude-sonnet-5 报 400:`temperature` is deprecated。
根因:节点无条件把 temperature/top_p/seed/max_tokens 塞进请求体,而 ZenMux
聚合的部分模型弃用/不支持这些采样参数,规则各家不一且随模型迭代变化。

- 新增 _diagnose_param:从 400 错误消息识别是哪个采样参数导致失败
- 请求改为重试循环:命中即剔除该参数(或把 max_tokens 改名为
  max_completion_tokens,适配 gpt-5 reasoning 系)后重试
- 只动可选采样参数,绝不触碰 model/messages;非参数类 400 不重试、不死循环
- 正常请求零额外开销;剔除动作打印到控制台,最终仍失败时提示已剔除项

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 14:30:57 +08:00
rui40000andClaude Fable 5 e09930ea45 feat: usage_stats 增加输出文字数量统计
统计模型返回文本的字符数(含标点),插入为第二行:
    token消耗,输入:XXX,输出:XXX
    输出文字数量:XXX
    模型类型:...
    价格换算,美元:XXX,人民币:XXX
请求失败或无正文时记 0。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 12:06:32 +08:00
rui40000andClaude Fable 5 0a87ba7813 feat: ZenMux 节点新增 usage_stats 输出,统计单次运行 token 消耗与费用
- 第三输出 usage_stats(STRING),三行格式:
  token消耗,输入:XXX,输出:XXX
  模型类型:openai/gpt-5.4-nano [入$0.2/M 出$1.25/M]
  价格换算,美元:XXX,人民币:XXX
- 费用 = 响应 usage 的 token 数 × 快照单价(USD/百万token)
- 新增可选参数 usd_to_cny(默认 7.2)供人民币换算,可按当日牌价调整
- 请求失败记 0 消耗;usage 缺失或单价未知的项显示 "?"

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-24 10:23:07 +08:00
rui40000andClaude Fable 5 cc5852dc18 refactor: ZenMux 节点移除 vendor 参数,模型下拉直接全量选择
- 模型列表本身按厂商排序聚类,配合 ComfyUI 下拉搜索(输入 "qwen/" 等
  前缀过滤)已能满足筛选需求,vendor 下拉冗余
- 一并移除只为级联服务的前端脚本 web/zenmux_cascade.js 与 WEB_DIRECTORY

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 13:33:42 +08:00
rui40000andClaude Fable 5 ca61c48dbd feat: 新增 ZenMux API 连接节点(厂商→模型级联选择,选项含价格标注)
- 一个节点调用 ZenMux 聚合平台全部文本类模型(20 厂商 / 138 模型)
- vendor→model 二级下拉:前端 web/zenmux_cascade.js 按厂商实时收窄模型列表
- 模型选项后缀标注输入/输出价格(USD/百万token),如 [入$0.2/M 出$1.25/M]
- 默认模型 openai/gpt-5.4-nano;具备 api_key/system/user prompt/seed/
  temperature/top_p/max_tokens/多模态图像×6/detail/base_url/proxy 等完整参数
- 模型清单随包分发(models_snapshot.json),离线可列出;
  build_snapshot.py 可随时重拉最新价格
- VALIDATE_INPUTS 宽松校验:价格快照更新后旧工作流的模型标签仍可解析执行
- base_url 默认值沿用仓库约定不含 "://",规避 ComfyUI 前端吞协议片段的老问题
- 导出 WEB_DIRECTORY 以装载前端级联脚本

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 11:37:00 +08:00