A Python library for building task-based workflows with scheduling, webhooks, artifact management, and observability
Project description
Task Framework
A Python library for building and executing task-based workflows with built-in support for scheduling, webhooks, artifact management, and observability.
Features
- Multi-Task Server: Deploy multiple task definitions to a single server, each with isolated execution environments
- Thread Execution: Run tasks synchronously or asynchronously with full state management
- Artifact Management: Track inputs and outputs with support for JSON, text, and file artifacts
- File Storage: Pluggable file storage interface with local filesystem and pre-signed URL support
- Scheduling: Cron-based scheduling with APScheduler integration
- Webhooks: Event-driven notifications with automatic retry and delivery tracking
- Observability: Built-in Prometheus metrics and structured logging
- OpenAPI 3.1.0: Auto-generated API documentation at
/docs
Installation
pip install task-framework
Or with uv:
uv add task-framework
Quick Start
Multi-Task Server
The Task Framework runs as a server that can host multiple task definitions. Each task is packaged as a zip file with its code and metadata.
Start a task server:
# Start server with auto-discovery from task_definitions/ directory
task-framework serve --host 0.0.0.0 --port 3000
# Or for development, load a task from source
task-framework serve --dev-task /path/to/my-task/
Deploy a task via API:
curl -X POST http://localhost:3000/admin/tasks \
-H "X-API-Key: your-admin-key" \
-F "file=@my-task-1.0.0.zip"
Task Zip Structure:
my-task-1.0.0.zip/
task_metadata.json # Task metadata and schemas
task.py # Task implementation
pyproject.toml # Dependencies (optional)
Example Task Function:
async def my_task(context):
# Get input artifacts
inputs = await context.get_input_artifacts()
# Process inputs
result = {"message": "Task completed", "input_count": len(inputs)}
# Publish output
from task_framework.models.artifact import Artifact
await context.publish_output_artifacts([
Artifact(kind="json", value=result, media_type="application/json")
])
## API Usage
### Create a Thread (Execute Task)
```bash
curl -X POST http://localhost:3000/threads \
-H "X-API-Key: your-api-key" \
-H "X-User-Id: user123" \
-H "X-App-Id: app456" \
-H "Content-Type: application/json" \
-d '{
"mode": "sync",
"inputs": [{"kind": "json", "value": {"data": "test"}}]
}'
In multi-task mode, add ?task_id=my-task&version=1.0.0 query parameters.
List Threads
curl http://localhost:3000/threads \
-H "X-API-Key: your-api-key" \
-H "X-User-Id: user123" \
-H "X-App-Id: app456"
Health Check
curl http://localhost:3000/health
Task Package Format
A task package is a zip file containing:
my-task-1.0.0.zip/
task_metadata.json # Task metadata
task.py # Task implementation
pyproject.toml # Dependencies
Example task_metadata.json:
{
"name": "my-task",
"version": "1.0.0",
"description": "My task description",
"entry_point": "task:my_task_function",
"input_schemas": [
{"kind": "json", "media_type": "application/json", "required": true}
],
"output_schemas": [
{"kind": "json", "media_type": "application/json"}
]
}
Documentation
- API Documentation: Start the server and visit
/docsfor interactive Swagger UI - User Guide: See
docs/user/for getting started guides - Architecture: See
docs/architecture/for system design documentation - Feature Documentation: See
docs/features/for detailed feature documentation
Authentication
The framework uses API key authentication via the X-API-Key header:
- Regular API Keys: Require
user_idandapp_idmetadata for access control - Admin API Keys: Full access to all endpoints including
/admin/*routes
Public endpoints (no authentication required):
GET /health- Health checkGET /metrics- Prometheus metricsGET /task/metadata- Task metadata discovery
Requirements
- Python 3.13+
- FastAPI
- Pydantic 2.x
- uvicorn
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please see the development documentation in docs/developer/ for setup instructions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file task_framework_py-0.0.5b0.tar.gz.
File metadata
- Download URL: task_framework_py-0.0.5b0.tar.gz
- Upload date:
- Size: 311.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8443a6b2f875eb4d4880c686bb7177c51d6a854a37a32885ae5262145b62bbd
|
|
| MD5 |
29e76c7c9f6b1949bd018558dd912fe6
|
|
| BLAKE2b-256 |
3ce9e24e685a122d10eb1b0da8033df908a0735fd01b5c6af1f0935c050ed5fe
|
File details
Details for the file task_framework_py-0.0.5b0-py3-none-any.whl.
File metadata
- Download URL: task_framework_py-0.0.5b0-py3-none-any.whl
- Upload date:
- Size: 411.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a428658d020c61948684b93c2ee8a57e1f2abbf01dd60fcac8f4891faaaa6e1f
|
|
| MD5 |
9dda911fb756aef1e488f5a6a021dee9
|
|
| BLAKE2b-256 |
4edbf66f488b8fcfea5555c8285cf110f3df0f8689c21c7488befff124eef8fc
|