Skip to content

fix(native-agents): move summarizer, welcomer and clerk off the expired nemotron route - #2880

Merged
lilyshen0722 merged 1 commit into
mainfrom
fix/native-apps-deepseek
Oct 27, 2026
Merged

lilyshen0722 merged 1 commit into
mainfrom
fix/native-apps-deepseek

Conversation

@lilyshen0722

Copy link
Copy Markdown
Contributor

Tier 1, one code gate. It's a fix inside the freeze window, for tonight's batch.

What broke

pod-summarizer, pod-welcomer and task-clerk still name openrouter/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:

  • pod-summarizer failed 6 of 8 runs, with Model openrouter/nvidia/nemotron-3-super-120b-a12b:free: HTTP 404 and 0 turns.
  • pod-welcomer and task-clerk had no runs in that window, but they carry the same string and fail on their next trigger.
  • The control is Scout on deepseek-v4-flash, which succeeded 44 of 47 times.

Change

  • Three one-line model changes to deepseek-v4-flash. That matches scout.ts:317, recorder.ts:59 and DEFAULT_MODEL in nativeRuntimeService.ts:101.

  • backend/__tests__/unit/config/nativeAgents.modelRoute.test.js checks every FIRST_PARTY_APPS entry for two things:

    • its model is a model_name that LiteLLM declares;
    • its model is not an openrouter/ or :free route.

    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

seedNativeAgents runs on boot and $sets the model on the demo-pod installs. Other installs need refresh-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

…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
@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 63034af and 524a7cc.

Files selected for processing: 4
  • backend/__tests__/unit/config/nativeAgents.modelRoute.test.js
  • backend/config/native-agents/pod-summarizer.ts
  • backend/config/native-agents/pod-welcomer.ts
  • backend/config/native-agents/task-clerk.ts

Limit details: You’ve used all 10 included reviews currently available.

Walkthrough

Three first-party native apps now use deepseek-v4-flash instead of the OpenRouter Nemotron model. Parameterized tests check that first-party app models exist in the LiteLLM configuration and do not use openrouter/ or end in :free.

Changes: First-party native model routes

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: Normal

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-flash route 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: Passed 4
Check name Status Explanation
Title check Passed The title clearly summarizes the main change: moving the summarizer, welcomer, and clerk off the expired Nemotron route.
Description check Passed The description directly explains the expired route, affected applications, replacement model, tests, and rollout steps.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
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 lilyshen0722 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@lilyshen0722
lilyshen0722 added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit 3130c78 Oct 27, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant