A local Qwen model took over a server-patching job when the cloud model refused
What they built
Over October 21 and 22, Seppe spent two days patching his company's servers after an emergency PHP release for two critical remote code execution bugs. The job covered seven RunCloud servers with about 30 WordPress sites, several on PHP versions that no longer get official fixes, plus cleaning up compromised sites and backporting plugin security fixes by hand.
He did most of it with the Hermes agent running a cloud model. Midway through the plugin phase, every message got 'Your request was not processed.' The agent's log showed the real reason: the cloud provider's cyber-content classifier was refusing, triggered by the access logs, CVE list and vulnerable-code diffs in the context.
He started Qwen3.8-Flash-Next on his own workstation, switched the model inside the same Hermes session, and the local model picked up the full history, tools and standing rules and finished the work. His takeaway is that a local model is insurance, not a replacement.
Setup
- Workstation with a Ryzen 9 9950X3D, an RTX 5090 and 128 GB of RAM
- Qwen3.8-Flash-Next served by Strata with the Unsloth UD-Q5_K_XL quant as an OpenAI-compatible server on 127.0.0.1:8081, with a 524,288-token context configured
- The Hermes agent framework, which treats the local server as just another provider
How it works
- Hermes keeps session history, so switching the model with /model kept the inventory, CVE list, downloaded plugin sources and earlier decisions.
- The local model filtered 47 serious CVEs down to those exploitable without a login, wrote a patcher with exact code anchors and tested it on local copies of each plugin version.
- Where an upstream fix existed, it diffed vulnerable and fixed releases instead of writing its own patch.
- A deploy script backed up each server, ran php -l with each site's PHP version, and rolled back automatically on error.
Results & numbers
- From 17:45 to 18:38 the local model made 66 calls as the prompt grew from about 121k to 212k tokens.
- Turns took 3 to 20 seconds with a warm prompt cache; about 20 cache misses took 70 to 115 seconds each.
- It patched 48 plugin copies (39 files) across the servers with no rollbacks, and all 32 sites still returned 200.
- It also moved MySQL to listen on 127.0.0.1 on five servers, finding a RunCloud config file that overrode its first change.
Gotchas
- The refusal was invisible to the agent, which guessed wrongly about the cause; only the log showed finish_reason=content_filter.
- Retrying the same context earns the same refusal, and a refusal is an HTTP 200, so error-rate monitoring won't see it.
- The local patcher had two bugs that it caught in its own test run, and one count in its final summary (56) didn't match the earlier report (48).
- The 92 GiB of weights load in under a minute, but only once other GPU jobs are stopped.
“A local model is insurance.”— Seppe Gadeyne
Do it yourself
- Run a capable long-context model locally behind an OpenAI-compatible server.
- Register it as a provider in the same agent framework you use for cloud models, so tools and session history stay identical.
- Test your local start script now and then so the fallback is ready when you need it.
- Log model refusals as their own event, separate from errors.
- Keep backups, linting, before-and-after HTTP checks and rollback scripts in place no matter which model writes the change.
providers:
strata-qwen:
name: Strata Qwen3.8-Flash-Next (UD-Q5_K_XL)
base_url: http://127.0.0.1:8081/v1
default_model: strata
models:
strata:
context_length: 524288Related
OneGraph: local Gemma 4 explains PR risk from a real dependency graph
CodersAcademy006 built OneGraph, which builds a code dependency graph with tree-sitter and has Gemma 4 running locally in Ollama narrate the blast radius of a pull request as a PR-Agent comment, with all numbers computed by code.
Fixing silent tool-call failures caused by Ollama's 4,096-token default context
orca forge found their app's 29 tools were silently failing because Ollama's OpenAI-compatible endpoint loaded the model at the default 4,096-token context and truncated input without an error; moving tool calls to /api/chat with num_ctx set fixed it.
Constraint Kitchen: a Gemma 3 1B DIY idea generator that refuses rather than lies
Shashwat Sinha built a local app that turns household junk into DIY project ideas and build guides with gemma3:1b on an 8 GB M3 Mac, and checks every answer in Python so it refuses when the model breaks your constraints.
Four 125B-748B open models on one RTX 5090 and 128 GB of RAM, benchmarked side by side
Seppe Gadeyne runs Qwen3.8-Flash-Next, Ornith-1.5-122B, GLM-5.3-Flash and DeepSeek-V4.1-Flash on a single RTX 5090 workstation and measured all four in one night for speed, long context, memory and quality on nine tasks from his own day job.