Skip to content

docs: add Atlas Cloud provider integration guide#2145

Open
lucaszhu-hue wants to merge 1 commit into
MervinPraison:mainfrom
lucaszhu-hue:docs/add-atlascloud
Open

docs: add Atlas Cloud provider integration guide#2145
lucaszhu-hue wants to merge 1 commit into
MervinPraison:mainfrom
lucaszhu-hue:docs/add-atlascloud

Conversation

@lucaszhu-hue

@lucaszhu-hue lucaszhu-hue commented Jun 22, 2026

Copy link
Copy Markdown

Adds documentation for using Atlas Cloud (an OpenAI-compatible API gateway with 300+ models) with PraisonAI via its OpenAI-compatible / LiteLLM path, mirroring the existing provider examples. No code changes.

  • New examples/python/providers/atlascloud/atlascloud_example.py following the same pattern as the other provider examples (e.g. vLLM, OpenRouter), using the documented OpenAI-compatible llm dict config (model / api_base / api_key).
  • Registers Atlas Cloud in the README "providers with examples" table and badge list.

Contact: marketing@atlascloud.ai

Summary by CodeRabbit

  • New Features

    • Added Atlas Cloud provider support, enabling seamless integration with its OpenAI-compatible API gateway
  • Documentation

    • New Python example demonstrating how to configure PraisonAI with Atlas Cloud and execute sample conversations for greeting, calculus, and code optimization tasks
    • Updated provider documentation to include Atlas Cloud (now 25 supported providers)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more β†’

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account β†’

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us β†’

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

πŸ“ Walkthrough

Walkthrough

Adds Atlas Cloud as a new supported provider by introducing a Python example script that configures a PraisonAI Agent against the Atlas Cloud OpenAI-compatible API endpoint, and updates the README to include the Atlas Cloud badge and a table entry linking to that example.

Changes

Atlas Cloud Provider Addition

Layer / File(s) Summary
Atlas Cloud example script and README registration
examples/python/providers/atlascloud/atlascloud_example.py, README.md
New Python script configures a PraisonAI Agent with api_base pointing to https://api.atlascloud.ai/v1 and OPENAI_API_KEY, then runs three agent.start() calls. README badge count incremented from 24 to 25, an Atlas Cloud badge added to the icon list, and a new row inserted into the provider examples table.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Suggested labels

Review effort 2/5

Poem

πŸ‡ A new cloud joins the fold today,
Atlas rises, hip hooray!
A badge, a row, a script so neat,
Three prompts to make the demo complete.
The README grows by one more friend β€”
Twenty-five providers, no end! 🌀️

πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Description Check βœ… Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check βœ… Passed The title clearly and accurately summarizes the main change: adding documentation for Atlas Cloud provider integration, which is reflected in both the README updates and the new example file.
Docstring Coverage βœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
πŸ§ͺ Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@MervinPraison

Copy link
Copy Markdown
Owner

@copilot Do a thorough review of this PR. Read ALL existing reviewer comments above from Qodo, Coderabbit, and Gemini first β€” incorporate their findings.

