![[Bug] /v1/internal/model/load silently ignores `args` (loader flags like ctx-size, cache-type) — endpoint returns OK but model loads with UI](https://www.chat-gpts.plus/wp-content/uploads/2026/06/7577-f376545a.jpg)
[Bug] /v1/internal/model/load silently ignores `args` (loader flags like ctx-size, cache-type) — endpoint returns OK but model loads with UI
快速结论:该报错发生在通过 TextGen WebUI 的 /v1/internal/model/load API 传递 loader 参数(如 ctx-size、cache-type)时,如果使用 UI 标签中的连字符格式(如 ctx-size),这些参数会被静默丢弃,模型仍按 UI 默认值加载。优先排查是否使用了连字符而非下划线格式(如 ctx_size)。
问题场景
用户在使用 TextGen WebUI 的 OpenAI API 扩展时,通过 POST /v1/internal/model/load 接口传递 args 字典(例如设置 ctx-size 为 32768),希望覆盖 UI 默认的 loader 参数。接口返回 HTTP 200 和 "OK",但实际模型加载时仍使用 UI 中已有的值(如 8192),导致调用者无法感知参数未生效。
报错原文
# 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
# API 响应(无报错信息)
HTTP/1.1 200 OK
Content-Type: application/json
"OK"
原因分析
根本原因是 modules/api/models.py:_load_model() 函数中,参数键名检查使用了 hasattr(shared.args, k),其中 k 来自请求的 args 字典。UI 标签中使用的连字符格式(如 ctx-size、cache-type)与 Python 属性名的下划线格式(如 ctx_size、cache_type)不匹配,导致 hasattr 返回 False,这些参数被静默过滤掉。而使用下划线格式(如 ctx_size)则可以正常工作。此外,没有记录任何日志或错误提示,使问题难以调试。
环境排查
- TextGen WebUI 版本:截至 2026-05-18 的当前构建版本(已验证)
- API 扩展:OpenAI API 扩展已启用
- Loader:llama.cpp(测试中使用 GGUF 模型)
- 操作系统:Linux(家庭服务器环境)
- GPU:NVIDIA RTX 3090(24GB)
解决步骤
- 使用正确的参数键名格式:在
args字典中,使用 snake_case(下划线格式) 的 Python 属性名,而非 UI 标签中的连字符格式。例如:
"args": {"ctx_size": 32768}(而非"ctx-size": 32768)
"args": {"cache_type": "q4_0"}(而非"cache-type": "q4_0")
正确的键名可以直接从shared.args对象的属性名获取。 - 临时替代方案:如果必须使用 UI 默认值,可以通过 UI 设置并保存配置:打开 Model 选项卡,设置所需参数(如
ctx-size、cache-type),点击 Save settings(写入user_data/models/config-user.yaml)。后续 API 调用会自动使用已保存的配置。 - (可优先尝试)建议的修复方案:如果涉及代码修改,可以在
_load_model()函数中添加参数键名规范化逻辑,将连字符替换为下划线:
k_norm = k.replace('-', '_')
然后检查if k_norm in allowed_keys and hasattr(shared.args, k_norm)。这样同时兼容两种格式。 - (可优先尝试)添加日志警告:添加日志输出,当参数键名不在允许列表中时发出警告:
logger.warning(f"Ignoring unknown loader arg: {k}")
这可以帮助调试并发现静默丢弃的参数。
验证方法
使用正确的 snake_case 键名重新发送 API 请求,检查控制台输出中的 CONTEXT LENGTH 或 cache-type 等参数值是否与请求一致。例如:
curl -X POST http://localhost:5000/v1/internal/model/load \
-H "Content-Type: application/json" \
-d '{
"model_name": "MODEL",
"args": {"ctx_size": 32768}
}'
确认控制台输出显示:INFO CONTEXT LENGTH: 32768。如果仍为 UI 默认值,则说明问题可能另有原因。



