Skip to main content

Auror

A distributed task processing framework for AI inference with MQTT messaging and OAuth2 authentication.

Overview

Auror is a Python framework designed for distributed AI inference workloads. It provides a robust infrastructure for processing tasks through MQTT messaging with built-in OAuth2 authentication via Auth0. The framework features an extensible worker pattern that makes it easy to add support for different types of AI inference tasks.

Key Features

  • MQTT-based messaging: Reliable task distribution using MQTT protocol
  • OAuth2 authentication: Secure authentication via Auth0
  • Extensible worker pattern: Easy to add new inference types
  • Production-ready: Comprehensive logging, error handling, and cleanup
  • CLI interface: Simple command-line interface for running workers
  • Type hints: Full type annotations for better IDE support

Architecture

Auror separates concerns into distinct components:

  • Core messaging (auror.core.messaging): Handles MQTT connections and authentication
  • Worker base (auror.core.worker): Abstract base class for all workers
  • Worker implementations (auror.workers): Specific inference implementations (e.g., LTX Video)
  • Configuration (auror.config): Centralized configuration management

This separation makes it easy to add new inference types without modifying the core infrastructure.

Installation

From PyPI (when published)

pip install auror

From source

git clone https://github.com/auror-ai/auror
cd auror
pip install -e .

With LTXV support

pip install auror[ltxv]

Development installation

pip install -e ".[dev]"

Quick Start

Configuration with .env file

The easiest way to configure Auror is using a .env file:

# Copy the example .env file
cp .env.example .env

# Edit .env with your credentials
# Then run the worker - it will automatically load the .env file
auror ltxv

Your .env file should contain:

AUROR_MQTT_HOST=your-mqtt-broker.com
AUROR_MQTT_PORT=1883
AUROR_MQTT_TOPIC=video/ltx
AUROR_CLIENT_ID=your-client-id
AUROR_CLIENT_SECRET=your-client-secret
AUROR_AUDIENCE=https://your-audience.com

Using the CLI

Alternatively, you can set environment variables manually:

# Set environment variables
export AUROR_MQTT_HOST="your-mqtt-broker.com"
export AUROR_MQTT_PORT="1883"
export AUROR_CLIENT_ID="your-client-id"
export AUROR_CLIENT_SECRET="your-client-secret"
export AUROR_AUDIENCE="https://your-audience.com"

# Run the LTXV worker
auror ltxv

Using Python

from auror import MessagingCore
from auror.workers import LTXVWorker
from auror.config import AurorConfig

# Create configuration
config = AurorConfig(
    mqtt_host="your-mqtt-broker.com",
    mqtt_port=1883,
    mqtt_topic="video/ltx",
    client_id="your-client-id",
    client_secret="your-client-secret",
    audience="https://your-audience.com",
)

# Create worker
worker = LTXVWorker()

# Create messaging core
core = MessagingCore(
    host=config.mqtt_host,
    port=config.mqtt_port,
    client_id=config.client_id,
    client_secret=config.client_secret,
    audience=config.audience,
    topic=config.mqtt_topic,
)

# Start processing
core.start(worker)

Configuration

Auror can be configured through environment variables or programmatically.

Environment Variables

Variable Required Default Description
AUROR_MQTT_HOST Yes - MQTT broker hostname
AUROR_MQTT_PORT No 1883 MQTT broker port
AUROR_MQTT_TOPIC No video/ltx MQTT topic to subscribe to
AUROR_CLIENT_ID Yes - OAuth2 client ID
AUROR_CLIENT_SECRET Yes - OAuth2 client secret
AUROR_AUDIENCE Yes - OAuth2 audience
AUROR_AUTH0_TOKEN_URL No Auth0 default Auth0 token endpoint
AUROR_PIPELINE_CONFIG No Default config Pipeline configuration path

Programmatic Configuration

from auror.config import AurorConfig

# From environment variables
config = AurorConfig.from_env()

# From dictionary
config = AurorConfig.from_dict({
    "mqtt_host": "broker.example.com",
    "mqtt_port": 1883,
    "client_id": "...",
    "client_secret": "...",
    "audience": "https://api.example.com",
})

# Direct instantiation
config = AurorConfig(
    mqtt_host="broker.example.com",
    mqtt_port=1883,
    mqtt_topic="my/topic",
    client_id="...",
    client_secret="...",
    audience="https://api.example.com",
)

CLI Usage

Running the LTXV Worker

# Using environment variables
auror ltxv

# With command-line overrides
auror ltxv --host broker.example.com --port 1883 --topic custom/topic

