Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 20 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
![logo light](assets/logo-light.svg#gh-light-mode-only)
![logo dark](assets/logo-dark.svg#gh-dark-mode-only)

[![Docs](https://img.shields.io/badge/docs-latest-success)](https://docs.exosphere.host)
[![Last commit](https://img.shields.io/github/last-commit/exospherehost/exospherehost)](https://github.com/exospherehost/exospherehost/commits/main)
[![PyPI - Version](https://img.shields.io/pypi/v/exospherehost)](https://pypi.org/project/exospherehost/)
[![Coverage](https://img.shields.io/codecov/c/gh/exospherehost/exospherehost)](https://codecov.io/gh/exospherehost/exospherehost)
[![Kubernetes](https://img.shields.io/badge/Kubernetes-native-326ce5?logo=kubernetes&logoColor=white)](https://github.com/orgs/exospherehost/packages?repo_name=exospherehost)
[![Discord](https://badgen.net/discord/members/V8uuA6mmzg)](https://discord.gg/V8uuA6mmzg)
![Stars](https://img.shields.io/github/stars/exospherehost/exospherehost?style=social)
<p align="center">
<a href="https://docs.exosphere.host"><img src="https://img.shields.io/badge/docs-latest-success" alt="Docs"></a>
<a href="https://github.com/exospherehost/exospherehost/commits/main"><img src="https://img.shields.io/github/last-commit/exospherehost/exospherehost" alt="Last commit"></a>
<a href="https://pypi.org/project/exospherehost/"><img src="https://img.shields.io/pypi/v/exospherehost" alt="PyPI - Version"></a>
<a href="https://codecov.io/gh/exospherehost/exospherehost"><img src="https://img.shields.io/codecov/c/gh/exospherehost/exospherehost" alt="Coverage"></a>
<a href="https://github.com/orgs/exospherehost/packages?repo_name=exospherehost"><img src="https://img.shields.io/badge/Kubernetes-native-326ce5?logo=kubernetes&logoColor=white" alt="Kubernetes"></a>
<a href="https://discord.gg/V8uuA6mmzg"><img src="https://badgen.net/discord/members/V8uuA6mmzg" alt="Discord"></a>
<a href="https://github.com/exospherehost/exospherehost"><img src="https://img.shields.io/github/stars/exospherehost/exospherehost?style=social" alt="Stars"></a>
</p>

---

Expand Down Expand Up @@ -107,6 +109,17 @@ You can also visit the [official documentation site](https://docs.exosphere.host



## Open Source Commitment

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:

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.

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!


## Open Source Commitment

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:
Expand All @@ -123,13 +136,5 @@ We welcome community contributions. For guidelines, refer to our [CONTRIBUTING.m

![exosphere.host Contributors](https://contrib.rocks/image?repo=exospherehost/exospherehost)

## Star History

<a href="https://www.star-history.com/#exospherehost/exospherehost&Date" target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date" />
</picture>
</a>

125 changes: 107 additions & 18 deletions docs/docs/index.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,5 @@
# Exosphere Docs

<div align="center">

<picture>
<source media="(prefers-color-scheme: dark)" srcset="./assets/logo-dark.svg">
<source media="(prefers-color-scheme: light)" srcset="./assets/logo-light.svg">
<img src="./assets/logo-light.svg" alt="Exosphere Logo">
</picture>

</div>


Exosphere is an open-source infrastructure layer to run distributed AI workflows and agents with Python based on a node-based architecture.
Expand Down Expand Up @@ -147,6 +138,113 @@ Runtime(

The runtime will automatically reload and register the updated node.

### Create it

Create a file `main.py` with:

```python
from exospherehost import Runtime, BaseNode
from pydantic import BaseModel

class HelloWorldNode(BaseNode):
class Inputs(BaseModel):
name: str

class Outputs(BaseModel):
message: str

class Secrets(BaseModel):
pass

async def execute(self) -> Outputs:
return self.Outputs(
message=f"Hello, {self.inputs.name}!"
)

# Initialize the runtime
Runtime(
namespace="MyProject",
name="HelloWorld",
nodes=[HelloWorldNode]
).start()
```

### Run it

Run the server with:

```bash
uv run main.py
```

### Check it

Your runtime is now running and ready to process workflows!

### Interactive Dashboard

Now go to your Exosphere dashboard to:

* View your registered nodes
* Create and manage graph templates
* Trigger workflows
* Monitor execution states
* Debug and troubleshoot

Ref: [Dashboard Guide](./exosphere/dashboard.md)

## Example flow

Now modify the file `main.py` to add more complex processing:

```python
from exospherehost import Runtime, BaseNode
from pydantic import BaseModel
import json

class DataProcessorNode(BaseNode):
class Inputs(BaseModel):
data: str
operation: str

class Outputs(BaseModel):
result: str
status: str

class Secrets(BaseModel):
api_key: str

async def execute(self) -> Outputs:
# Parse the input data
try:
data = json.loads(self.inputs.data)
except:
return self.Outputs(
result="",
status="error: invalid json"
)

# Process based on operation
if self.inputs.operation == "transform":
result = {"transformed": data, "processed": True}
else:
result = {"original": data, "processed": False}

return self.Outputs(
result=json.dumps(result),
status="success"
)

# Initialize the runtime
Runtime(
namespace="MyProject",
name="DataProcessor",
nodes=[DataProcessorNode]
).start()
```

The runtime will automatically reload and register the updated node.


## Open Source Commitment

Expand All @@ -164,13 +262,4 @@ We welcome community contributions. For guidelines, refer to our [CONTRIBUTING.m

![exosphere.host Contributors](https://contrib.rocks/image?repo=exospherehost/exospherehost)

## Star History

<a href="https://www.star-history.com/#exospherehost/exospherehost&Date" target="_blank">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=exospherehost/exospherehost&type=Date" />
</picture>
</a>