Lightweight ML Pipeline Orchestration API that enables users to define, execute, and monitor ML pipelines.
Prerequisites: Python 3.13+, UV package manager
# Clone and setup
git clone <repository-url>
cd pulsr
# Install dependencies
uv sync
# Run the server
uvicorn pulsr.main:app --reload# Build and run
docker-compose up --build
# Access the application
open http://localhost:8000/api/v1/docs- Project Design Document - Complete system architecture, data models, and design decisions
- API Examples - Comprehensive HTTPie examples for all endpoints
- Swagger UI: http://localhost:8000/api/v1/docs
- ReDoc: http://localhost:8000/api/v1/redoc
See docs/api-examples.md for complete HTTPie examples including:
- Creating pipelines with step dependencies
- Triggering pipeline runs
- Monitoring execution status
- Error handling examples
POST /api/v1/pipelines- Create pipeline with steps and dependenciesGET /api/v1/pipelines- List all pipelinesGET /api/v1/pipelines/{id}- Get pipeline detailsPOST /api/v1/pipelines/{id}/trigger_run- Start new pipeline runGET /api/v1/pipelines/{id}/runs- List pipeline runsGET /api/v1/pipelines/{id}/runs/{run_id}- Get run details
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=pulsr tests/
# Run specific test file
uv run pytest tests/test_api.pytests/test_api.py- API endpoint integration teststests/test_models.py- Data model unit teststests/test_services.py- Business logic teststests/conftest.py- Test configuration and fixtures
- Models: Add/modify data models in
pulsr/models/ - Services: Implement business logic in
pulsr/services/ - API: Create endpoints in
pulsr/api/v1/ - Tests: Add corresponding tests in
tests/
pulsr/
├── pulsr/ # Main application package
│ ├── main.py # FastAPI app entry point
│ ├── core/ # Configuration & database
│ ├── models/ # SQLModel data models
│ ├── api/v1/ # API endpoints
│ ├── services/ # Business logic
│ └── utils/ # Utility functions
├── tests/ # Test suite
├── docs/ # Documentation
└── pyproject.toml # Project configuration
Create .env file for local development:
DEBUG=true
DATABASE_URL=sqlite:///./pulsr.db# Format code
ruff format pulsr/ tests/
# Lint code
ruff check pulsr/ tests/
# Fix auto-fixable linting issues
ruff check --fix pulsr/ tests/- Clean Architecture: Separated layers (API, Services, Models)
- Type Safety: Full type annotations with modern Python syntax
- Dependency Injection: FastAPI dependency system
- Error Handling: Custom exceptions with proper HTTP responses
- Validation: Comprehensive input validation and dependency cycle detection