# Using default configuration (development only)
auror ltxv --use-defaults

# With verbose logging
auror ltxv -v

CLI Options

auror ltxv [OPTIONS]

Options:
  --host TEXT              MQTT broker hostname
  --port INTEGER           MQTT broker port
  --topic TEXT             MQTT topic to subscribe to
  --client-id TEXT         OAuth2 client ID
  --client-secret TEXT     OAuth2 client secret
  --audience TEXT          OAuth2 audience
  --pipeline-config TEXT   Path to LTX pipeline config
  --use-defaults          Use default configuration (dev only)
  -v, --verbose           Enable verbose logging

Creating Custom Workers

To add support for a new inference type, create a worker class that inherits from Worker:

from typing import Any, Dict
from auror.core.worker import Worker
import logging

logger = logging.getLogger(__name__)

class MyCustomWorker(Worker):
    """Worker for my custom inference type."""

    def __init__(self, model_path: str):
        super().__init__()
        self.model_path = model_path
        # Initialize your model here

    def process(self, job: Dict[str, Any]) -> None:
        """
        Process a job.

        Args:
            job: Job dictionary with 'id' and other parameters
        """
        job_id = job["id"]

        try:
            logger.info(f"[{job_id}] Starting custom inference")

            # Your inference logic here
            input_data = job["input"]
            result = self.run_inference(input_data)

            # Upload result
            self.upload_result(result, job["input"]["uploadUrl"])

            logger.info(f"[{job_id}] Job completed")

        except Exception as e:
            logger.error(f"[{job_id}] Error: {e}", exc_info=True)
            raise

    def run_inference(self, input_data):
        # Your inference implementation
        pass

    def upload_result(self, result, url):
        # Your upload implementation
        pass

Then use it with the messaging core:

from auror import MessagingCore
from my_module import MyCustomWorker

worker = MyCustomWorker(model_path="/path/to/model")
core = MessagingCore(...)
core.start(worker)

Job Format

Jobs are received as JSON messages with the following structure:

{
  "id": "unique-job-id",
  "input": {
    "uploadUrl": "https://presigned-url.com/upload",
    // ... other job-specific parameters
  }
}

LTXV Job Format

For LTX Video jobs:

{
  "id": "job-123",
  "input": {
    "prompt": "A beautiful sunset over the ocean",
    "conditioningMedias": [
      "https://example.com/image1.jpg"
    ],
    "conditioningStartFrames": [0],
    "uploadUrl": "https://storage.com/output.mp4",
    "seed": 42,
    "height": 720,
    "width": 1280,
    "numFrames": 120
  }
}

Logging

Auror uses Python's standard logging module. Configure logging in your application:

import logging

# Basic configuration
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

# Or use the CLI with -v flag for verbose output

Error Handling

Workers automatically handle errors and log them without crashing the worker process. Failed jobs are logged with full stack traces for debugging.

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/auror-ai/auror
cd auror

# Install in development mode with dev dependencies
pip install -e ".[dev]"

Running Tests

pytest

Code Formatting

black auror/

Type Checking

mypy auror/

Publishing to PyPI

Build the package

python -m pip install build twine
python -m build

Upload to PyPI

# Test PyPI first
python -m twine upload --repository testpypi dist/*

# Production PyPI
python -m twine upload dist/*

License

MIT License - see LICENSE file for details

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues and questions, please use the GitHub issue tracker.

Metadata

Release files for auror-ai 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for auror-ai 0.1.3
File Size Uploaded Provenance
auror_ai-0.1.3.tar.gz 21.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for auror-ai 0.1.3
File Interpreter ABI Platform
auror_ai-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 43.8 kB

Release files / auror_ai-0.1.3.tar.gz

Download URL auror_ai-0.1.3.tar.gz
Size 21.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8d89d2caed37644e8a7b0de8a16255cfbcd924e4e11c3dfc552ca4c645508a39
BLAKE2b-256 checksum
How to use checksums
410da641fa0f1f5ae3dea40fff07aa5bbadce047bf029cc09db6b51b53fe0707
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Release files / auror_ai-0.1.3-py3-none-any.whl

Download URL auror_ai-0.1.3-py3-none-any.whl
Size 22.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9bbd3b71a841a4d096557657e2a204fd82a5c3e3a2fdd5207ebc63a3f7023ec6
BLAKE2b-256 checksum
How to use checksums
99cdbf1e948389a84c66ecbadf9268fd00f0c0f8fb30bfb49aad23a0923b3182
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.5

Security for auror-ai 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page