Python SDK for Neonloops — run AI workflows via API
Project description
neonloops
Python SDK for Neonloops — run AI workflows via API.
Installation
pip install neonloops
Quick Start
Async (recommended)
import asyncio
from neonloops import Runner, RunInput
runner = Runner(
api_key="nl_sk_...",
# base_url="https://neonloops.com", # optional, defaults to https://neonloops.com
)
async def main():
result = await runner.run(
workflow_id="wf_abc123",
input=[RunInput(role="user", content="Hello, run my workflow!")],
)
print(result.output)
print(result.metadata.tokens)
asyncio.run(main())
Sync
from neonloops import Runner, RunInput
runner = Runner(
api_key="nl_sk_...",
# base_url="https://neonloops.com", # optional, defaults to https://neonloops.com
)
result = runner.run_sync(
workflow_id="wf_abc123",
input=[RunInput(role="user", content="Hello!")],
)
print(result.output)
Configuration
| Parameter | Type | Default | Description |
|---|---|---|---|
api_key |
str |
— | Required. Your Neonloops API key (nl_sk_...) |
base_url |
str |
https://neonloops.com |
Base URL of your Neonloops instance |
project_id |
str |
None |
Default project ID to scope requests |
timeout |
float |
120.0 |
Request timeout in seconds |
max_retries |
int |
2 |
Max retries for 429/5xx errors |
Multi-Turn Conversations
# Create a session
session = await runner.create_session("wf_abc123")
# First turn
r1 = await runner.run(
workflow_id="wf_abc123",
input=[RunInput(role="user", content="Hello!")],
session_id=session.id,
)
# Follow-up — server loads previous messages automatically
r2 = await runner.run(
workflow_id="wf_abc123",
input=[RunInput(role="user", content="Tell me more")],
session_id=session.id,
)
# Retrieve message history
messages = await runner.get_session_messages(session.id)
Error Handling
from neonloops import Runner, NeonloopsApiError, NeonloopsTimeoutError
try:
result = await runner.run(
workflow_id="wf_abc123",
input=[RunInput(role="user", content="Hello")],
)
except NeonloopsApiError as e:
print(f"API error {e.status}: {e}")
except NeonloopsTimeoutError as e:
print(f"Timeout: {e}")
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
neonloops-0.3.0.tar.gz
(20.9 kB
view details)
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
neonloops-0.3.0-py3-none-any.whl
(10.6 kB
view details)
File details
Details for the file neonloops-0.3.0.tar.gz.
File metadata
- Download URL: neonloops-0.3.0.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e0ebba913da9b24d085260bf7c79eb7e551641765b4a55ec4c79e91ba554524
|
|
| MD5 |
f70072f37f97e571444ec0333a5e3af4
|
|
| BLAKE2b-256 |
eb5100071d124489bfd2105d9ba7a74e9471514e942b624b3763349b2a9ba4f0
|
File details
Details for the file neonloops-0.3.0-py3-none-any.whl.
File metadata
- Download URL: neonloops-0.3.0-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79866198f95a67b723702a489a254110d29ae8826f265f573e7e47de5c7a8d50
|
|
| MD5 |
3b7475e81788ace7db844036643626d7
|
|
| BLAKE2b-256 |
c5db3a084ab5ba9510f8f80dbb4a5914704f9a8b5cd794ca75b6d89c0730dac5
|