快速结论:调用 TextGen WebUI 的 POST /v1/internal/model/load 时,如果 args 里用了连字符键名(如 ctx-size、cache-type、gpu-layers),这些值会被静默丢弃,接口仍返回 HTTP 200 与 “OK”,模型实际按 UI 或已保存配置的默认值加载。优先排查 args 的键名拼写是否与 Python 属性名一致。
适用环境:Linux(homelab 机器);NVIDIA RTX 3090 (24GB);加载器 llama.cpp;模型为任意 GGUF;已启用 OpenAI API 扩展。Issue 未提供 Python、CUDA、PyTorch 或 tg-webui 具体版本号。
最快修复方案:把 args 的键名从连字符改为下划线形式再发请求,例如用 ctx_size 而不是 ctx-size、用 cache_type 而不是 cache-type、用 gpu_layers 而不是 gpu-layers。Issue 中已验证 args.ctx_size 能生效。
注意事项:官方代码层面的一步修复(自动归一化键名或对未匹配键打警告)尚未确认合并;如果必须使用 UI 标签样式的连字符键名,只能依赖后续修复。此外,Issue 也提示 update_model_parameters(model_settings) 与 load_model(model_name) 的状态读取路径可能影响最终生效值,但该部分未被完整追踪。
问题场景
用户在 TextGen WebUI 中启用 OpenAI API 扩展后,通过 HTTP 调用 POST /v1/internal/model/load 加载 GGUF 模型,希望在请求体的 args 字典里临时指定 ctx-size、cache-type 等加载器参数,绕过 UI 逐个保存模型配置。结果接口返回 “OK”,但控制台打印的 CONTEXT LENGTH 仍是 UI 里设置的值,请求里传入的值没有生效。
报错原文
POST /v1/internal/model/load
Response: "OK" (HTTP 200)
# Console output for a load request with args.ctx-size=32768:
09:09:35-396887 INFO Loaded "MODEL" in 14.72 seconds.
09:09:35-397906 INFO LOADER: "llama.cpp"
09:09:35-398631 INFO CONTEXT LENGTH: 8192 # <-- expected 32768
原因分析
经提交者更正后的复测结论:这不是整个 args 通道失效,而是键名格式问题。modules/api/models.py 的 _load_model() 中会遍历 args 的键,并通过 hasattr(shared.args, k) 判断是否可设置。UI 标签形式的连字符键名(ctx-size、cache-type、gpu-layers)对应不到 shared.args 上的 Python 属性名(下划线形式),因此被静默过滤;下划线形式(ctx_size、cache_type、gpu_layers)能正常通过检查并生效。由于代码不会对未匹配的键输出警告或日志,加上接口返回 200/”OK”、/v1/internal/model/info 也不暴露 ctx_size 等加载参数,调用方很难察觉键被丢弃。提交者同时指出,_load_model() 之前的 update_model_parameters(model_settings) 可能用保存的每模型配置覆盖参数,这一路径未被完全追踪,属于可能原因。
环境排查
- 确认 tg-webui 已启用 OpenAI API 扩展。
- 确认加载器为 llama.cpp。
- 确认 OS 为 Linux、GPU 为 NVIDIA RTX 3090 (24GB) 或相近环境。
- 确认 args 键名使用的是 shared.args 上的 Python 属性名(下划线),而非 UI 标签(连字符)。
- 确认是否保存了该模型的 per-model 配置(user_data/models/config-user.yaml),已保存的配置可能影响实际加载值。
- 确认在控制台观察 LOADER / CONTEXT LENGTH 日志,用于判断实际生效的参数。
解决步骤
- 停止使用连字符键名。将请求体中的 args 键名改写为下划线形式:ctx-size → ctx_size,cache-type → cache_type,gpu-layers → gpu_layers。
- 重新发送加载请求,例如:
curl -X POST http://localhost:5000/v1/internal/model/load -H "Content-Type: application/json" -d '{"model_name": "MODEL", "args": {"ctx_size": 32768}}'。 - 在控制台确认 CONTEXT LENGTH 日志是否等于请求中指定的值,以验证键名格式是否被接受。
- 如果确实需要在 API 侧控制加载参数而暂时无法改动键名格式,可先按 Issue 中的 workaround 在 UI 的 Model 标签设置 ctx-size、cache-type 等,点击 Save settings 写入 user_data/models/config-user.yaml,之后该模型的 API 加载会自动读取已保存配置。
- 如希望从根本上支持连字符键名,可参考提交者的建议:在 _load_model() 中先做 k_norm = k.replace(‘-‘, ‘_’) 再检查 allowed_keys 与 hasattr,或对未匹配任何 allowed_keys 的键输出 logger.warning 提示。这两项属于建议修复方案,尚未确认官方已合并。
验证方法
用下划线键名发送加载请求后,查看控制台日志中 CONTEXT LENGTH 的数值是否与 args.ctx_size 传入的值一致。Issue 中已验证:args.ctx_size = 24576 时控制台显示 CONTEXT LENGTH: 24576,args.ctx_size = 20480 时显示 20480。若使用连字符键名则仍显示 UI 或已保存配置的值,说明键名未被识别。可进一步通过 /v1/internal/model/info 辅助排查,但注意该接口目前不暴露 ctx_size 等加载参数,不能作为唯一验证依据。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: rust-wheel OCR callback test expects swallowed logger exception to propagate](https://www.chat-gpts.plus/wp-content/uploads/2026/09/42714-55ab3a70-768x403.jpg)

