Metadata-Version: 2.4
Name: busysloths-mlox
Version: 0.2.0.post8
Summary: Accelerate your ML journey—deploy production-ready MLOps in minutes, not months.
Author-email: drbusysloth <contact@mlox.org>
License: MIT License
        
        Copyright (c) 2024 nicococo
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
Project-URL: Homepage, https://busysloths.github.io/mlox/mlox.html
Project-URL: Tracker, https://github.com/busysloths/mlox/issues
Project-URL: Source, https://github.com/busysloths/mlox
Project-URL: Examples, https://github.com/busysloths/mlox
Keywords: Infrastructure,Server,Service,Dashboard,Opinionated,MLOps
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development
Classifier: Topic :: System :: Distributed Computing
Classifier: Topic :: Internet
Classifier: Topic :: Database
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: <3.13,>=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dacite==1.9.2
Requires-Dist: pyyaml==6.0.2
Requires-Dist: fabric==3.2.2
Requires-Dist: paramiko==3.4.1
Requires-Dist: cryptography==43.0.1
Requires-Dist: passlib==1.7.4
Requires-Dist: typer==0.17.4
Requires-Dist: grpcio==1.73.1
Requires-Dist: kafka-python-ng==2.2.3
Requires-Dist: bcrypt>=5.0.0
Provides-Extra: gcp
Requires-Dist: pandas>=2.2; extra == "gcp"
Requires-Dist: gspread==6.2.1; extra == "gcp"
Requires-Dist: pandas-gbq==0.29.2; extra == "gcp"
Requires-Dist: google-cloud-storage>=2.10; extra == "gcp"
Requires-Dist: google-cloud-bigquery>=3.10; extra == "gcp"
Requires-Dist: google-cloud-secret-manager>=2.18; extra == "gcp"
Provides-Extra: feast
Requires-Dist: feast==0.54.0; extra == "feast"
Requires-Dist: feast[postgres]==0.54.0; extra == "feast"
Provides-Extra: minio
Requires-Dist: boto3==1.40.56; extra == "minio"
Provides-Extra: dev
Requires-Dist: colorama==0.4.6; extra == "dev"
Requires-Dist: feast==0.54.0; extra == "dev"
Requires-Dist: feast[postgres]==0.54.0; extra == "dev"
Requires-Dist: boto3==1.40.56; extra == "dev"
Requires-Dist: streamlit==1.53.0; extra == "dev"
Requires-Dist: streamlit-vis-timeline==0.3.0; extra == "dev"
Requires-Dist: textual==6.3.0; extra == "dev"
Requires-Dist: textual-dev==1.8.0; extra == "dev"
Requires-Dist: backports.tarfile>=1.0; extra == "dev"
Requires-Dist: pandas>=2.2; extra == "dev"
Requires-Dist: numpy>=1.26; extra == "dev"
Requires-Dist: gspread==6.2.1; extra == "dev"
Requires-Dist: pandas-gbq==0.29.2; extra == "dev"
Requires-Dist: google-cloud-storage>=2.10; extra == "dev"
Requires-Dist: google-cloud-bigquery>=3.10; extra == "dev"
Requires-Dist: google-cloud-secret-manager>=2.18; extra == "dev"
Requires-Dist: mlflow==3.8.1; extra == "dev"
Requires-Dist: mlserver==1.7.1; extra == "dev"
Requires-Dist: psutil==7.1.2; extra == "dev"
Requires-Dist: opentelemetry-api==1.33.1; extra == "dev"
Requires-Dist: opentelemetry-sdk==1.33.1; extra == "dev"
Requires-Dist: opentelemetry-exporter-otlp==1.33.1; extra == "dev"
Requires-Dist: redis>=4.6; extra == "dev"
Requires-Dist: influxdb>=5.3; extra == "dev"
Requires-Dist: pytest>=8.3; extra == "dev"
Requires-Dist: pytest-cov>=4.1; extra == "dev"
Requires-Dist: pytest-mock>=3.11; extra == "dev"
Requires-Dist: pytest-sugar>=1.1.1; extra == "dev"
Requires-Dist: flake8>=6.1; extra == "dev"
Requires-Dist: pdoc>=12.0; extra == "dev"
Requires-Dist: build>=1.1; extra == "dev"
Requires-Dist: twine>=4.0; extra == "dev"
Requires-Dist: psycopg2-binary>=2.9; extra == "dev"
Requires-Dist: colorama>=0.4.6; extra == "dev"
Requires-Dist: go-task-bin>=3.44.1; extra == "dev"
Requires-Dist: debugpy==1.8.16; extra == "dev"
Dynamic: license-file

<p align="center">
  <a href="https://github.com/BusySloths/mlox">
    <img src="https://github.com/BusySloths/mlox/blob/main/mlox/resources/mlox_sloth_logo.png?raw=true" alt="MLOX Logo" width="400px"/>
  </a>
</p>

<p align="center">
  <strong>Sovereign AI Infrastructure. Open by Design. Slothfully Simple.</strong>
