[Feature Request]: LlamaCPP – Allow the default context window from the model

这个报错发生在使用 LlamaIndex 的 LlamaCPP 加载 GGUF 模型时,尝试将 context_window 设为 0 以自动使用模型默认上下文窗口,但参数校验拒绝该值,即使通过 model_kwargs["n_ctx"]=0 绕过,内部 context_window 字段仍停留在默

快速结论:这个报错发生在使用 LlamaIndex 的 LlamaCPP 加载 GGUF 模型时,尝试将 context_window 设为 0 以自动使用模型默认上下文窗口,但参数校验拒绝该值,即使通过 model_kwargs["n_ctx"]=0 绕过,内部 context_window 字段仍停留在默认 3900。优先排查是否使用已包含修复的版本,或按本文修改源码中的参数约束并同步实际值。

适用环境:LlamaIndex(LlamaCPP 类)、llama-cpp-python;已确认在 main 分支可复现。未提及操作系统、Python、CUDA 或显卡型号。

最快修复方案:暂无用户侧一键修复;可优先尝试升级到包含 PR #22539 的 LlamaIndex 版本,或在本地应用评论中给出的源码修改:将 context_window 字段的约束从 gt=0 改为 ge=0,并在 Llama(...) 加载后把实际 n_ctx 同步回 context_window

注意事项:源码修改需要以 editable 模式重新安装或重启环境后生效;同步逻辑只在 context_window=0 时触发,若运行时实际 n_ctx 小于请求值,会以模型实际接受值为准。

问题场景

用户使用 LlamaIndex 的 LlamaCPP 加载本地模型(例如 Mixtral 8x7B),希望自动采用模型自带的最大上下文窗口(如 32768),而不是手动指定。但 context_window 参数传 0 会直接触发校验错误;即使通过 model_kwargs["n_ctx"]=0 让底层 llama-cpp-python 正确加载模型,LlamaCPP 对象内部的 context_window 仍保持默认值 3900,导致上下文窗口设置与模型实际能力不一致。

报错原文

[Feature Request]: LlamaCPP - Allow the default context window from the model

pydantic_core._pydantic_core.ValidationError: 1 validation error for LlamaCPP
context_window
  Input should be greater than 0 [type=greater_than, input_value=0, input_type=int]

原因分析

可能原因有两个:

  • LlamaCPPcontext_window 字段使用了 gt=0 约束,因此值 0 在进入 llama-cpp-python 之前就被 Pydantic 拒绝。
  • 即使通过 model_kwargs["n_ctx"]=0 绕过了字段校验,底层模型加载成功后,LlamaCPP 也没有把实际生效的 n_ctx 写回 self.context_window,导致该值停留在默认的 3900。

有趣的是,LlamaCPP.metadata 中读取的是 self._model.context_params.n_ctx,所以元数据是正确的,只有 context_window 字段本身过期了。

环境排查

celebrityanime
celebrityanime
文章: 18311

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注