WaveSpeedAI Python Client — Official Python SDK for WaveSpeedAI inference platform
Project description
Installation
pip install wavespeed
API Client
Run WaveSpeed AI models with a simple API:
import wavespeed
output = wavespeed.run(
"wavespeed-ai/z-image/turbo",
{"prompt": "Cat"},
)
print(output["outputs"][0]) # Output URL
Authentication
Set your API key via environment variable (You can get your API key from https://wavespeed.ai/accesskey):
export WAVESPEED_API_KEY="your-api-key"
Or pass it directly:
from wavespeed import Client
client = Client(api_key="your-api-key")
output = client.run("wavespeed-ai/z-image/turbo", {"prompt": "Cat"})
Options
output = wavespeed.run(
"wavespeed-ai/z-image/turbo",
{"prompt": "Cat"},
timeout=36000.0, # Max wait time in seconds (default: 36000.0)
poll_interval=1.0, # Status check interval (default: 1.0)
enable_sync_mode=False, # Single request mode, no polling (default: False)
)
Sync Mode
Use enable_sync_mode=True for a single request that waits for the result (no polling).
Note: Not all models support sync mode. Check the model documentation for availability.
output = wavespeed.run(
"wavespeed-ai/z-image/turbo",
{"prompt": "Cat"},
enable_sync_mode=True,
)
Retry Configuration
Configure retries at the client level:
from wavespeed import Client
client = Client(
api_key="your-api-key",
max_retries=0, # Task-level retries (default: 0)
max_connection_retries=5, # HTTP connection retries (default: 5)
retry_interval=1.0, # Base delay between retries in seconds (default: 1.0)
)
Upload Files
Upload images, videos, or audio files:
import wavespeed
url = wavespeed.upload("/path/to/image.png")
print(url)
Serverless Worker
Build serverless workers for the WaveSpeed platform.
Basic Handler
import wavespeed.serverless as serverless
def handler(job):
job_input = job["input"]
result = job_input.get("prompt", "").upper()
return {"output": result}
serverless.start({"handler": handler})
Async Handler
import wavespeed.serverless as serverless
async def handler(job):
job_input = job["input"]
result = await process_async(job_input)
return {"output": result}
serverless.start({"handler": handler})
Generator Handler (Streaming)
import wavespeed.serverless as serverless
def handler(job):
for i in range(10):
yield {"progress": i, "partial": f"chunk-{i}"}
serverless.start({"handler": handler})
Input Validation
from wavespeed.serverless.utils import validate
INPUT_SCHEMA = {
"prompt": {"type": str, "required": True},
"max_tokens": {"type": int, "required": False, "default": 100},
"temperature": {
"type": float,
"required": False,
"default": 0.7,
"constraints": lambda x: 0 <= x <= 2,
},
}
def handler(job):
result = validate(job["input"], INPUT_SCHEMA)
if "errors" in result:
return {"error": result["errors"]}
validated = result["validated_input"]
# process with validated input...
return {"output": "done"}
Concurrent Execution
Enable concurrent job processing with concurrency_modifier:
import wavespeed.serverless as serverless
def handler(job):
return {"output": job["input"]["data"]}
def concurrency_modifier(current_concurrency):
return 2 # Process 2 jobs concurrently
serverless.start({
"handler": handler,
"concurrency_modifier": concurrency_modifier
})
Local Development
Test with JSON Input
# Using CLI argument
python handler.py --test_input '{"input": {"prompt": "hello"}}'
# Using test_input.json file (auto-detected)
echo '{"input": {"prompt": "hello"}}' > test_input.json
python handler.py
Running Tests
# Run all tests
python -m pytest
# Run a single test file
python -m pytest tests/test_api.py
# Run a specific test
python -m pytest tests/test_api.py::TestClient::test_run_success -v
FastAPI Development Server
python handler.py --waverless_serve_api --waverless_api_port 8000
Then use the interactive Swagger UI at http://localhost:8000/ or make requests:
# Synchronous execution
curl -X POST http://localhost:8000/runsync \
-H "Content-Type: application/json" \
-d '{"input": {"prompt": "hello"}}'
# Async execution
curl -X POST http://localhost:8000/run \
-H "Content-Type: application/json" \
-d '{"input": {"prompt": "hello"}}'
CLI Options
| Option | Description |
|---|---|
--test_input JSON |
Run locally with JSON test input |
--waverless_serve_api |
Start FastAPI development server |
--waverless_api_host HOST |
API server host (default: localhost) |
--waverless_api_port PORT |
API server port (default: 8000) |
--waverless_log_level LEVEL |
Log level (DEBUG, INFO, WARN, ERROR) |
Environment Variables
API Client
| Variable | Description |
|---|---|
WAVESPEED_API_KEY |
WaveSpeed API key |
Serverless Worker
| Variable | Description |
|---|---|
WAVERLESS_POD_ID |
Worker/pod identifier |
WAVERLESS_API_KEY |
API authentication key |
WAVERLESS_WEBHOOK_GET_JOB |
Job fetch endpoint |
WAVERLESS_WEBHOOK_POST_OUTPUT |
Result submission endpoint |
License
MIT
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 wavespeed-1.0.6.tar.gz.
File metadata
- Download URL: wavespeed-1.0.6.tar.gz
- Upload date:
- Size: 63.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e0b4ad266b78d76d911dbdf695d2a0c6224aa5aee2df731dea35c4deb69a8c1
|
|
| MD5 |
39bac1e6212c0961c12603ccc3b05b5f
|
|
| BLAKE2b-256 |
5121b35f1c1e47411ce2dbce1df85d740c427930e87a4b342dc71ca3e36ceb99
|
Provenance
The following attestation bundles were made for wavespeed-1.0.6.tar.gz:
Publisher:
python-publish.yml on WaveSpeedAI/wavespeed-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wavespeed-1.0.6.tar.gz -
Subject digest:
6e0b4ad266b78d76d911dbdf695d2a0c6224aa5aee2df731dea35c4deb69a8c1 - Sigstore transparency entry: 800443684
- Sigstore integration time:
-
Permalink:
WaveSpeedAI/wavespeed-python@83121bf5fdfcc6a0fa0cec716519dd59d54a5a73 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/WaveSpeedAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@83121bf5fdfcc6a0fa0cec716519dd59d54a5a73 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file wavespeed-1.0.6-py3-none-any.whl.
File metadata
- Download URL: wavespeed-1.0.6-py3-none-any.whl
- Upload date:
- Size: 43.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52930f721bf4a96f820a1115318c55b3ab4d77c501ad74fcf8546ae31b784822
|
|
| MD5 |
00f115657d8d4de4bfc73b764df21d94
|
|
| BLAKE2b-256 |
9b61b8afed672204e4d2c8dcc2ccad6d94e8f7fda1748fbf3c86dc89b7a50373
|
Provenance
The following attestation bundles were made for wavespeed-1.0.6-py3-none-any.whl:
Publisher:
python-publish.yml on WaveSpeedAI/wavespeed-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wavespeed-1.0.6-py3-none-any.whl -
Subject digest:
52930f721bf4a96f820a1115318c55b3ab4d77c501ad74fcf8546ae31b784822 - Sigstore transparency entry: 800443705
- Sigstore integration time:
-
Permalink:
WaveSpeedAI/wavespeed-python@83121bf5fdfcc6a0fa0cec716519dd59d54a5a73 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/WaveSpeedAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@83121bf5fdfcc6a0fa0cec716519dd59d54a5a73 -
Trigger Event:
workflow_dispatch
-
Statement type: