-
Notifications
You must be signed in to change notification settings - Fork 42
Enhance README.md #387
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enhance README.md #387
Conversation
…ties, architecture, and use cases. Added new images for workflow examples and architecture concepts. Updated installation and node creation instructions for improved clarity. Introduced sections on community involvement and open-source commitment.
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. Caution Review failedThe pull request is closed. 📝 WalkthroughSummary by CodeRabbit
WalkthroughComplete README.md rewrite: rebranding to a Kubernetes-native distributed AI/workflows narrative, new node and graph examples (CityAnalyzerNode, model-based GraphNodeModel/RetryPolicyModel), updated runtime start pattern, reorganized Getting Started, docs/resources, visuals, and community sections. No code behavior changes. Changes
Sequence Diagram(s)sequenceDiagram
participant Dev as Developer
participant Code as README examples
participant Runtime as Runtime API
rect rgba(0,128,0,0.06) New flow
Dev->>Code: define Node (CityAnalyzerNode)
Dev->>Code: create runtime object
Dev->>Runtime: runtime.start()
Runtime-->>Dev: runtime running
Dev->>Code: define GraphNodeModel / RetryPolicyModel
Dev->>Code: StateManager.upsert_graph(...)
end
rect rgba(128,0,0,0.06) Old flow
Dev->>Code: Runtime(...).start()
end
Note over Runtime,Code: Diagram highlights changed control flow (explicit runtime variable + start) and new model-based graph registration
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).Please share your feedback with us on this Discord post. 📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: ASSERTIVE Plan: Pro 📒 Files selected for processing (1)
✨ Finishing touches🧪 Generate 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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @nk-ag, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request significantly upgrades the README.md file to provide a more comprehensive, structured, and visually engaging introduction to Exosphere. The changes aim to clarify the project's purpose, showcase its capabilities, detail its architecture, and streamline the onboarding experience for new users, while also emphasizing its commitment to the open-source community.
Highlights
- Enhanced Project Overview: The README now features a significantly expanded introduction, clearly defining Exosphere as an open-source, Kubernetes-native platform for distributed AI workflows, complete with an example workflow image.
- Detailed Capabilities and Use Cases: New sections outline Exosphere's core capabilities for reliable AI workflows, developer experience, production infrastructure, and AI agent support, alongside specific use cases like data processing and AI orchestration.
- Comprehensive Architecture Overview: An 'Architecture Overview' section has been added, including visual diagrams, descriptions of core components (Nodes, Runtime, State Manager, Dashboard, Graphs), key concepts (Fanout, Unite, Signals, Retry Policy, Store), and deployment options.
- Improved Getting Started Guide: The 'Getting Started' section has been refined with prerequisites, a more detailed and illustrative example for creating a
CityAnalyzerNode, and clearer instructions for setting up and starting the runtime. - Restructured Documentation and Community Sections: The documentation links are now categorized into 'Essential Guides', 'Advanced Topics', and 'Community & Support'. The 'Open Source Commitment' section has been rewritten to clearly state promises and ways for the community to get involved, followed by a 'Ready to Get Started?' section with actionable next steps.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
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 significantly enhances the README.md file, making it much more comprehensive and user-friendly. The new structure, detailed explanations, use cases, and architecture overview are excellent additions. The updated "Getting Started" guide is clearer, and the "Open Source Commitment" section is more professional. I've found one issue in the new Python code example which will prevent it from running. My review includes a suggestion to fix it. Overall, this is a great improvement to the project's documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
README.md (2)
176-206: Align graph example with earlier runtime/node (name and namespace).Use the registered node (CityAnalyzerNode) and the same namespace as the runtime to reduce confusion.
from exospherehost import StateManager, GraphNodeModel, RetryPolicyModel, RetryStrategyEnum @@ - async def create_graph(): - state_manager = StateManager(namespace="hello-world") + async def create_graph(): + state_manager = StateManager(namespace="my-project") @@ - GraphNodeModel( - node_name="MyFirstNode", - namespace="hello-world", + GraphNodeModel( + node_name="CityAnalyzerNode", + namespace="my-project", identifier="describe_city", inputs={"city": "initial"}, next_nodes=[] )
208-221: Consider pinning docker-compose files to a tag/commit for reproducibility.Fetching from main can drift and break tutorials; suggest referencing a release tag or commit SHA in raw URLs.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (3)
assets/exosphere-components.pngis excluded by!**/*.pngassets/exosphere-concepts.pngis excluded by!**/*.pngassets/workflow-run.pngis excluded by!**/*.png
📒 Files selected for processing (1)
README.md(2 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
README.md
27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
28-28: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
34-34: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
38-38: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
39-39: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
43-43: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
44-44: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
59-59: Multiple spaces after hash on atx style heading
(MD019, no-multiple-space-atx)
103-103: Trailing spaces
Expected: 0 or 2; Actual: 3
(MD009, no-trailing-spaces)
105-105: Trailing spaces
Expected: 0 or 2; Actual: 3
(MD009, no-trailing-spaces)
144-144: Trailing spaces
Expected: 0 or 2; Actual: 1
(MD009, no-trailing-spaces)
144-144: Multiple consecutive blank lines
Expected: 1; Actual: 2
(MD012, no-multiple-blanks)
145-145: Multiple consecutive blank lines
Expected: 1; Actual: 3
(MD012, no-multiple-blanks)
149-149: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
164-164: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
174-174: Multiple consecutive blank lines
Expected: 1; Actual: 2
(MD012, no-multiple-blanks)
175-175: Multiple consecutive blank lines
Expected: 1; Actual: 3
(MD012, no-multiple-blanks)
236-236: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
237-237: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
243-243: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
244-244: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
248-248: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
249-249: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
254-254: Multiple consecutive blank lines
Expected: 1; Actual: 2
(MD012, no-multiple-blanks)
255-255: Multiple consecutive blank lines
Expected: 1; Actual: 3
(MD012, no-multiple-blanks)
256-256: Multiple consecutive blank lines
Expected: 1; Actual: 4
(MD012, no-multiple-blanks)
281-281: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
282-282: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
🔇 Additional comments (3)
README.md (3)
17-20: Strong intro and positioning.Clear value prop and scope. LGTM.
63-76: Assets verified — images present.
assets/exosphere-concepts.png, assets/exosphere-components.png, and assets/workflow-run.png are committed and referenced in README.md (lines 21, 63, 75).
1-13: Run link-check for README badges/URLsREADME.md (lines 1–13): validate all HTTP/HTTPS badge links locally — sandbox verification failed. Run locally:
rg -o 'https?://[^\s)"]+' README.md | sort -u | while IFS= read -r url; do code=$(curl -s -o /dev/null -w '%{http_code}' -L --max-time 15 "$url" || echo '000') printf '%s %s\n' "$code" "$url" done | awk '$1 !~ /^(200|3[0-9]{2})/'
| **Exosphere** is an open-source, Kubernetes-native infrastructure platform designed to run distributed AI workflows and autonomous agents at scale. Built with Python and based on a flexible node-based architecture, Exosphere enables developers to create, deploy, and manage robust AI workflows that can handle large-scale data processing and long-running operations. | ||
|
|
||
| This allows developers to deploy production agents that can scale beautifully to build robust autonomous AI workflows. | ||
|  |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix image path: absolute root may break on GitHub/npm docs.
Use a relative path to ensure it renders in forks and package registries.
-
+📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
|  | |
|  |
🤖 Prompt for AI Agents
In README.md around line 21, the image uses an absolute path
(/assets/workflow-run.png) which can break rendering in forks and package
registries; change it to a relative path (for example assets/workflow-run.png or
./assets/workflow-run.png) so the image resolves correctly across GitHub forks
and npm docs, and commit the updated README line.
| ### **Reliable AI Workflows at Scale** | ||
| - **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure | ||
| - **Dynamic State Management**: Create and manage state at runtime with persistent storage | ||
| - **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability | ||
| - **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store | ||
|
|
||
| - ### Installation | ||
| ```bash | ||
| uv add exospherehost | ||
| ``` | ||
| ### **Smooth Developer Experience** | ||
| - **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched | ||
| - **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs | ||
| - **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools | ||
|
|
||
| - ### Define your first node | ||
| Each node is an atomic reusable unit on Exosphere. Once registered, you can plug it into any workflow going forward. This could be an agent, an api call, or existing code, anything you want to be a unit of your workflow. | ||
| ```python | ||
| from exospherehost import BaseNode | ||
| from pydantic import BaseModel | ||
| ### **Production Ready Infrastructure** | ||
| - **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability | ||
| - **State Persistence**: Maintain workflow state across restarts and failures | ||
| - **API Integration**: Connect to external services and APIs through configurable nodes | ||
|
|
||
| class MyFirstNode(BaseNode): | ||
| ### **Built for AI Agents** | ||
| - **Autonomous Execution**: Build agents that can make decisions and execute complex workflows | ||
| - **Data Processing**: Handle large datasets with distributed processing capabilities | ||
| - **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Markdown spacing: add blank lines after headings and before lists.
Multiple MD022/MD032 hits. Add a blank line after each heading and before its list (repeat for sections at Lines 27, 33, 39, 43).
-### **Reliable AI Workflows at Scale**
-- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure
+### **Reliable AI Workflows at Scale**
+
+- **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### **Reliable AI Workflows at Scale** | |
| - **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure | |
| - **Dynamic State Management**: Create and manage state at runtime with persistent storage | |
| - **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability | |
| - **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store | |
| - ### Installation | |
| ```bash | |
| uv add exospherehost | |
| ``` | |
| ### **Smooth Developer Experience** | |
| - **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched | |
| - **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs | |
| - **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools | |
| - ### Define your first node | |
| Each node is an atomic reusable unit on Exosphere. Once registered, you can plug it into any workflow going forward. This could be an agent, an api call, or existing code, anything you want to be a unit of your workflow. | |
| ```python | |
| from exospherehost import BaseNode | |
| from pydantic import BaseModel | |
| ### **Production Ready Infrastructure** | |
| - **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability | |
| - **State Persistence**: Maintain workflow state across restarts and failures | |
| - **API Integration**: Connect to external services and APIs through configurable nodes | |
| class MyFirstNode(BaseNode): | |
| ### **Built for AI Agents** | |
| - **Autonomous Execution**: Build agents that can make decisions and execute complex workflows | |
| - **Data Processing**: Handle large datasets with distributed processing capabilities | |
| - **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely | |
| ### **Reliable AI Workflows at Scale** | |
| - **Infinite Parallel Agents**: Run multiple AI agents simultaneously across distributed infrastructure | |
| - **Dynamic State Management**: Create and manage state at runtime with persistent storage | |
| - **Fault Tolerance**: Built-in failure handling and recovery mechanisms for production reliability | |
| - **Core Concepts**: Fanout, Unite, Signals, Retry Policy, Store | |
| ### **Smooth Developer Experience** | |
| - **Plug-and-Play Nodes**: Create reusable, atomic workflow components that can be mixed and matched | |
| - **Python-First**: Native Python support with Pydantic models for type-safe inputs/outputs | |
| - **Interactive Dashboard**: Visual workflow management, monitoring, and debugging tools | |
| ### **Production Ready Infrastructure** | |
| - **Kubernetes Native**: Deploy seamlessly on Kubernetes clusters for enterprise-grade scalability | |
| - **State Persistence**: Maintain workflow state across restarts and failures | |
| - **API Integration**: Connect to external services and APIs through configurable nodes | |
| ### **Built for AI Agents** | |
| - **Autonomous Execution**: Build agents that can make decisions and execute complex workflows | |
| - **Data Processing**: Handle large datasets with distributed processing capabilities | |
| - **Long-Running Operations**: Support for workflows that run for hours, days, or indefinitely |
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
28-28: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
33-33: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
34-34: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
38-38: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
39-39: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
43-43: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
44-44: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
🤖 Prompt for AI Agents
In README.md around lines 27 to 47, several headings lack a blank line after the
heading and before the following list (MD022/MD032 at lines 27, 33, 39, 43); fix
by inserting a single blank line immediately after each heading and ensure there
is a blank line before each list so each section follows the pattern: heading,
blank line, list content.
| - **Content Generation & Analysis** | ||
| - **API Integration & Automation** | ||
|
|
||
| ## Architecture Overview |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove extra space in H2.
Resolves MD019.
-## Architecture Overview
+## Architecture Overview📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ## Architecture Overview | |
| ## Architecture Overview |
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
59-59: Multiple spaces after hash on atx style heading
(MD019, no-multiple-space-atx)
🤖 Prompt for AI Agents
In README.md around lines 59 to 59, the H2 header has an extra space; remove the
extra space so the header uses a single space after the two hashes and no
trailing spaces (i.e., convert the current malformed header into a standard
Markdown H2 with exactly one space after "##" and no leading/trailing
whitespace).
| ```bash | ||
| uv add exospherehost | ||
| ``` | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Offer pip alternative alongside uv.
Helps users without uv installed.
```bash
uv add exospherehost
+pip install exospherehost # alternatively, if you prefer pip
<details>
<summary>🤖 Prompt for AI Agents</summary>
In README.md around lines 98 to 101, the current install snippet only shows the
"uv add exospherehost" command; update the code block to offer a pip alternative
for users without uv by adding a second line with "pip install exospherehost"
(clearly labeled as an alternative), keeping the bash code block and formatting
consistent with the surrounding documentation.
</details>
<!-- fingerprinting:phantom:triton:chinchilla -->
<!-- This is an auto-generated comment by CodeRabbit -->
| ```python | ||
| from exospherehost import BaseNode | ||
| from pydantic import BaseModel | ||
|
|
||
| class CityAnalyzerNode(BaseNode): | ||
| """A node that analyzes and describes a city using AI""" | ||
|
|
||
| class Inputs(BaseModel): | ||
| city: str | ||
| analysis_type: str = "general" # general, tourism, business, etc. | ||
|
|
||
| class Outputs(BaseModel): | ||
| description: str | ||
| key_features: str | ||
| score: str | ||
|
|
||
| class Secrets(BaseModel): | ||
| openai_api_key: str # Optional: for AI-powered analysis | ||
|
|
||
| async def execute(self) -> Outputs: | ||
| # Your custom logic here - could be: | ||
| # - AI agent calls | ||
| # - API requests | ||
| # - Data processing | ||
| # - Database queries | ||
| # - Any Python code! | ||
|
|
||
| description = f"Analysis of {self.inputs.city}" | ||
| features = ["culture", "economy", "lifestyle"] | ||
| score = 8.5 | ||
|
|
||
| return self.Outputs( | ||
| description=description, | ||
| key_features=features, | ||
| score=score | ||
| ) | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix type mismatches in the node example (copy-paste safety).
Outputs declare str types but return a list and float; Secrets marked optional but typed as required. Make types consistent.
from exospherehost import BaseNode
from pydantic import BaseModel
+ from typing import List, Optional
@@
class CityAnalyzerNode(BaseNode):
@@
class Outputs(BaseModel):
description: str
- key_features: str
- score: str
+ key_features: List[str]
+ score: float
@@
class Secrets(BaseModel):
- openai_api_key: str # Optional: for AI-powered analysis
+ openai_api_key: Optional[str] = None # Optional: for AI-powered analysis
@@
async def execute(self) -> Outputs:
@@
- features = ["culture", "economy", "lifestyle"]
- score = 8.5
+ features: List[str] = ["culture", "economy", "lifestyle"]
+ score: float = 8.5📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ```python | |
| from exospherehost import BaseNode | |
| from pydantic import BaseModel | |
| class CityAnalyzerNode(BaseNode): | |
| """A node that analyzes and describes a city using AI""" | |
| class Inputs(BaseModel): | |
| city: str | |
| analysis_type: str = "general" # general, tourism, business, etc. | |
| class Outputs(BaseModel): | |
| description: str | |
| key_features: str | |
| score: str | |
| class Secrets(BaseModel): | |
| openai_api_key: str # Optional: for AI-powered analysis | |
| async def execute(self) -> Outputs: | |
| # Your custom logic here - could be: | |
| # - AI agent calls | |
| # - API requests | |
| # - Data processing | |
| # - Database queries | |
| # - Any Python code! | |
| description = f"Analysis of {self.inputs.city}" | |
| features = ["culture", "economy", "lifestyle"] | |
| score = 8.5 | |
| return self.Outputs( | |
| description=description, | |
| key_features=features, | |
| score=score | |
| ) | |
| ``` |
🤖 Prompt for AI Agents
In README.md around lines 106 to 142, the example node has type mismatches:
Outputs fields are declared as str but the implementation returns a list for
key_features and a float for score, and Secrets is marked optional in comment
but typed as required; fix by updating Outputs types to match returned values
(e.g., key_features: list[str] and score: float or appropriate typing) and make
Secrets optional (e.g., Optional[str] with a default None) or adjust returned
values to match the declared types; ensure all return values conform to the
Outputs model before returning.
| ### Step 3: Create and Start the Runtime | ||
|
|
||
| Create the runtime and register your nodes: | ||
| ```python | ||
| from exospherehost import Runtime | ||
|
|
||
| Runtime( | ||
| name="my-first-runtime", | ||
| namespace="hello-world", | ||
| nodes=[ | ||
| MyFirstNode | ||
| ] | ||
| ).start() | ||
| # Initialize the runtime with your nodes | ||
| runtime = Runtime( | ||
| name="city-analysis-runtime", | ||
| namespace="my-project", | ||
| nodes=[CityAnalyzerNode] | ||
| ) | ||
|
|
||
| # Start the runtime (this will block the main thread) | ||
| runtime.start() | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Fenced code blocks: remove indentation and add surrounding blank lines.
Fixes MD031 and improves rendering.
- ```python
+```python
from exospherehost import Runtime
@@
- # Initialize the runtime with your nodes
- runtime = Runtime(
+ # Initialize the runtime with your nodes
+ runtime = Runtime(
@@
- # Start the runtime (this will block the main thread)
- runtime.start()
- ```
+ # Start the runtime (this will block the main thread)
+ runtime.start()
+```🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
149-149: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
🤖 Prompt for AI Agents
In README.md around lines 146 to 161, the fenced Python code block is indented
and missing surrounding blank lines which triggers MD031 and renders
incorrectly; remove the leading indentation from the fenced code block and
ensure there is a blank line before the opening ```python and after the closing
``` so the block is top-level and properly delimited, and also adjust the
internal comment indentation so the code lines are left-aligned inside the
fence.
| **Run your application:** | ||
| ```bash | ||
| uv run main.py | ||
| ``` | ||
|
|
||
| Your runtime is now running and ready to process workflows! 🎉 | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Also add blank lines around this fenced block.
Resolves MD031.
- **Run your application:**
- ```bash
+ **Run your application:**
+
+```bash
uv run main.py
- ```
+```🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
164-164: Fenced code blocks should be surrounded by blank lines
(MD031, blanks-around-fences)
🤖 Prompt for AI Agents
In README.md around lines 163 to 169, the fenced code block lacks surrounding
blank lines which violates MD031; add one blank line before the bold "Run your
application:" line and one blank line after the closing ``` so the section reads
with a blank line, the bold line, another blank line, the fenced block, then
another blank line before the following text.
| ## 📚 Documentation & Resources | ||
|
|
||
| ### **Essential Guides** | ||
| - **[Getting Started Guide](https://docs.exosphere.host/getting-started)**: Complete walkthrough for new users | ||
| - **[Docker Compose Setup](https://docs.exosphere.host/docker-compose-setup)**: Run Exosphere locally in minutes | ||
| - **[Architecture Guide](https://docs.exosphere.host/exosphere/architecture)**: Understand core concepts like fanout and unite | ||
| - **[Youtube Walkthroughs](https://www.youtube.com/@exospherehost)**: Step by step demos on Exosphere and how to build reliable flows with sample code. | ||
| - **[Featured Exosphere Projects](https://github.com/exospherehost/exosphereprojects)**: Templates on common projects on Exosphere, pull and run! | ||
|
|
||
| ### **Advanced Topics** | ||
| - **[State Manager Setup](https://docs.exosphere.host/exosphere/state-manager-setup)**: Production deployment guide | ||
| - **[Dashboard Guide](https://docs.exosphere.host/exosphere/dashboard)**: Visual workflow management | ||
| - **[Graph Definitions](https://docs.exosphere.host/exosphere/create-graph/)**: Building complex workflows | ||
|
|
||
| ### **Community & Support** | ||
| - **[Official Documentation](https://docs.exosphere.host)**: Complete reference and tutorials | ||
| - **[Discord Community](https://discord.com/invite/zT92CAgvkj)**: Get help and connect with other developers | ||
| - **[GitHub Issues](https://github.com/exospherehost/exospherehost/issues)**: Report bugs and request features | ||
| - **[PyPI Package](https://pypi.org/project/exospherehost/)**: Latest stable releases | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Headings/lists need blank lines in “Documentation & Resources”.
Fix MD022/MD032 by inserting blank lines after each subsection heading and before list items.
-### **Essential Guides**
-- **[Getting Started Guide](...)**
+### **Essential Guides**
+
+- **[Getting Started Guide](...)**Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
236-236: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
237-237: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
243-243: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
244-244: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
248-248: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
249-249: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
🤖 Prompt for AI Agents
In README.md around lines 234 to 253, the "Documentation & Resources" section is
missing blank lines after subsection headings and before list items which
triggers MD022/MD032; add a single blank line after each "Essential Guides",
"Advanced Topics", and "Community & Support" heading (and any other subsection
headings in this block) and ensure there is a blank line immediately before each
list block so each heading is separated from its list items.
|
|
||
| ## 🌟 Open Source Commitment | ||
|
|
||
| We believe that open source is the foundation of innovation and progress. Exosphere is our contribution to this movement, and we're committed to supporting the community in multiple ways: | ||
|
|
||
| ### **Our Promise to the Community** | ||
|
|
||
| ## Open Source Commitment | ||
| 1. **🔄 Open Source First**: The majority of our codebase is open source and available to everyone | ||
| 2. **💰 Giving Back**: A portion of our profits goes directly to supporting open source projects and communities | ||
| 3. **🎓 Mentorship**: We actively collaborate with student programs to mentor the next generation of developers | ||
| 4. **🤝 Community Driven**: We welcome contributions, feedback, and collaboration from developers worldwide | ||
|
|
||
| We believe that humanity would not have been able to achieve the level of innovation and progress we have today without the support of open source and community, we want to be a part of this movement and support the open source community. In following ways: | ||
| ### **Get Involved** | ||
|
|
||
| 1. We will be open sourcing majority of our codebase for exosphere.host and making it available to the community. We welcome all sort of contributions and feedback from the community and will be happy to collaborate with you. | ||
| 2. For whatever the profits which we generate from exosphere.host, we will be donating a portion of it to open source projects and communities. If you have any questions, suggestions or ideas. | ||
| 3. We would be further collaborating with various open source student programs to provide with the support and encourage and mentor the next generation of open source contributors. | ||
| - **Contributors**: Help us build the future of AI infrastructure | ||
| - **Users**: Your feedback shapes our roadmap and priorities | ||
| - **Students**: Join our mentorship programs and grow your skills | ||
| - **Organizations**: Partner with us to advance open source AI tools | ||
|
|
||
| Please feel free to reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host). Lets push the boundaries of possibilities for humanity together! | ||
| **Ready to make a difference?** Reach out to us at [nivedit@exosphere.host](mailto:nivedit@exosphere.host) and let's push the boundaries of what's possible together! 🚀 | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Minor copy edit: email CTA.
Optional: replace “Reach out to us at … and let's …” with a neutral CTA to suit org tone; current is fine if brand voice prefers casual.
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
256-256: Multiple consecutive blank lines
Expected: 1; Actual: 4
(MD012, no-multiple-blanks)
🤖 Prompt for AI Agents
In README.md around lines 256 to 276, the email call-to-action uses a casual
phrase "Reach out to us at [nivedit@exosphere.host] and let's push the
boundaries..." — replace that sentence with a neutral, professional CTA (for
example: "Contact us at [nivedit@exosphere.host] to learn more or discuss
collaboration.") to match a more formal org tone while keeping the existing
email link; ensure punctuation and markdown mailto syntax remain correct.
| ### **Next Steps:** | ||
| 1. **⭐ Star this repository** to show your support | ||
| 2. **🚀 Try the quick start** with our Docker Compose setup | ||
| 3. **💬 Join our Discord** community for help and discussions | ||
| 4. **📖 Read the docs** for comprehensive guides and examples | ||
| 5. **🤝 Contribute** to help us build the future of AI infrastructure | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Add blank line after “Next Steps” heading.
Resolves MD022/MD032.
-### **Next Steps:**
-1. **⭐ Star this repository** to show your support
+### **Next Steps:**
+
+1. **⭐ Star this repository** to show your support📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### **Next Steps:** | |
| 1. **⭐ Star this repository** to show your support | |
| 2. **🚀 Try the quick start** with our Docker Compose setup | |
| 3. **💬 Join our Discord** community for help and discussions | |
| 4. **📖 Read the docs** for comprehensive guides and examples | |
| 5. **🤝 Contribute** to help us build the future of AI infrastructure | |
| ### **Next Steps:** | |
| 1. **⭐ Star this repository** to show your support | |
| 2. **🚀 Try the quick start** with our Docker Compose setup | |
| 3. **💬 Join our Discord** community for help and discussions | |
| 4. **📖 Read the docs** for comprehensive guides and examples | |
| 5. **🤝 Contribute** to help us build the future of AI infrastructure | |
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
281-281: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
282-282: Lists should be surrounded by blank lines
(MD032, blanks-around-lists)
🤖 Prompt for AI Agents
In README.md around lines 281 to 287, the "### **Next Steps:**" heading is
immediately followed by the list which violates MD022/MD032; insert a single
blank line after the heading so the heading is separated from the list (ensure
exactly one empty line and no extra trailing spaces) to satisfy the Markdown
lint rules.
Enhance readme with architecture, and use cases. Added new images for workflow examples and architecture concepts. Updated installation and node creation instructions for improved clarity. Introduced sections on community involvement and open-source commitment.