AIMQ
AIMQ (AI Message Queue) is a robust message queue processor designed specifically for Supabase's pgmq integration. It provides a powerful framework for processing queued tasks with built-in support for AI-powered document processing and OCR capabilities.
Features
- Supabase pgmq Integration: Seamlessly process messages from Supabase's message queue
- Document OCR Processing: Extract text from images using EasyOCR
- Queue-based Processing: Efficient handling of document processing tasks
- AI-powered Analysis: Leverage machine learning for advanced text analysis
- Flexible Architecture: Easy to extend with new processing tools and capabilities
Quick Start (Zero Installation)
The fastest way to get started with AIMQ is using uvx, which requires no installation:
# Initialize a new AIMQ project
uvx aimq init my-project
cd my-project
# Configure your .env file with Supabase credentials
cp .env.example .env
# Edit .env with your SUPABASE_URL and SUPABASE_KEY
# Edit tasks.py to define your task queues
# (A template is already created for you)
# Start the worker
uvx aimq start
That's it! No pip install, no virtual environments, no dependency conflicts.
Installation Options
Option 1: Using uvx (Recommended for Quick Start)
Run AIMQ directly without installing:
# Run any command with uvx
uvx aimq init
uvx aimq start tasks.py
uvx aimq send my-queue '{"message": "hello"}'
Option 2: Install as a Tool (Recommended for Regular Use)
Install AIMQ as a persistent tool using uv:
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install aimq as a tool
uv tool install aimq
# Now you can use aimq directly
aimq init my-project
aimq start
Option 3: Traditional pip Install
pip install aimq
aimq start
Option 4: Development Setup
For contributing to AIMQ or building from source:
# Clone the repository
git clone https://github.com/bldxio/aimq.git
cd aimq
# Install dependencies from lockfile (production)
uv sync
# For development (includes test/dev tools)
uv sync --group dev
# Run from source
uv run aimq start
Key uv Commands for Development
# Add a new dependency
uv add requests
# Add to dev dependency group
uv add --group dev pytest
# Remove a dependency
uv remove requests
# Update dependencies
uv lock --upgrade
# Run commands in the uv environment
uv run python -m aimq.worker
uv run pytest
Configuration
Environment Variables
AIMQ uses environment variables for configuration. Create a .env file in your project root:
# Supabase Configuration (Required)
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_KEY=your-anon-key
# Worker Configuration
WORKER_NAME=aimq-worker
WORKER_PATH=./tasks.py
WORKER_LOG_LEVEL=info
WORKER_IDLE_WAIT=10.0
# AI Provider API Keys (Optional)
OPENAI_API_KEY=sk-...
MISTRAL_API_KEY=...
# LangChain Tracing (Optional - for debugging)
LANGCHAIN_TRACING_V2=false
LANGCHAIN_API_KEY=...
When you run aimq init, an .env.example file is created with all available options documented.
Supabase Setup
Configure your Supabase project with pgmq:
- Go to your Supabase project dashboard
- Navigate to Database → Extensions
- Enable the
pgmqextension - Run the AIMQ migration (created by
aimq init --supabase)
For more details, see the Supabase pgmq documentation.
Usage
Defining Tasks
Create a tasks.py file that defines your task queues and processors:
from typing import Any, Dict
from aimq.worker import Worker
# Create a worker instance
worker = Worker()
@worker.task(queue="document-processing", timeout=300)
def process_document(data: Dict[str, Any]) -> Dict[str, Any]:
"""Process a document using AI tools."""
document_url = data.get("document_url")
# Use built-in AIMQ tools for OCR, PDF extraction, etc.
# Your processing logic here...
return {"status": "processed", "text": extracted_text}
@worker.task(queue="image-analysis")
def analyze_image(data: Dict[str, Any]) -> Dict[str, Any]:
"""Analyze an image using AI models."""
image_url = data.get("image_url")
# Your analysis logic here...
return {"analysis": results}
Starting the Worker
# Start with default tasks.py
aimq start
# Start with a specific tasks file
aimq start my_tasks.py
# Start with debug logging
aimq start --debug
# Using uvx (no installation)
uvx aimq start
Sending Messages to Queues
# Send a message to a queue
aimq send document-processing '{"document_url": "https://example.com/doc.pdf"}'
# Enable/disable queues
aimq enable document-processing
aimq disable document-processing
Or programmatically from Python:
from supabase import create_client
import os
supabase = create_client(
os.getenv("SUPABASE_URL"),
os.getenv("SUPABASE_KEY")
)
# Send a message to the queue
supabase.rpc("pgmq_send", {
"queue_name": "document-processing",
"msg": {"document_url": "https://example.com/doc.pdf"}
}).execute()
Docker Deployment
AIMQ provides two Docker deployment options: local development setup and using the published image.
Option 1: Local Development (Recommended for Getting Started)
Generate Docker files in your project:
# Initialize with Docker files
aimq init --docker
# This creates:
# - Dockerfile (optimized for your project)
# - docker-compose.yml (with volume mounts)
# - .dockerignore
# Start the worker
docker-compose up -d
# View logs
docker-compose logs -f
# Stop
docker-compose down
Option 2: Published Image (Recommended for Production)
Use the pre-built AIMQ image from the registry:
With local tasks.py (development):
docker run --rm \
-v $(pwd)/tasks.py:/app/tasks.py:ro \
-v $(pwd)/.env:/app/.env:ro \
aimq:latest
With git repository (production):
# Load tasks from a git repository
docker run --rm \
-e AIMQ_TASKS=git:mycompany/aimq-tasks@production \
-e SUPABASE_URL=https://xxx.supabase.co \
-e SUPABASE_KEY=your-key \
aimq:latest
Docker Compose with git repository:
version: '3.8'
services:
aimq-worker:
image: aimq:latest
environment:
- AIMQ_TASKS=git:mycompany/aimq-tasks@production
- SUPABASE_URL=${SUPABASE_URL}
- SUPABASE_KEY=${SUPABASE_KEY}
- WORKER_NAME=aimq-worker
restart: unless-stopped
Git URL Patterns
AIMQ supports npm-style git URLs for loading tasks from repositories:
git:user/repo- Default branch from GitHubgit:user/repo@branch- Specific branch or taggit:user/repo#path/to/tasks- Subdirectory in monorepogit:gitlab.com/user/repo@v1.0.0- Full URL with version
Production Deployment Tips
- Scaling: Run multiple worker containers for parallel processing
- Git Repos: Store tasks in version-controlled repositories for GitOps workflows
- Secrets: Use Docker secrets or environment variable injection
- Monitoring: Add health checks and logging aggregation
- Resource Limits: Set memory/CPU limits based on AI model requirements
- Authentication: For private git repos, mount SSH keys or use HTTPS tokens
For detailed Docker deployment patterns and troubleshooting, see docker/README.md.
Development
This project uses just as a task runner. Install it with:
# macOS
brew install just
# Other platforms: https://github.com/casey/just#installation
Common Tasks
# Setup development environment
just install
# Run tests
just test
just test-cov # With coverage
# Code quality
just lint # Check code style
just format # Format code
just type-check # Type checking
just ci # Run all checks (lint + type + test)
# Docker
just dev # Start dev environment
just dev-build # Build and start
just logs # View logs
# Documentation
just docs-serve # Serve docs locally
# See all available tasks
just --list
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run quality checks:
just ci - Submit a pull request
License
MIT License - see LICENSE for details.
Metadata
Release files for aimq 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| aimq-0.1.2.tar.gz | 61.0 kB | Without provenance | Details for aimq-0.1.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| aimq-0.1.2-py3-none-any.whl | Python 3 | none | any | Details for aimq-0.1.2-py3-none-any.whl |
Total release size: 119.4 kB
Release files / aimq-0.1.2.tar.gz
| Download URL | aimq-0.1.2.tar.gz |
|---|---|
| Size | 61.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00aaab760c6fea70a18da7c6d0f14b136b19fe56347143a9e790e5551ee99bdd
|
|
BLAKE2b-256 checksum How to use checksums |
bb68a3786aace269ce48bb115a5c253dabd28fcf1b7f6d41c7cbdaa668e62bcf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.4
|
Release files / aimq-0.1.2-py3-none-any.whl
| Download URL | aimq-0.1.2-py3-none-any.whl |
|---|---|
| Size | 58.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00f043f80a09d7ed8e3a6a955aa8cef0a28995fae829dd05b0e98c2aaaec550c
|
|
BLAKE2b-256 checksum How to use checksums |
e3a0ced2de54adc5c4ddfb2be6946140b11836de0feaf94fd43c199012ed42ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.4
|
Security for aimq 0.1.2
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.
To learn more about protecting yourself from malicious actors, visit our package security documentation.