Official Python SDK for the Runcrate API
Project description
Runcrate Python SDK
Official Python SDK for the Runcrate API.
Installation
pip install runcrate-sdk
Quick Start
from runcrate import Runcrate
client = Runcrate(api_key="rc_live_...")
# Chat completion
response = client.models.chat_completion(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
# List GPU instances
instances = client.instances.list()
# Create an instance
instance = client.instances.create(
name="training-run",
ssh_key_id="key_abc123",
gpu_type="A100",
)
# Check status
status = client.instances.get_status(instance.id)
print(status.status, status.ip)
# Check billing
balance = client.billing.get_balance()
print(f"Credits: ${balance.credits_balance}")
client.close()
Async Usage
import asyncio
from runcrate import AsyncRuncrate
async def main():
async with AsyncRuncrate(api_key="rc_live_...") as client:
response = await client.models.chat_completion(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "Hello!"}],
)
print(response.choices[0].message.content)
asyncio.run(main())
Configuration
client = Runcrate(
api_key="rc_live_...", # or set RUNCRATE_API_KEY env var
base_url="https://runcrate.ai", # infra API (default)
inference_url="https://api.runcrate.ai", # model inference API (default)
timeout=30.0, # request timeout in seconds
max_retries=3, # retry on 429/5xx with exponential backoff
)
Model Inference
The client.models resource connects to api.runcrate.ai for AI model inference. Same API key works for both infrastructure and inference.
Chat Completions
# Standard request
response = client.models.chat_completion(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Explain quantum computing in 3 sentences."},
],
max_tokens=256,
temperature=0.7,
)
print(response.choices[0].message.content)
print(f"Tokens used: {response.usage.total_tokens}")
# Streaming
for chunk in client.models.chat_completion(
model="meta-llama/Meta-Llama-3.1-8B-Instruct",
messages=[{"role": "user", "content": "Write a poem about GPUs"}],
stream=True,
):
delta = chunk.get("choices", [{}])[0].get("delta", {})
print(delta.get("content", ""), end="", flush=True)
Image Generation
result = client.models.generate_image(
model="black-forest-labs/FLUX.1-schnell",
prompt="A futuristic city skyline at sunset",
width=1024,
height=1024,
)
# result.data[0].b64_json contains the base64-encoded image
Video Generation
# Submit video job (async processing)
job = client.models.generate_video(
model="google/veo-3.0",
prompt="A drone flyover of a mountain landscape",
duration=8,
)
print(f"Job ID: {job.id}, Status: {job.status}")
# Poll until complete
import time
while True:
job = client.models.get_video_status(job.id)
print(f"Status: {job.status}")
if job.status in ("completed", "failed"):
break
time.sleep(5)
# Download the video
if job.status == "completed":
video_bytes = client.models.download_video(job.id)
with open("output.mp4", "wb") as f:
f.write(video_bytes)
Text-to-Speech
audio_bytes = client.models.text_to_speech(
model="openai/tts-1",
input="Hello, welcome to Runcrate!",
voice="alloy",
response_format="mp3",
)
with open("speech.mp3", "wb") as f:
f.write(audio_bytes)
Transcription (Speech-to-Text)
with open("audio.wav", "rb") as f:
result = client.models.transcribe(
model="openai/whisper-1",
file=f,
filename="audio.wav",
)
print(result.text)
print(f"Duration: {result.duration}s")
Infrastructure Resources
Instances
client.instances.list(search="my-gpu")
client.instances.create(name="run", ssh_key_id="key", gpu_type="A100")
client.instances.get("instance-id")
client.instances.terminate("instance-id")
client.instances.get_status("instance-id")
client.instances.list_types(gpu_type="A100", region="us-east")
Environments
client.environments.list()
client.environments.create(name="staging")
client.environments.get("env-id")
client.environments.update("env-id", name="production")
client.environments.delete("env-id")
SSH Keys
client.ssh_keys.list()
client.ssh_keys.create(name="my-key", public_key="ssh-ed25519 AAAA...")
client.ssh_keys.delete("key-id")
Storage
client.storage.list()
client.storage.get("volume-id")
Billing
client.billing.get_balance()
client.billing.list_transactions(limit=10, offset=0)
client.billing.usage(from_date="2025-01-01", to_date="2025-01-31")
Templates
client.templates.list(search="cuda", category="ml", page_size=10)
Error Handling
from runcrate import Runcrate, NotFoundError, InsufficientCreditsError, RateLimitError
client = Runcrate(api_key="rc_live_...")
try:
instance = client.instances.get("nonexistent")
except NotFoundError as e:
print(f"Not found: {e.message}")
except InsufficientCreditsError as e:
print(f"Need more credits: {e.message}")
except RateLimitError as e:
print(f"Rate limited: {e.message}")
Pagination
# Transactions support offset-based pagination
page = client.billing.list_transactions(limit=10, offset=0)
print(page.data) # list of Transaction objects
print(page.has_more) # True if more pages exist
print(page.total) # total count
# Templates support page-based pagination
templates = client.templates.list(page=1, page_size=25)
Requirements
- Python >= 3.9
- httpx >= 0.25.0
- pydantic >= 2.0
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
runcrate_sdk-0.1.2.tar.gz
(20.2 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
File details
Details for the file runcrate_sdk-0.1.2.tar.gz.
File metadata
- Download URL: runcrate_sdk-0.1.2.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
998df4fdd19d35549f68ad1605ec71cbbdf4b09b10f956d29a412ccf9a45ad32
|
|
| MD5 |
918a08408d6f26e7f2026e340dcaf869
|
|
| BLAKE2b-256 |
f919f89217551f55dd181e9e971eb098792571fd170d971aa648dbf45a26a10a
|
File details
Details for the file runcrate_sdk-0.1.2-py3-none-any.whl.
File metadata
- Download URL: runcrate_sdk-0.1.2-py3-none-any.whl
- Upload date:
- Size: 23.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72969ecbd024e4e5ea8744bbaefbfb20e134e5b9e9a32ef5ee2413ed881c9cae
|
|
| MD5 |
6cff8cb5cf1b2f1767c3d89ad8e7f9a7
|
|
| BLAKE2b-256 |
3f07a9f289e0fc4750df2af06f93365fa6be6943647e48f07454afab29e9b443
|