Review areas:

  1. Bloat check: Are changes minimal and focused? Any unnecessary code or scope creep?
  2. Security: Any hardcoded secrets, unsafe eval/exec, missing input validation?
  3. Performance: Any module-level heavy imports? Hot-path regressions?
  4. Tests: Are tests included? Do they cover the changes adequately?
  5. Backward compat: Any public API changes without deprecation?
  6. Code quality: DRY violations, naming conventions, error handling?
  7. Address reviewer feedback: If Qodo, Coderabbit, or Gemini flagged valid issues, include them in your review
  8. Suggest specific improvements with code examples where possible

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request adds support and documentation for Atlas Cloud as a provider, updating the README and adding a new usage example. The review feedback points out that the llm parameter in Agent is deprecated and should be replaced with the model parameter to avoid deprecation warnings.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment on lines +24 to +29
llm={
# Prefix with "openai/" so LiteLLM routes through the OpenAI-compatible path
"model": "openai/deepseek-ai/deepseek-v4-pro",
"api_base": "https://api.atlascloud.ai/v1",
"api_key": os.environ.get("OPENAI_API_KEY"), # your Atlas Cloud key
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The llm parameter is deprecated in praisonaiagents in favor of model. To align with the modern API and avoid deprecation warnings, use the model parameter to pass the configuration dictionary.

Suggested change
llm={
# Prefix with "openai/" so LiteLLM routes through the OpenAI-compatible path
"model": "openai/deepseek-ai/deepseek-v4-pro",
"api_base": "https://api.atlascloud.ai/v1",
"api_key": os.environ.get("OPENAI_API_KEY"), # your Atlas Cloud key
},
model={
# Prefix with "openai/" so LiteLLM routes through the OpenAI-compatible path
"model": "openai/deepseek-ai/deepseek-v4-pro",
"api_base": "https://api.atlascloud.ai/v1",
"api_key": os.environ.get("OPENAI_API_KEY"), # your Atlas Cloud key
},

@greptile-apps

greptile-apps Bot commented Jun 22, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds documentation for Atlas Cloud as a new LLM provider, following the existing pattern used by vLLM and other OpenAI-compatible providers. No production code is changed.

  • Adds examples/python/providers/atlascloud/atlascloud_example.py using the llm dict config with api_base pointing at https://api.atlascloud.ai/v1 and the openai/ LiteLLM prefix.
  • Updates README.md to include an Atlas Cloud badge and a table row, correctly incrementing the provider count from 24 to 25.

Confidence Score: 4/5

Documentation-only change; safe to merge after fixing the env var name so users aren't instructed to overwrite their OpenAI key.

The example instructs users to set OPENAI_API_KEY to their Atlas Cloud credential and then reads that same variable at runtime. A developer who already has OPENAI_API_KEY configured for OpenAI will either silently send that key to Atlas Cloud or, if they follow the setup step, lose their working OpenAI key. Renaming to a provider-specific env var (ATLAS_CLOUD_API_KEY) resolves both problems without any other changes.

examples/python/providers/atlascloud/atlascloud_example.py β€” the env var name should be changed in both the setup comment (line 11) and the api_key lookup (line 28).

Important Files Changed

Filename Overview
examples/python/providers/atlascloud/atlascloud_example.py New Atlas Cloud provider example following the llm-dict pattern; reuses OPENAI_API_KEY for an Atlas Cloud credential, which can silently conflict with an existing OpenAI key in the same environment.
README.md Adds Atlas Cloud badge and table entry; provider count updated from 24 to 25, which matches the actual table row count.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User as User Script
    participant Agent as PraisonAI Agent
    participant LiteLLM as LiteLLM (openai/ prefix)
    participant Atlas as Atlas Cloud API (api.atlascloud.ai/v1)
    participant Model as deepseek-ai/deepseek-v4-pro

    User->>Agent: agent.start(prompt)
    Agent->>LiteLLM: route via llm dict (model, api_base, api_key)
    LiteLLM->>Atlas: POST /v1/chat/completions Authorization: Bearer ATLAS_CLOUD_API_KEY
    Atlas->>Model: forward to model
    Model-->>Atlas: completion response
    Atlas-->>LiteLLM: OpenAI-compatible response
    LiteLLM-->>Agent: parsed response
    Agent-->>User: response text
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User as User Script
    participant Agent as PraisonAI Agent
    participant LiteLLM as LiteLLM (openai/ prefix)
    participant Atlas as Atlas Cloud API (api.atlascloud.ai/v1)
    participant Model as deepseek-ai/deepseek-v4-pro

    User->>Agent: agent.start(prompt)
    Agent->>LiteLLM: route via llm dict (model, api_base, api_key)
    LiteLLM->>Atlas: POST /v1/chat/completions Authorization: Bearer ATLAS_CLOUD_API_KEY
    Atlas->>Model: forward to model
    Model-->>Atlas: completion response
    Atlas-->>LiteLLM: OpenAI-compatible response
    LiteLLM-->>Agent: parsed response
    Agent-->>User: response text
Loading

Reviews (1): Last reviewed commit: "docs: add Atlas Cloud provider integrati..." | Re-trigger Greptile

Comment on lines +10 to +12
Setup:
export OPENAI_API_KEY=<your-atlas-cloud-key> # e.g. apikey-xxxxxxxx
# or pass api_key="..." directly in the llm dict below

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Using OPENAI_API_KEY to hold an Atlas Cloud key is confusing and dangerous: a developer who already has OPENAI_API_KEY set to a real OpenAI credential will silently send that key to Atlas Cloud (or, if they follow the setup instruction literally, they'll overwrite their OpenAI key). A dedicated env var avoids the collision entirely.

Suggested change
Setup:
export OPENAI_API_KEY=<your-atlas-cloud-key> # e.g. apikey-xxxxxxxx
# or pass api_key="..." directly in the llm dict below
Setup:
export ATLAS_CLOUD_API_KEY=<your-atlas-cloud-key> # e.g. apikey-xxxxxxxx
# or pass api_key="..." directly in the llm dict below

# Prefix with "openai/" so LiteLLM routes through the OpenAI-compatible path
"model": "openai/deepseek-ai/deepseek-v4-pro",
"api_base": "https://api.atlascloud.ai/v1",
"api_key": os.environ.get("OPENAI_API_KEY"), # your Atlas Cloud key

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 The api_key lookup should use the dedicated ATLAS_CLOUD_API_KEY env var to match the updated setup instruction and avoid silently picking up a real OpenAI key from the environment.

Suggested change
"api_key": os.environ.get("OPENAI_API_KEY"), # your Atlas Cloud key
"api_key": os.environ.get("ATLAS_CLOUD_API_KEY"), # your Atlas Cloud key

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
examples/python/providers/atlascloud/atlascloud_example.py (1)

21-30: 🧹 Nitpick | πŸ”΅ Trivial | ⚑ Quick win

Fail fast when the Atlas Cloud key is missing

At Line 28, os.environ.get("OPENAI_API_KEY") can be None, which defers failure to the first API call. Add an explicit check so the example fails with a clear setup message.

Proposed change
 agent = Agent(
     instructions="You are a helpful assistant",
     llm={
         # Prefix with "openai/" so LiteLLM routes through the OpenAI-compatible path
         "model": "openai/deepseek-ai/deepseek-v4-pro",
         "api_base": "https://api.atlascloud.ai/v1",
-        "api_key": os.environ.get("OPENAI_API_KEY"),  # your Atlas Cloud key
+        "api_key": os.environ.get("OPENAI_API_KEY"),  # your Atlas Cloud key
     },
 )
+
+if not agent.api_key:
+    raise ValueError(
+        "Missing OPENAI_API_KEY. Set it to your Atlas Cloud key before running this example."
+    )
πŸ€– Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/python/providers/atlascloud/atlascloud_example.py` around lines 21 -
30, The os.environ.get("OPENAI_API_KEY") call in the Agent initialization can
return None if the environment variable is not set, causing the error to be
deferred until the first API call. Add an explicit validation check before the
Agent initialization to verify that the API key is not None, and if it is
missing, raise a clear error or exit with a helpful setup message that tells the
user to set the OPENAI_API_KEY environment variable.
πŸ€– Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@examples/python/providers/atlascloud/atlascloud_example.py`:
- Around line 21-30: The os.environ.get("OPENAI_API_KEY") call in the Agent
initialization can return None if the environment variable is not set, causing
the error to be deferred until the first API call. Add an explicit validation
check before the Agent initialization to verify that the API key is not None,
and if it is missing, raise a clear error or exit with a helpful setup message
that tells the user to set the OPENAI_API_KEY environment variable.

ℹ️ Review info
βš™οΈ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fa3146a3-2a2e-4b76-a5b6-d7c13dc8d821

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 5f39d66 and 29bd827.

πŸ“’ Files selected for processing (2)
  • README.md
  • examples/python/providers/atlascloud/atlascloud_example.py

@MervinPraison

Copy link
Copy Markdown
Owner

@claude You are the FINAL architecture reviewer. If the branch is under MervinPraison/PraisonAI (not a fork), you are able to make modifications to this branch and push directly. SCOPE: Focus ONLY on Python packages (praisonaiagents, praisonai). Do NOT modify praisonai-rust or praisonai-ts. Read ALL comments above from Gemini, Qodo, CodeRabbit, and Copilot carefully before responding.

Phase 1: Review per AGENTS.md

  1. Protocol-driven: check heavy implementations vs core SDK
  2. Backward compatible: ensure zero feature regressions
  3. Performance: no hot-path regressions

Phase 2: FIX Valid Issues
4. For any VALID bugs or architectural flaws found by Gemini, CodeRabbit, Qodo, Copilot, or any other reviewer: implement the fix
5. Push all code fixes directly to THIS branch (do NOT create a new PR)
6. Comment a summary of exact files modified and what you skipped

Phase 3: Final Verdict
7. If all issues are resolved, approve the PR / close the Issue
8. If blocking issues remain, request changes / leave clear action items

@praisonai-triage-agent

praisonai-triage-agent Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Claude finished @MervinPraison's task β€”β€” View job


Architecture Review for Atlas Cloud Provider Integration

Todo List:

  • Read AGENTS.md for architecture guidelines
  • Review changed files
  • Validate against architecture principles
  • Synthesize reviewer feedback
  • Provide final verdict

πŸ“‹ Review Summary

This PR adds documentation for Atlas Cloud as a new provider through two changes:

  1. New example file: examples/python/providers/atlascloud/atlascloud_example.py
  2. README updates: badge + table entry (provider count 24β†’25)

βœ… Architecture Validation (per AGENTS.md)

Protocol-driven: βœ… Pass - Documentation-only change, no core SDK modifications

Backward compatible: βœ… Pass - No existing functionality affected

Performance: βœ… Pass - No runtime impact (docs/examples only)

πŸ” Reviewer Feedback Analysis

Valid Issues Found:

  1. 🚨 CRITICAL - API Key Collision (Greptile)

    • The example uses OPENAI_API_KEY for Atlas Cloud credentials
    • Risk: Users with existing OpenAI keys will either:
      • Silently send OpenAI keys to Atlas Cloud (security risk)
      • Overwrite their OpenAI configuration (functionality break)
    • Solution: Use dedicated ATLAS_CLOUD_API_KEY environment variable
  2. ⚠️ MEDIUM - Deprecated Parameter Usage (Gemini)

    • Uses llm= parameter which is deprecated in favor of model=
    • Verified: Agent class accepts both, but llm= is legacy
    • Solution: Update to use model= parameter
  3. πŸ’‘ LOW - Missing Validation (CodeRabbit)

    • No check for missing API key at initialization
    • Would fail at runtime with unclear error
    • Solution: Add explicit validation with clear error message

🎯 Final Verdict

Status: ❌ Changes Required

This PR cannot be merged in its current state due to the critical security issue of API key collision. The following changes are required:

Required Changes:

  1. Fix API key collision (examples/python/providers/atlascloud/atlascloud_example.py):

    • Line 11: Change setup instruction to export ATLAS_CLOUD_API_KEY=<your-atlas-cloud-key>
    • Line 28: Change to "api_key": os.environ.get("ATLAS_CLOUD_API_KEY")
  2. Update to modern API (examples/python/providers/atlascloud/atlascloud_example.py):

    • Line 24: Change llm={ to model={
  3. Add validation (examples/python/providers/atlascloud/atlascloud_example.py):

    • After line 30, add:
    if not os.environ.get("ATLAS_CLOUD_API_KEY"):
        raise ValueError("Missing ATLAS_CLOUD_API_KEY. Please set it to your Atlas Cloud key.")

Note to PR Author

Since this PR is from a fork, I cannot make these changes directly. Please implement the required fixes above, particularly the critical API key collision issue, before this can be merged.


@MervinPraison

Copy link
Copy Markdown
Owner

@claude

Automated merge readiness report (local git rebase origin/main scan, 2026-06-22 22:05 UTC)

GitHub status

CI (key jobs: test-core, smoke, test-windows, main (3.11), review)

  • Key CI gaps: test-core: missing; smoke: missing; test-windows: missing; main (3.11): missing; review: missing

Guidance

  1. git fetch origin && git rebase origin/main on the PR branch.
  2. Resolve conflicts aligning with latest main unless intentional.
  3. git push --force-with-lease after rebase.
  4. Ensure key CI jobs pass.

Final verdict after fix: reply merge-ready (CLEAN + green CI) or list remaining blockers.

@praisonai-triage-agent

praisonai-triage-agent Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Claude finished @MervinPraison's task β€”β€” View job


πŸ” Merge Readiness Assessment

Todo List:

  • Review current PR state and changes
  • Check if critical issues were addressed
  • Assess CI status
  • Provide final merge verdict

πŸ“‹ Review Summary

PR: #2145 β€” docs: add Atlas Cloud provider integration guide

🚨 Critical Issues NOT Resolved

The PR still contains the critical security issue identified in the previous architecture review:

  1. API Key Collision (Line 11, 28 in atlascloud_example.py):

    • Still uses OPENAI_API_KEY for Atlas Cloud credentials
    • Security Risk: Users with existing OpenAI keys will either:
      • Silently send OpenAI keys to Atlas Cloud API
      • Overwrite their working OpenAI configuration
    • Required Fix: Use dedicated ATLAS_CLOUD_API_KEY environment variable
  2. Deprecated Parameter (Line 24):

    • Still uses llm= parameter instead of modern model= parameter
    • While functional, this is deprecated and should be updated
  3. Missing Validation:

    • No check for missing API key at initialization
    • Will fail at runtime with unclear error message

πŸ”΄ CI Status

  • All key CI jobs are missing/not run:
    • test-core: ❌ missing
    • smoke: ❌ missing
    • test-windows: ❌ missing
    • main (3.11): ❌ missing
    • review: ❌ missing

❌ Final Verdict: NOT MERGE-READY

Blockers:

  1. Critical security issue with API key collision must be fixed
  2. CI checks must pass before merge

Required Actions for PR Author (@lucaszhu-hue):

  1. Fix the API key collision in examples/python/providers/atlascloud/atlascloud_example.py:

    # Line 11: Change to
    export ATLAS_CLOUD_API_KEY=<your-atlas-cloud-key>
    
    # Line 28: Change to
    "api_key": os.environ.get("ATLAS_CLOUD_API_KEY"),
  2. Update deprecated parameter (Line 24):

    # Change from llm= to model=
    model={
  3. Rebase on main and push to trigger CI:

    git fetch origin && git rebase origin/main
    git push --force-with-lease

Once these changes are made and CI passes, the PR will be ready for merge.

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.

2 participants