</p>

<p align="center">
  A configuration-driven control plane for deploying production-grade MLOps on your own servers — without cloud lock-in.
</p>

<p align="center">
  <a href="https://qlty.sh/gh/BusySloths/projects/mlox" target="_blank"><img src="https://qlty.sh/gh/BusySloths/projects/mlox/maintainability.svg" alt="Maintainability" /></a>
  <a href="https://qlty.sh/gh/BusySloths/projects/mlox" target="_blank"><img src="https://qlty.sh/gh/BusySloths/projects/mlox/coverage.svg" alt="Code Coverage" /></a>
  <a href="https://github.com/BusySloths/mlox/issues" target="_blank"><img alt="GitHub Issues" src="https://img.shields.io/github/issues/busysloths/mlox"></a>
  <a href="https://github.com/BusySloths/mlox/discussions" target="_blank"><img alt="GitHub Discussions" src="https://img.shields.io/github/discussions/busysloths/mlox"></a>
  <a href="https://drive.google.com/file/d/1Y368yXcaQt1dJ6riOCzI7-pSQBnJjyEP/view?usp=sharing"><img src="https://img.shields.io/badge/Slides-State_of_the_Union-9cf" alt="Slides: State of the Union" /></a>
</p>

---

## What is MLOX?

Cloud MLOps costs thousands per month. Setup is painful. Vendor lock-in is a trap.

MLOX is a calm, reproducible way to run production-grade ML infrastructure on your own servers or hybrid cloud. You define your stack in YAML, MLOX handles the rest — deploying services, managing secrets, and wiring dependencies across backends. Three interfaces (Web UI, TUI, CLI) share one inspectable config-driven core, while frontend-specific UI handlers are registered separately.

It's for engineers who prefer thoughtful systems over chaos. Backed by open source. Powered by sloths.

