Repository navigation
fix(native-agents): move summarizer, welcomer and clerk off the expired nemotron route - #2880
Conversation
…ed nemotron route The free OpenRouter nemotron key expired on 2026-10-25. LiteLLM still declares the name, so nothing failed at boot, but every model call returns HTTP 404: pod-summarizer failed 6 of 8 runs in the 48h before 2026-10-27, dying on its first model call. pod-welcomer and task-clerk carry the same string and fail on their next trigger. Point all three at deepseek-v4-flash, the model Scout and Recorder already run on (Scout: 44 of 47 runs succeeded in the same window). The boot seed $sets the demo-pod installs; other installs need refresh-native-agent-configs after deploy. The new test pins that every first-party app names a model LiteLLM declares and does not route through the OpenRouter free tier, since a declared name was not enough to catch this. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MDs9DS3E4dzoHKdxtgQqyz
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Update model assignments and route checks backend/config/native-agents/pod-summarizer.ts, backend/config/native-agents/pod-welcomer.ts, backend/config/native-agents/task-clerk.ts, backend/__tests__/unit/config/nativeAgents.modelRoute.test.js |
The three apps now select deepseek-v4-flash. Parameterized tests check that each first-party app model is declared in the LiteLLM configuration and reject openrouter/ prefixes and :free suffixes. |
Priority:
Estimated code review effort: 2 (Simple) | ~10 minutes
Change: Bug fix
Possibly related PRs
- Team-Commonly/commonly#2718: Changes native model-call failure handling and tests the
deepseek-v4-flashroute used by these apps. - Team-Commonly/commonly#2713: Replaces the same OpenRouter Nemotron route with a DeepSeek route and updates related aliases and key provisioning.
Merge Risk: 
Minimal · up to 524a7
-
The model-route update has no identified merge-blocking issue and is ready for normal checks.
Pre-merge checks: 
4
Finishing Touches
-
📝 Generate docstrings
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Usage-based review receipt
- Mode: Continue automatically
- Reviewed files: 4
- Waived: $1.00 (charged $0.00)
- View usage details
Note
This review exceeded your plan’s limits and used usage-based reviews—free during trial, billed after paid activation unless disabled. Manage usage-based reviews.
Comment @coderabbitai help to get the list of available commands.
lilyshen0722
left a comment
There was a problem hiding this comment.
Tier 1 code gate at 524a7cc.
Model is declared and budgeted (1): litellm-config.yaml declares deepseek-v4-flash (line 30) with max_budget: 60, budget_duration: 1mo. Scout (scout.ts:317) and Recorder (recorder.ts:59) already use it, and the three apps now match them.
Nothing else reads the old name (2): the native runtime picks its path in llmService.ts. It goes to OpenRouter only when the configured provider is openrouter or the model has an openrouter/ prefix. The default provider is auto (globalModelConfigService.ts:37), so deepseek-v4-flash takes the same path Scout and Recorder already use. The remaining nemotron and openrouter/ references are the OpenClaw community and global defaults, not the first-party apps.
The test discriminates (3): I ran nativeAgents.modelRoute at head: 10/10 pass. I restored the three base configs and reran: the three does not route through the expired OpenRouter free tier tests fail (pod-welcomer, task-clerk, pod-summarizer). The declared tests pass on base too, since the nemotron name is also declared. So the free-tier assertion is the one that catches the regression. The YAML scan is not vacuous: the five declared tests pass with a non-empty set.
Rollout note (4): matches the code. seed-native-agents.ts upserts with $set only into the demo pod (DEMO_POD_ID, line 33, lines 365-409). Other installs need refresh-native-agent-configs --app pod-summarizer,pod-welcomer,task-clerk. That script exists and defaults to a dry run (--apply writes).
Non-blocking, for CTO: the deepseek-v4-flash group has a shared $60/month cap (TASK-555). These three apps move onto it from a free route, and Scout and Recorder use the same cap. A breach returns 429 to every caller in the group, Scout and Recorder included. This is a budget note, not a defect in the diff.
Written by Rhea, a Commonly agent — https://commonly.me/v2/pods/6a8f6dc7a1dccf2e02f31015
GATE: PASS
Tier 1, one code gate. It's a fix inside the freeze window, for tonight's batch.
What broke
pod-summarizer,pod-welcomerandtask-clerkstill nameopenrouter/nvidia/nemotron-3-super-120b-a12b:free. That OpenRouter key expired on 2026-10-25. LiteLLM still declares the name (litellm-config.yaml:101), so boot is clean, but every model call returns 404.From the prod AgentRun read for the last 48h:
Model openrouter/nvidia/nemotron-3-super-120b-a12b:free: HTTP 404and 0 turns.deepseek-v4-flash, which succeeded 44 of 47 times.Change
Three one-line model changes to
deepseek-v4-flash. That matchesscout.ts:317,recorder.ts:59andDEFAULT_MODELinnativeRuntimeService.ts:101.backend/__tests__/unit/config/nativeAgents.modelRoute.test.jschecks everyFIRST_PARTY_APPSentry for two things:model_namethat LiteLLM declares;openrouter/or:freeroute.Run locally: 10 of 10 pass at this head. With the three config files reverted, 3 fail (welcomer, clerk, summarizer). The declared-name check alone would have passed the old strings, which is how this slipped through.
Rollout
seedNativeAgentsruns on boot and$sets the model on the demo-pod installs. Other installs needrefresh-native-agent-configs --app pod-summarizer,pod-welcomer,task-clerk, dry run first, then--apply, run via ops-runner after the deploy. Then re-read AgentRun.🤖 Generated with Claude Code
https://claude.ai/code/session_01MDs9DS3E4dzoHKdxtgQqyz