Metadata-Version: 2.4
Name: novita-gpus
Version: 0.0.1
Summary: Novita GPUs SDK - Python SDK for Novita serverless GPU endpoints
Project-URL: Homepage, https://novita.ai/
Author-email: Novita AI <support@novita.ai>
License: MIT
License-File: LICENSE
Keywords: ai,gpu,inference,novita,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

# novita-gpus

Python SDK for Novita serverless GPU endpoints.

## Installation

```bash
pip install novita-gpus
```

## Quick Start (Client)

```python
import novita_gpus

novita_gpus.api_key = "your-api-key"

endpoint = novita_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 novita_gpus

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

novita_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

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

## Configuration

Set credentials via environment variables:

```bash
export NOVITA_API_KEY="your-api-key"
export NOVITA_ENDPOINT_BASE_URL="https://async-public.serverless.novita.ai/v1"  # default
```

Or set them directly:

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