Switch your app to open models.
Keep the tests green.
OpenSwitch is a coding agent that moves an app's OpenAI and Anthropic calls to NVIDIA Nemotron on Nebius Token Factory. It measures every Nemotron size, with and without thinking, on the app's own prompts, picks the cheapest configuration that keeps quality, rewrites the code, runs the tests and fixes what breaks.
$ openswitch migrate ./your-app
Results on two apps
helpdesk-ai
Full report →$7.45 → $0.39 per 1K calls
| Call site | Was | Now | Score |
|---|---|---|---|
classify_ticket | gpt-4o-mini | Super 120B fast | 9.3 |
extract_order | gpt-4o | Nano 30B fast | 9.7 |
refund_amount | o3-mini | Nano 30B think | 10.0 |
summarize_thread | gpt-4o | Super 120B fast | 9.7 |
draft_reply | gpt-4o | Nano 30B think | 9.5 |
translate_reply | claude-sonnet-4-5 | Nano 30B fast | 10.0 |
issue-digest
Full report →$1.84 → $0.06 per 1K calls
| Call site | Was | Now | Score |
|---|---|---|---|
complete | gpt-4o | Nano 30B fast | 8.3 |
All AI work runs on NVIDIA Nemotron
Every model call OpenSwitch makes goes through a Nebius Token Factory API key to Nemotron. No OpenAI or Anthropic key is used at any step. These are the totals from the ledgers of the two runs above.
| Role | Model | Calls | Tokens | Cost |
|---|---|---|---|---|
| Judge (checklist grading) | Nemotron 3 Ultra 550B | 236 | 137,318 | $0.157 |
| Candidates under test | Nemotron 3 Ultra 550B | 108 | 37,945 | $0.089 |
| Researcher (reads Tavily results) | Nemotron 3 Super 120B | 9 | 32,766 | $0.011 |
| Candidates under test | Nemotron 3 Super 120B | 108 | 32,346 | $0.022 |
| Candidates under test | Nemotron 3 Nano 30B | 108 | 31,088 | $0.005 |
| Eval-input writer | Nemotron 3 Super 120B | 14 | 23,346 | $0.016 |
| Rewriter (writes the code changes) | Nemotron 3 Ultra 550B | 2 | 8,068 | $0.015 |
| Planner | Nemotron 3 Ultra 550B | 2 | 7,550 | $0.014 |
| Test writer | Nemotron 3 Ultra 550B | 1 | 2,818 | $0.005 |
| Total | 588 | 313,245 | $0.34 |
The code changes in each migration were written by Nemotron 3 Ultra; see written-by-nemotron/ in the repo.
How it works
The Python AST finds every OpenAI/Anthropic call, with its model and parameters.
Purpose, output contract, rubric and risks for every call. Resolves models set in config files.
Live prices for the current model and for Nemotron, plus the API differences that matter, with sources.
Captures the app's real prompts with a fake SDK, runs 6 configs, checks each answer through the app's own code, Ultra judges.
Model ids, thinking flags, token headroom, config files and price tables, all mechanically checked.
Runs the repo's tests (or writes smoke tests). On a failure it fixes the code or moves that call to a stronger config.
Why it matters
- Measured, not guessed. On refund-policy math, Nemotron Nano with thinking scored 10/10 while Super without thinking scored 1.7/10. Thinking is a choice per call, and OpenSwitch measures it.
- Spends where it matters. When a much cheaper config narrowly misses, OpenSwitch doubles the sample for that call before deciding. In the HelpDesk run, that moved
draft_replyfrom Super to Nano (both with thinking): about 4x cheaper, still passing. - Honest output. The report shows every configuration's score, flags calls that cost more after the switch, and lists the failure cases it found.
- Nothing to trust blindly. You get a branch to review: a normal diff, a PR description and the test log.