mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-13 02:01:16 +00:00
Auto-compaction never triggered for self-hosted llama.cpp HTTP servers (used directly or behind an OpenAI-compatible shim configured with `api: "openai-completions"`) because llama.cpp's native overflow wording isn't covered by any existing pattern in `isContextOverflowError()` or `matchesProviderContextOverflow()`. When the prompt overshoots a slot's `--ctx-size`, llama.cpp returns: 400 request (66202 tokens) exceeds the available context size (65536 tokens), try increasing it That message uses "context size" rather than "context length", says "request (N tokens)" instead of "input/prompt is too long", and the status code is 400 (not 413), so it slips past every existing string check and every regex in `PROVIDER_CONTEXT_OVERFLOW_PATTERNS`. The generic candidate pre-check passes, but the concrete provider regexes all miss, so the agent runner reports `surface_error reason=...` and the user gets the raw upstream error instead of compaction + retry. This commit adds a llama.cpp-shaped pattern next to the existing Bedrock / Vertex / Ollama / Cohere ones in `PROVIDER_CONTEXT_OVERFLOW_PATTERNS`, plus four test cases (three parameterised messages exercising the new regex directly, and one end-to-end assertion that `isContextOverflowError()` now returns true for the verbatim message produced by llama.cpp's slot manager). The pattern is anchored on llama.cpp's stable slot-manager wording (`(?:request|prompt) (N tokens) exceeds (the )?available context size`) so it won't accidentally swallow unrelated provider errors. Closes #64180 AI-assisted: drafted with Claude Code (Opus 4.6, 1M context). Testing: targeted tests pass via `pnpm vitest run src/agents/pi-embedded-helpers/provider-error-patterns.test.ts` (26/26). Broader vitest run shows 2 unrelated failures in `group-policy.fallback.contract.test.ts` that are not touched by this change.