Python SDK for RedenLab ML inference service
Project description
RedenLab Extract SDK
Python SDK for RedenLab's ML inference service. Run machine learning models on audio files using Redenlab's proprietary endpoints.
Features
- Simple, Pythonic API for ML inference
- Async job management with polling
- Built-in retry logic and error handling
- Support for multiple ML models
Installation
pip install redenlab-extract
Quick Start
from redenlab_extract import InferenceClient
# Initialize client with API key
client = InferenceClient(api_key="sk_live_your_api_key_here")
# Run inference on an audio file
result = client.predict(file_path="audio.wav")
print(result)
# {
# 'job_id': 'uuid',
# 'status': 'completed',
# 'result': {'intelligibility_score': 0.85},
# 'created_at': '2025-01-15T10:30:00Z',
# 'completed_at': '2025-01-15T10:35:00Z'
# }
Authentication
The SDK looks for your API key in the following order:
- Constructor parameter:
InferenceClient(api_key="sk_live_...") - Environment variable:
REDENLAB_ML_API_KEY - Config file:
~/.redenlab-ml/config.yaml
Using Environment Variables
export REDENLAB_ML_API_KEY=sk_live_your_api_key_here
from redenlab_extract import InferenceClient
# API key is loaded from environment
client = InferenceClient()
result = client.predict(file_path="audio.wav")
Using Config File
Create ~/.redenlab-ml/config.yaml:
api_key: sk_live_your_api_key_here
base_url: https://your-api-gateway-url.amazonaws.com/prod # optional
model_name: als-intelligibility
from redenlab_extract import InferenceClient
# API key is loaded from config file
client = InferenceClient()
result = client.predict(file_path="audio.wav")
Advanced Usage
Specify Model
client = InferenceClient(
api_key="sk_live_...",
model_name="speaker_diarisation_workflow"
)
Available models:
als-intelligibilityspeaker_diarisation_workflowataxia-naturalnessataxia-intelligibility
Custom Timeout
client = InferenceClient(
api_key="sk_live_...",
timeout=7200 # 2 hours
)
Batch Processing (Submit + Poll Pattern)
For processing multiple files efficiently, use submit() and poll() separately:
# Submit all jobs first (fast - no waiting)
job_ids = []
for audio_file in audio_files:
job_id = client.submit(file_path=audio_file)
job_ids.append(job_id)
print(f"Submitted: {job_id}")
# Poll for results (efficient - single loop checking all jobs)
results = {}
pending = set(job_ids)
while pending:
for job_id in list(pending):
status = client.get_status(job_id)
if status['status'] == 'completed':
results[job_id] = status['result']
pending.remove(job_id)
elif status['status'] == 'failed':
results[job_id] = {'error': status.get('error')}
pending.remove(job_id)
if pending:
time.sleep(10) # Check all jobs every 10 seconds
print(f"Processed {len(results)} files!")
Submit and Poll Separately
# Submit job and get job_id immediately
job_id = client.submit(file_path="audio.wav")
print(f"Job submitted: {job_id}")
# ... do other work, or even exit and resume later ...
# Poll when ready
result = client.poll(job_id)
print(result['result'])
Check Job Status (Non-blocking)
# Get status of a running job without blocking
status = client.get_status(job_id="existing-job-uuid")
print(status['status']) # 'upload_pending', 'processing', 'completed', 'failed'
Configuration Options
| Parameter | Environment Variable | Config File | Default |
|---|---|---|---|
api_key |
REDENLAB_ML_API_KEY |
api_key |
Required |
base_url |
REDENLAB_ML_BASE_URL |
base_url |
Production endpoint |
model_name |
REDENLAB_ML_MODEL |
model_name |
intelligibility |
timeout |
REDENLAB_ML_TIMEOUT |
timeout |
3600 (1 hour) |
Supported File Types
- WAV (
.wav) - FLAC (
.flac)
Requirements
- Python 3.10+
requeststenacitypyyaml
Examples
See the examples/ directory for more usage examples:
- quickstart.py - Basic usage
- batch_inference.py - Process multiple files
- error_handling.py - Robust error handling
Documentation
Support
- Email: support@redenlab.com
- Website: https://redenlab.com
License
MIT License - see LICENSE file for details
Changelog
See CHANGELOG.md for version history and release notes.
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 redenlab_extract-1.0.0.tar.gz.
File metadata
- Download URL: redenlab_extract-1.0.0.tar.gz
- Upload date:
- Size: 117.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f564b08ad054bce39b4c5706f2aa2fb66b347a6c340fb426724163d2120ed185
|
|
| MD5 |
3cc748b5b65abeff1431bec9ce8afce4
|
|
| BLAKE2b-256 |
36a240acda5afbc97f2328731d0b5e767be571e34677e947ca601a16785589bd
|
File details
Details for the file redenlab_extract-1.0.0-py3-none-any.whl.
File metadata
- Download URL: redenlab_extract-1.0.0-py3-none-any.whl
- Upload date:
- Size: 38.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
236dd60a69bc7b86f4d6f07d69d4cbaebef3ef760a311015a32799888bf39e35
|
|
| MD5 |
50c777b365f52cae8e4ca846433fb34d
|
|
| BLAKE2b-256 |
8692df376de52d728d3cfe70e7a428ee2b7594046e1386f025e5c4b10b7ead55
|