Metadata-Version: 2.4
Name: ppio-gpus
Version: 0.0.1
Summary: PPIO GPUs SDK - Python SDK for PPIO serverless GPU endpoints
Project-URL: Homepage, https://ppio.com/
Author-email: PPIO <support@ppio.com>
License: MIT
Keywords: ai,gpu,inference,ppio,sdk,serverless
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Requires-Dist: aiohttp-retry>=2.8.3
Requires-Dist: aiohttp>=3.9.0
Requires-Dist: boto3>=1.28.0
Requires-Dist: filelock>=3.12.0
Requires-Dist: requests>=2.25.0
Requires-Dist: urllib3>=2.0.0
Description-Content-Type: text/markdown

# ppio-gpus

Python SDK for PPIO serverless GPU endpoints.

## Installation

```bash
pip install ppio-gpus
```

## Quick Start (Client)

```python
import ppio_gpus

ppio_gpus.api_key = "your-api-key"

endpoint = ppio_gpus.Endpoint("your-endpoint-id")
job = endpoint.run({"prompt": "hello world"})

print(job.status())
output = job.output(timeout=60)
print(output)
```

## Quick Start (Worker)

```python
import ppio_gpus

def handler(job):
    job_input = job["input"]
    # ... process ...
    return {"result": "done"}

ppio_gpus.start({"handler": handler})
```

## Client API

- `Endpoint(endpoint_id)` -- create an endpoint client
- `Endpoint.run(input)` -- async submit a task, returns a `Job` immediately
- `Endpoint.health()` -- check endpoint health
- `Endpoint.purge_queue()` -- cancel all pending tasks
- `Job.status()` -- get current task status
- `Job.output(timeout=0)` -- get task output, optionally poll until complete
- `Job.cancel()` -- cancel a running task

## Worker API

- `ppio_gpus.start(config)` -- start the worker loop (blocks until SIGTERM)
- `ppio_gpus.progress_update(job, data)` -- send in-progress status update
- `ppio_gpus.upload_image(job_id, path)` -- upload image to S3, returns presigned URL
- `ppio_gpus.upload_file(name, path)` -- upload file to S3
- `ppio_gpus.upload_bytes(name, data)` -- upload bytes to S3

## Configuration

Set credentials via environment variables:

```bash
export PPIO_API_KEY="your-api-key"
export PPIO_ENDPOINT_BASE_URL="https://async-public.serverless.ppinfra.com/v1"  # default
```

Or set them directly:

```python
ppio_gpus.api_key = "your-api-key"
ppio_gpus.endpoint_url_base = "https://your-custom-url/v1"
```
