Skip to content

feat(providers): add Atlas Cloud as an OpenAI-compatible gateway - #16114

Open
binyangzhu000-sudo wants to merge 6 commits into
cheaper-inference:release/v3.8.53from
binyangzhu000-sudo:feat/atlascloud-provider
Open

binyangzhu000-sudo wants to merge 6 commits into
cheaper-inference:release/v3.8.53from
binyangzhu000-sudo:feat/atlascloud-provider

Conversation

@binyangzhu000-sudo

@binyangzhu000-sudo binyangzhu000-sudo commented Oct 10, 2026 •

Copy link
Copy Markdown

Summary

  • Adds Atlas Cloud (https://api.atlascloud.ai/v1) as an OpenAI-compatible API-key gateway with live model discovery (passthroughModels). Atlas Cloud serves chat models from many vendors (DeepSeek, Z.ai, Moonshot, Qwen, Anthropic, OpenAI, …) under vendor-prefixed ids such as deepseek-ai/deepseek-v4-flash.
  • Same shape as the recent gateway additions (feat(providers): add onomeo as an OpenAI-compatible gateway #14297 onomeo, feat(providers): add Unifically as an OpenAI-compatible gateway #14182 Unifically): registry entry via buildOpenAiCompatibleRegistryEntry, endpoint in PROVIDER_ENDPOINTS, listed in AGGREGATOR_PROVIDER_IDS, catalog entry in its own file.
  • The catalog entry lives in apikey/atlascloud.ts and is spread from the apikey/index.ts barrel (the same extraction feat(providers): add BeatAPI gateway #14875 BeatAPI uses), so the frozen gateways.ts does not grow and no file-size rebaseline is needed.

Disclosure: I work at Atlas Cloud.

Related Issues

  • None.

Validation

  • Change type: provider
  • Focused tests and category gates from the golden path: check:provider-consistency (OK — 290 REGISTRY entries, 373 canonical providers), check:provider-assets (passed), check:file-size (OK), tests/unit/atlascloud-provider.test.ts, tests/unit/provider-translate-path-golden.test.ts (see Reviewer Notes), gen:provider-reference (generated diff committed: 372 → 373 providers, one new table row)
  • npm run lint
  • Reconciled with the current active release base: branched from release/v3.8.52 @ 02f2f00e, still the tip when pushed; no open release-freeze issue
  • Production-code changes include a new or updated automated test in this PR
  • typecheck:core: 0 errors

Tests Added Or Updated

  • tests/unit/atlascloud-provider.test.ts (new, 6 tests): registry shape (openai format, default executor, Bearer API key, chat/models URLs, passthrough), empty static catalog, wiring through REGISTRY / PROVIDER_ENDPOINTS / APIKEY_PROVIDERS / DefaultExecutor, aggregator listing, no Free badge, and no undeclared tool/vision capability.
  • tests/unit/provider-node-reserved-prefix.test.ts: RESERVED_PREFIX_COUNT 431 → 432 (measured; the test passed at 431 on the base before this change).
  • tests/unit/providers-constants-split.test.ts: APIKEY_PROVIDER_COUNT 249 → 250 (measured), and apikey/atlascloud.ts added to the barrel partition list next to beatapi.
  • tests/snapshots/provider/translate-path.json: new atlascloud block.

Coverage Notes

  • open-sse/config/providers/registry/atlascloud/index.ts, src/shared/constants/providers/apikey/atlascloud.ts and the wiring lines in open-sse/config/providers/index.ts, src/shared/constants/config.ts, src/shared/constants/providers.ts and apikey/index.ts are covered by atlascloud-provider.test.ts, the two count/partition tests, and the translate-path golden.

Reviewer Notes

  • Golden snapshot: running UPDATE_GOLDEN=1 on macOS also flips six Copilot user-agent lines from (linux) to (darwin) (the committed snapshot is Linux-generated). I left those lines untouched and inserted only the atlascloud block, which is byte-identical to the regenerated output. On macOS the golden test fails on those six lines both before and after this change; on the Linux runner it should pass.
  • Live check against the real gateway, using OmniRoute's own buildProviderUrl / buildProviderHeaders for atlascloud: the registry modelsUrl returned 117 models without a key (all text-output chat models, so no category filter is needed); non-streaming and streaming chat completions for deepseek-ai/deepseek-v4-flash both returned 200 with the expected text, the streaming one as text/event-stream.
  • hasFree is false (paid per token). No tool/vision capability is declared, since none was exercised here.
  • Changelog fragment: changelog.d/features/16114-atlascloud-provider.md (renamed with the PR number and credit line in a follow-up commit, per changelog.d/README.md).

Atlas Cloud serves chat models from many vendors (DeepSeek, Z.ai,
Moonshot, Qwen, Anthropic, OpenAI, ...) behind one OpenAI-compatible
endpoint at https://api.atlascloud.ai/v1, with vendor-prefixed model
ids such as deepseek-ai/deepseek-v4-flash.

The registry entry uses buildOpenAiCompatibleRegistryEntry with live
model discovery (passthroughModels). Its /v1/models lists only
text-output chat models, so no category filter is needed. The catalog
entry lives in apikey/atlascloud.ts and is spread from the apikey
barrel, the same extraction BeatAPI uses, so the frozen gateways.ts
does not grow. It is listed in AGGREGATOR_PROVIDER_IDS and declares no
tool or vision capability.

Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
Renames the fragment to 16114-atlascloud-provider.md and adds the PR link and credit, as changelog.d/README.md asks.

Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Hi @binyangzhu000-sudo — closing this pull request to clear the open queue. The branch feat/atlascloud-provider is kept, so the commits stay. Comment here if it should be reopened.

@diegosouzapw

Copy link
Copy Markdown
Collaborator

Hi @binyangzhu000-sudo — reopening this pull request. The close was a mistake, and it is back in the merge queue. The branch feat/atlascloud-provider was kept.

@diegosouzapw diegosouzapw reopened this Oct 10, 2026
@diegosouzapw diegosouzapw added the deferred-v3.8.53 Feat PRs held for v3.8.53. Keep open. Do not merge into v3.8.52. label Oct 13, 2026
@diegosouzapw diegosouzapw changed the title feat(providers): add Atlas Cloud as an OpenAI-compatible gateway [defer] feat(providers): add Atlas Cloud as an OpenAI-compatible gateway Oct 13, 2026
@diegosouzapw
diegosouzapw changed the base branch from release/v3.8.52 to release/v3.8.53 October 19, 2026 13:31
@diegosouzapw

Copy link
Copy Markdown
Collaborator

Re-homed to release/v3.8.53: v3.8.52 entered its release freeze, so the branch now belongs to the release captain and development continues on the next cycle. Nothing is wrong with this PR — it just needed a live base. No action needed from you; CI will re-run against the new base.

@diegosouzapw diegosouzapw removed the deferred-v3.8.53 Feat PRs held for v3.8.53. Keep open. Do not merge into v3.8.52. label Oct 20, 2026
@diegosouzapw diegosouzapw changed the title [defer] feat(providers): add Atlas Cloud as an OpenAI-compatible gateway feat(providers): add Atlas Cloud as an OpenAI-compatible gateway Oct 20, 2026
diegosouzapw and others added 3 commits October 22, 2026 15:32
Resolve the count pins against the current base: RESERVED_PREFIX_COUNT 432 -> 433 and
APIKEY_PROVIDER_COUNT 252 -> 253 (Atlas Cloud adds one of each), regenerate
docs/reference/PROVIDER_REFERENCE.md, and bump the aggregate provider count 375 -> 376 in the
docs, SVGs, skills mirrors and package.json description flagged by check:docs-counts.
Resolve the count pins after ainetcafe (cheaper-inference#13862) landed on the base:
RESERVED_PREFIX_COUNT 433 -> 434 and APIKEY_PROVIDER_COUNT 253 -> 254 (both
measured on the merged tree), take the base REPOSITORY_MAP table, regenerate
docs/reference/PROVIDER_REFERENCE.md (377 unique ids, apikey=254) and move
this PR's provider-total mentions to the real merged count 377.

Co-authored-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
Resolve README/SVG conflicts to the release side (the PR side only carried the 375->377 count the release now has), regenerate PROVIDER_REFERENCE.md (378 unique ids, apikey=254) and move the aggregate provider count in non-protected docs, skills/README.md, agentSkills.ts, package.json and the SVGs from 377 to 378 (digit-only).

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
@diegosouzapw diegosouzapw added the deferred-v3.8.54 Feat PRs held for v3.8.54. Keep open. Do not merge into v3.8.53. label Nov 2, 2026
Take upstream's docs/diagram/count files and re-apply the Atlas Cloud
increment on top (provider total 380 -> 381, reserved prefixes 437,
APIKEY_PROVIDERS 256 with the atlascloud extract in the partition test).
Regenerate PROVIDER_REFERENCE.md and the README SVGs from their generators,
and mirror llm.txt into docs/i18n.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
@binyangzhu000-sudo

Copy link
Copy Markdown
Author

Synced with release/v3.8.53. Conflicts were the provider-count bumps (380 -> 381 across README, docs, SVGs, skills, package.json) and the count assertions in provider-node-reserved-prefix.test.ts (437) and providers-constants-split.test.ts (256, with the atlascloud extract in the partition list). PROVIDER_REFERENCE.md and the README SVGs were regenerated from their generators, and llm.txt mirrored into docs/i18n.

Verified: check-docs-counts-sync (strict checks pass), check-docs-sync, check-doc-links, and 915 provider/registry/constants/docs unit test files: 5039 of 5040 pass; the remaining one is the translate-path golden, which on macOS differs only in the copilot user-agent (darwin vs linux) and is unrelated to this change. Full suite and typecheck not run.

@coderabbitai

coderabbitai Bot commented Nov 4, 2026

Copy link
Copy Markdown

Important

Review skipped

Review was skipped due to path filters

⛔ Files ignored due to path filters: 104
  • AGENTS.md is excluded by none and included by none
  • README.md is excluded by none and included by none
  • changelog.d/features/16114-atlascloud-provider.md is excluded by none and included by none
  • docs/architecture/ARCHITECTURE.md is excluded by none and included by none
  • docs/architecture/CODEBASE_DOCUMENTATION.md is excluded by none and included by none
  • docs/architecture/REPOSITORY_MAP.md is excluded by none and included by none
  • docs/comparison/OMNIROUTE_VS_ALTERNATIVES.md is excluded by none and included by none
  • docs/diagrams/cli-terminal.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • docs/diagrams/comparison-table.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • docs/diagrams/promise-pillars.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • docs/diagrams/readme-hero.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • docs/frameworks/A2A-SERVER.md is excluded by none and included by none
  • docs/frameworks/AGENTBRIDGE.md is excluded by none and included by none
  • docs/frameworks/OPEN_SSE_ARCHITECTURE.md is excluded by none and included by none
  • docs/guides/FREE_PROVIDER_RANKINGS.md is excluded by none and included by none
  • docs/i18n/am/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ar/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/az/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/bg/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/bn/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/bs/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/cs/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/da/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/de/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/el/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/es/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/et/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/fa/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/fi/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/fr/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ga/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/gu/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ha/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/he/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/hi/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/hr/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/hu/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/hy/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/id/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ig/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/it/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ja/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ka/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/km/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/kn/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ko/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/lt/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/lv/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ml/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/mr/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ms/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/mt/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/my/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ne/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/nl/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/no/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/or/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/pa/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/phi/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/pl/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/pt-BR/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/pt/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ro/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ru/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/si/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/sk/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/sl/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/sr/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/sv/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/sw/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ta/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/te/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/th/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/tr/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/uk-UA/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/ur/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/uz/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/vi/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/yo/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/zh-CN/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/i18n/zh-TW/llm.txt is excluded by !docs/i18n/** and included by none
  • docs/reference/PROVIDER_REFERENCE.md is excluded by !docs/reference/PROVIDER_REFERENCE.md and included by none
  • llm.txt is excluded by none and included by none
  • open-sse/config/providers/index.ts is excluded by none and included by none
  • open-sse/config/providers/registry/atlascloud/index.ts is excluded by none and included by none
  • package.json is excluded by none and included by none
  • public/images/tier-flow-dark.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • public/images/tier-flow-light.svg is excluded by !**/*.svg, !**/*.svg and included by none
  • scripts/docs/gen-readme-cli-terminal.mjs is excluded by none and included by none
  • scripts/docs/gen-readme-comparison-table.mjs is excluded by none and included by none
  • scripts/docs/gen-readme-hero.mjs is excluded by none and included by none
  • scripts/docs/gen-readme-promise-pillars.mjs is excluded by none and included by none
  • skills/README.md is excluded by none and included by none
  • skills/omni-auth/SKILL.md is excluded by none and included by none
  • skills/omni-providers/SKILL.md is excluded by none and included by none
  • src/shared/constants/agentSkills.ts is excluded by none and included by none
  • src/shared/constants/config.ts is excluded by none and included by none
  • src/shared/constants/providers.ts is excluded by none and included by none
  • src/shared/constants/providers/apikey/atlascloud.ts is excluded by none and included by none
  • src/shared/constants/providers/apikey/index.ts is excluded by none and included by none
  • tests/snapshots/provider/translate-path.json is excluded by none and included by none
  • tests/unit/atlascloud-provider.test.ts is excluded by none and included by none
  • tests/unit/provider-node-reserved-prefix.test.ts is excluded by none and included by none
  • tests/unit/providers-constants-split.test.ts is excluded by none and included by none

CodeRabbit blocks several paths by default. You can override this behavior by explicitly including those paths in the path filters. For example, including **/dist/** will override the default block on the dist directory, by removing the pattern from both the lists.

Run configuration

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deferred-v3.8.54 Feat PRs held for v3.8.54. Keep open. Do not merge into v3.8.53.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants