Skip to content

feat(llm): add Atlas Cloud as an LLM provider - #8452

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

feat(llm): add Atlas Cloud as an LLM provider#8452
binyangzhu000-sudo wants to merge 1 commit into
Skyvern-AI:mainfrom
binyangzhu000-sudo:feat/atlascloud-llm-provider

Conversation

@binyangzhu000-sudo

Copy link
Copy Markdown

Summary

Adds Atlas Cloud as an LLM provider. It is an OpenAI-compatible inference platform (DeepSeek,
Qwen, GLM, Kimi, MiniMax), so it registers through litellm's openai/ prefix with an api_base
override — the same routing the existing Novita and Inception entries use.

ENABLE_ATLASCLOUD=true
LLM_KEY=ATLASCLOUD
ATLASCLOUD_API_KEY=apikey-...
ATLASCLOUD_MODEL=deepseek-ai/deepseek-v4-pro

The registration follows the GROQ block: one LLM_KEY built from ATLASCLOUD_MODEL rather than
a hardcoded model list, so the entry cannot go stale as the platform's catalogue changes.

Registered in all six places a provider lives here

Not just the registry — I grepped ENABLE_GROQ to find every touchpoint:

File What
skyvern/config.py ENABLE_ATLASCLOUD, ATLASCLOUD_API_KEY, ATLASCLOUD_MODEL, ATLASCLOUD_API_BASE (default https://api.atlascloud.ai/v1)
skyvern/forge/sdk/api/llm/config_registry.py the ATLASCLOUD config
skyvern/cli/doctor.py provider health check — both key and model are required to register, so it checks the pair, the way OPENAI_COMPATIBLE does
docs/developers/self-hosted/llm-configuration.mdx a section after Groq
docker-compose.yml commented env block beside the other providers
env.litellm.example / env.ollama.example ENABLE_ATLASCLOUD=false in the "disable other providers" lists

Validation

Verified through litellm itself, not only against the raw HTTP endpoint — i.e. the exact shape
config_registry.py registers:

litellm.completion(
    model="openai/deepseek-ai/deepseek-v4-pro",
    api_base="https://api.atlascloud.ai/v1",
    api_key=...,
    max_completion_tokens=512,
)
# -> finish_reason=stop, content='ok', 35 tokens
  • ruff check and ruff format --check on the three touched Python files: unchanged from the
    pre-branch baseline
    (2 pre-existing findings, none added — checked by stashing and re-running).
  • The docs section notes one caveat: the suggested default is a reasoning model that spends
    completion tokens on a hidden chain of thought, so a small LLM_CONFIG_MAX_TOKENS can return an
    empty response with finish_reason="length". Non-reasoning ids such as deepseek-ai/DeepSeek-V3.1
    are unaffected.

No credentials in the diff.


🤝 Partnership & contact

This PR comes from the Atlas Cloud team. Beyond the integration above, we'd love to explore a closer collaboration with Skyvern — 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 an OpenAI-compatible inference platform (DeepSeek, Qwen, GLM,
Kimi, MiniMax), so it registers through litellm's `openai/` prefix with an
api_base override — the same routing the Novita and Inception entries already
use. The settings-driven registration follows the GROQ block: one LLM_KEY built
from ATLASCLOUD_MODEL rather than a hardcoded model list, so it does not go
stale.

Registered in all six places a provider lives here, not just the registry:

- skyvern/config.py: ENABLE_ATLASCLOUD, ATLASCLOUD_API_KEY, ATLASCLOUD_MODEL,
  ATLASCLOUD_API_BASE (default https://api.atlascloud.ai/v1)
- skyvern/forge/sdk/api/llm/config_registry.py: the ATLASCLOUD config
- skyvern/cli/doctor.py: provider health check — both API key and model are
  required to register, so it checks the pair, like OPENAI_COMPATIBLE does
- docs/developers/self-hosted/llm-configuration.mdx: a section after Groq
- docker-compose.yml: commented env block next to the other providers
- env.litellm.example / env.ollama.example: ENABLE_ATLASCLOUD=false in the
  "disable other providers" lists

Verified through litellm itself rather than only against the raw HTTP endpoint:
`litellm.completion(model="openai/deepseek-ai/deepseek-v4-pro",
api_base="https://api.atlascloud.ai/v1", ...)` returns finish_reason=stop with
content — i.e. the exact shape config_registry.py registers resolves correctly.

The docs note one caveat: the suggested default is a reasoning model that spends
completion tokens on a hidden chain of thought, so a small
LLM_CONFIG_MAX_TOKENS can produce an empty response with
finish_reason="length"; non-reasoning ids such as deepseek-ai/DeepSeek-V3.1 are
unaffected.

ruff check and ruff format on the three touched Python files are unchanged from
the pre-branch baseline (2 pre-existing findings, none added).

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