Skip to content

feat(models): add Atlas Cloud chat provider - #1876

Open
binyangzhu000-sudo wants to merge 1 commit into
agent0ai:mainfrom
binyangzhu000-sudo:feat/atlascloud-provider
Open

binyangzhu000-sudo wants to merge 1 commit into
agent0ai:mainfrom
binyangzhu000-sudo:feat/atlascloud-provider

Conversation

@binyangzhu000-sudo

Copy link
Copy Markdown

Summary

Adds Atlas Cloud as a chat provider — one entry in conf/model_providers.yaml, no code
change. It is OpenAI-compatible, so it follows the nebius/venice shape:

  atlascloud:
    name: Atlas Cloud
    litellm_provider: openai
    models_list:
      endpoint_url: "/models"
    kwargs:
      a0_api_mode: chat
      api_base: https://api.atlascloud.ai/v1

The provider id is atlascloud, so the key resolves from ATLASCLOUD_API_KEY (or
API_KEY_ATLASCLOUD) through the existing get_api_key() derivation in models.py — nothing else
needed. The relative models_list.endpoint_url lets the Model Configuration plugin populate the
dropdown instead of making users type model ids.

Only the chat section is touched. /v1/embeddings returns 404 on this endpoint, so listing
an embedding provider would be wrong.

Validation

Per CONTRIBUTING's "Include exact tests run, or clearly explain why validation was blocked":

  • python -m pytest tests/test_model_config_ui.py -q → 7 passed
  • tests/test_model_search.py and tests/test_model_config_api_keys.py could not run here:
    collection imports sentence_transformers, which pulls in torch, and installing that was out of
    scope for a one-line YAML change. Both only read this YAML, and the file still parses
    (yaml.safe_load) with the new entry — 30 chat providers resolved.
  • The resolved model-listing URL (api_base + endpoint_url =
    https://api.atlascloud.ai/v1/models) returns 117 models over httpx, which is the client
    plugins/_model_config/api/model_search.py actually uses. (Worth noting: this endpoint's edge
    rejects Python's stdlib urllib default User-Agent with 403, but httpx and requests are
    fine — so the plugin's path works as-is.)
  • The configured call path was exercised end to end with litellm using this exact YAML entry:
    litellm.completion(model="openai/deepseek-ai/deepseek-v4-pro", api_base=<kwargs.api_base>) →
    finish_reason=stop with content, 32 tokens.

🤝 Partnership & contact

This PR comes from the Atlas Cloud team. Beyond the provider entry above, we'd love to explore a closer collaboration with Agent Zero — for example co-marketing or a featured integration.

If that sounds interesting, reach out anytime:

And of course, happy to revise this PR to match your project's conventions — just leave a comment. 🙌

Atlas Cloud is OpenAI-compatible, so this is one entry in
conf/model_providers.yaml following the nebius/venice shape:
litellm_provider: openai plus kwargs.api_base, and a relative
models_list.endpoint_url so the Model Configuration plugin can populate the
model dropdown.

The provider id is atlascloud, so the key resolves from ATLASCLOUD_API_KEY (or
API_KEY_ATLASCLOUD) through the existing get_api_key() derivation — no code
change needed.

Only the chat section is touched: /v1/embeddings returns 404 on this endpoint,
so claiming an embedding provider would be wrong.

Validation, per CONTRIBUTING's "include exact tests run, or clearly explain why
validation was blocked":

- python -m pytest tests/test_model_config_ui.py -q -> 7 passed
- tests/test_model_search.py and tests/test_model_config_api_keys.py could not
  run here: collection imports sentence_transformers, which pulls in torch, and
  that install was out of scope for this change. Both only read the YAML, and
  the file still parses (yaml.safe_load) with the new entry.
- The resolved model-listing URL (api_base + endpoint_url =
  https://api.atlascloud.ai/v1/models) returns 117 models over httpx, which is
  the client plugins/_model_config/api/model_search.py uses.
- The configured call path was exercised end to end with litellm using this
  exact YAML entry: litellm.completion(model="openai/deepseek-ai/deepseek-v4-pro",
  api_base=<kwargs.api_base>) returns finish_reason=stop with content.

Signed-off-by: binyangzhu000-sudo <224954946+binyangzhu000-sudo@users.noreply.github.com>
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