> **[State of the Union (Sept 2025)](https://drive.google.com/file/d/1Y368yXcaQt1dJ6riOCzI7-pSQBnJjyEP/view?usp=sharing)** — a short slide overview of what MLOX is, what problem it solves, and where it's heading.

---

## Current Status

MLOX is in **active alpha development (v0.x)**. Core infrastructure, all three backends (Native, Docker, Kubernetes), and the major services are functional. The project has been accepted at **CAIN 2026**.

We welcome contributors, early adopters, and honest feedback. If you hit something broken, please [open an issue](https://github.com/BusySloths/mlox/issues/new/choose) or reach out at `contact@mlox.org`.

---

## What Can You Do with MLOX?

| Area | What's included |
|------|----------------|
| **Infrastructure** | Add/remove/tag servers; choose Native, Docker, or Kubernetes runtime; spin up single- or multi-node clusters |
| **Services** | Deploy, update, and remove services; centralized secrets; dependency wiring between services |
| **Code** | `busysloths-mlox` PyPI package with client integrations, SDK helpers, and example snippets |
| **Lifecycle Management** | Migrate, upgrade, export, and decommission services *(planned)* |

---

## Services Catalog

| Category | Services | Status |
|----------|----------|--------|
| ML Platforms | MLflow 2.x, MLflow 3.x, Airflow 2.x, Airflow 3.x | ✅ Stable |
| Model Serving | MLflow MLServer | ✅ Stable |
| LLMs & Inference | LiteLLM | ✅ Stable |
| Vector & Feature Stores | Milvus, Feast | ✅ Stable |
| Data & Streaming | PostgreSQL, Redis, MinIO, Kafka | ✅ Stable |
| Observability | InfluxDB, OpenTelemetry | ✅ Stable |
| Secrets & Access | OpenBao, Tiny Secret Manager, Docker Registry | ✅ Stable |
| Kubernetes Add-ons | K8s Dashboard, Headlamp, KubeApps | 🔄 Experimental |
| Cloud Integrations | GCP (BigQuery, Cloud Storage, Sheets, Secret Manager) | 🔄 Experimental |
| Source Control | GitHub repository import | ✅ Stable |

---

## Architecture in 30 Seconds

```text
CLI     TUI     Streamlit Web UI     Other UIs
  \      |             |                /
   \     |             |               /
    +----+-------------+--------------+
                    |
                    v
      `mlox/application/use_cases/*`
         shared session-based logic
                    |
                    v
              `MloxSession`
   project + encrypted secret manager + infrastructure
             /                               \
            v                                 v
 secret-manager backend                `Infrastructure`
 (InMemory/TinySM/OpenBao/GCP)      topology for one project
                                            |
                                            v
                           `Bundle` = compute/server + services[*]
                                      |
                                      v
                    execution via `mlox/executors.py` + `mlox/execution/*`
```

`MloxSession` is the runtime center: it always carries project metadata, an encrypted key-value secret manager, and the current `Infrastructure`. The important shared application layer is `mlox/application/use_cases/*`; CLI already routes through it, and TUI/Web/future UIs should do the same. `Infrastructure` models topology through bundles, where each bundle groups one compute/server with its services. Anything executed on a compute goes through the execution layer, while compute capabilities already exist (`git`, `docker`, `kubernetes`, ...) and service capabilities are an emerging architectural direction.

YAML stays focused on deployable configs and Python build classes. Frontend-specific setup/settings components live in the frontend packages (`mlox/view/*`, `mlox/tui/*`) and are resolved through `mlox/ui/registry.py`, which keeps UI code out of service/server config definitions and creates a future extension point for plugin-provided UI handlers.

For deeper reading:

- [Architecture Guide (humans)](docs/ARCHITECTURE_HUMANS.md) — codebase walkthrough
- [Architecture Guide (agents)](docs/ARCHITECTURE_AGENTS.md) — high-risk areas and invariants

---

## Quickstart

```bash
# 1. Install Task (https://taskfile.dev/installation/)

# 2. Clone
git clone https://github.com/BusySloths/mlox.git && cd mlox

# 3. Set up environment (creates conda env 'mlox-dev' with Python 3.12.5)
task first:steps

# 4. Launch the Web UI
task ui:streamlit

# 5. Or try the CLI
task ui:cli CLI_ARGS="--help"
```

See [Installation Guide](docs/INSTALLATION.md) for a fuller walkthrough including Docker and Kubernetes setup.

---

## Project Structure

```
mlox/
├── mlox/
│   ├── application/    # facade + session-based use_cases
│   ├── cli/            # Typer CLI package (root app + command modules)
│   ├── services/       # 20+ deployable ML services (one directory each)
│   ├── servers/        # Native and Ubuntu/SSH backends
│   ├── tui/            # Textual terminal UI + TUI-specific UI handlers
│   ├── ui/             # frontend UI handler registry
│   ├── view/           # Streamlit web UI + Streamlit-specific UI handlers
│   ├── session.py      # Runtime state & persistence
│   ├── infra.py        # Service/server graph
│   ├── config.py       # YAML loading + plugin discovery + UI handler lookup
│   ├── execution/      # backend/system execution helpers
│   └── executors.py    # remote task executor layer used by services/servers
├── tests/
│   ├── unit/           # Fast tests, no external deps
│   └── integration/    # Multipass VM tests
├── examples/           # OTel, MLflow tracking, DAG templates
├── docs/               # Architecture, installation, contribution guides
└── website/            # Astro landing page
```

---

## Contributing

### Sloth-Friendly Setup

```bash
# 1. Install Task (https://taskfile.dev/installation/)
# 2. Clone the repo
git clone https://github.com/BusySloths/mlox.git && cd mlox
# 3. Set up the dev environment
task first:steps
# 4. Install dev dependencies
pip install -e .[dev]
```

### Run Tests

```bash
task dev:lint                   # flake8
task tests:unit:run             # unit tests (fast, no external deps)
task tests:integration:run      # integration tests (requires Multipass VMs)
```

### Ways to Contribute

- [Bug reports](https://github.com/BusySloths/mlox/issues/new/choose)
- [Documentation improvements](https://github.com/BusySloths/mlox/issues/new/choose)
- [Feature requests](https://github.com/BusySloths/mlox/issues/new/choose)
- [New service implementations](docs/ARCHITECTURE_HUMANS.md)
- [Examples and tutorials](examples/)

See [CONTRIBUTING.md](CONTRIBUTING.md) for the full guide and [docs/WORKFLOW_QUICK_REFERENCE.md](docs/WORKFLOW_QUICK_REFERENCE.md) for how we use GitHub Projects, Milestones, and Issues.

---

## Documentation

| Document | Description |
|----------|-------------|
| [Installation Guide](docs/INSTALLATION.md) | Setup from scratch |
| [Architecture (humans)](docs/ARCHITECTURE_HUMANS.md) | Codebase walkthrough |
| [Architecture (agents)](docs/ARCHITECTURE_AGENTS.md) | High-risk areas and invariants |
| [Contributing Guide](CONTRIBUTING.md) | How to contribute |
| [Workflow Quick Reference](docs/WORKFLOW_QUICK_REFERENCE.md) | Labels, milestones, PRs |
| [Plugin Guide](docs/PLUGIN_CONFIGS.md) | External service and server config plugins |
| [API Docs](https://busysloths.github.io/mlox/mlox.html) | Generated Python API reference |

---

## Sponsors

MLOX is proudly funded by:

<img src="https://github.com/BusySloths/mlox/blob/main/mlox/resources/BMFTR_logo.jpg?raw=true" alt="BMFTR" width="420px"/>

## Supporters

<p align="center">
  <img src="https://github.com/BusySloths/mlox/blob/main/mlox/resources/PrototypeFund_logo_dark.png?raw=true" alt="PrototypeFund" width="380px"/>
</p>

---

## License & Contact

MLOX is open-source, distributed under the [MIT License](LICENSE). Contributions are welcome and subject to the same terms.

We are looking for people invested in the problem we're solving. Say hello at `contact@mlox.org` or start a conversation in [GitHub Discussions](https://github.com/BusySloths/mlox/discussions).
