Metadata-Version: 2.4
Name: renoai
Version: 0.1.5
Summary: Official Python SDK for Reno AI API
Author-email: Sazuke Hiroshima <sazuketech12@gmail.com>
Maintainer-email: Aymene Boudali <boudaliaymene4@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/yourusername/renoai-sdk
Project-URL: Documentation, https://github.com/yourusername/renoai-sdk#readme
Project-URL: Repository, https://github.com/yourusername/renoai-sdk
Project-URL: Bug Tracker, https://github.com/yourusername/renoai-sdk/issues
Keywords: reno,ai,api,llm,language-model,chat,completion
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
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 :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25.0
Requires-Dist: urllib3>=1.26.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: black>=22.0.0; extra == "dev"
Requires-Dist: flake8>=6.0.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: isort>=5.0.0; extra == "dev"
Requires-Dist: types-requests>=2.28.0; extra == "dev"
Dynamic: license-file

# Reno AI SDK

Official Python client for the Reno API.

## Installation

```bash
pip install .
```

## Quick Start

```python
from renoai import Reno

client = Reno(api_key="reno_sk_xxx")

# Single-turn
answer = client.ask("What is Python?")
print(answer)

# Multi-turn chat
response = client.chat([
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user",   "content": "Hello!"},
])
print(response.text)

# Streaming
for token in client.stream_text("Tell me a story"):
    print(token, end="", flush=True)

# Stateful conversation
from renoai import Conversation
conv = Conversation(client, system="You are a pirate.")
print(conv.say("Hello!"))
print(conv.say("What is your ship called?"))
```

## Error Handling

```python
from renoai import RenoError, RenoConnectionError, RenoTimeoutError, RenoValidationError

try:
    answer = client.ask("Hello")
except RenoValidationError as e:
    print("Bad input:", e.message)
except RenoConnectionError:
    print("Could not reach the server")
except RenoTimeoutError:
    print("Request timed out")
except RenoError as e:
    print(e.user_friendly())
    if e.is_retryable:
        print(f"Retry after {e.retry_after}s")
```

## Running Tests

```bash
pip install pytest
pytest tests/ -v
```
