Python SDK for deploying containerized applications on the Basilica GPU cloud
Project description
Basilica Python SDK
The official Python SDK for deploying containerized applications on the Basilica GPU cloud platform.
Installation
pip install basilica-sdk
Requirements: Python 3.10+
Quick Start
1. Get an API Token
# Install the Basilica CLI
pip install basilica-cli
# Create an API token
basilica tokens create
# Set the environment variable
export BASILICA_API_TOKEN="basilica_..."
2. Deploy Your First App
from basilica import BasilicaClient
client = BasilicaClient()
# Deploy inline Python code
deployment = client.deploy(
name="hello",
source="""
from http.server import HTTPServer, BaseHTTPRequestHandler
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'Hello from Basilica!')
HTTPServer(('', 8000), Handler).serve_forever()
""",
port=8000,
ttl_seconds=600, # Auto-delete after 10 minutes
)
print(f"Live at: {deployment.url}")
3. Deploy a FastAPI Application
from basilica import BasilicaClient
client = BasilicaClient()
deployment = client.deploy(
name="my-api",
source="""
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello from FastAPI!"}
@app.get("/items/{item_id}")
def get_item(item_id: int):
return {"item_id": item_id, "name": f"Item {item_id}"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
""",
port=8000,
pip_packages=["fastapi", "uvicorn"],
ttl_seconds=600,
)
print(f"API docs: {deployment.url}/docs")
Features
High-Level API
The SDK provides a simple deploy() method that handles:
- Source code packaging
- Container image selection
- Dependency installation
- Health checking and readiness waiting
- Public URL provisioning
deployment = client.deploy(
name="my-app", # Deployment name
source="app.py", # File path or inline code
port=8000, # Application port
pip_packages=["flask"], # Dependencies
storage=True, # Persistent storage at /data
ttl_seconds=3600, # Auto-cleanup (optional)
)
print(deployment.url) # Public URL
print(deployment.logs()) # Application logs
deployment.delete() # Manual cleanup
Decorator API
Define deployments as decorated functions:
import basilica
@basilica.deployment(
name="my-service",
port=8000,
pip_packages=["fastapi", "uvicorn"],
ttl_seconds=600,
)
def serve():
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def root():
return {"status": "running"}
uvicorn.run(app, host="0.0.0.0", port=8000)
# Deploy by calling the function
deployment = serve()
print(f"Live at: {deployment.url}")
GPU Deployments
Deploy applications with GPU access:
deployment = client.deploy(
name="pytorch-inference",
source="inference.py",
image="pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime",
port=8000,
gpu_count=1,
gpu_models=["NVIDIA-RTX-A4000"], # Optional: specific GPU models
memory="8Gi",
timeout=300,
)
Persistent Storage
Enable persistent storage mounted at /data:
# Simple: Enable storage at /data
deployment = client.deploy(
name="stateful-app",
source="app.py",
port=8000,
storage=True,
)
# Custom mount path
deployment = client.deploy(
name="stateful-app",
source="app.py",
port=8000,
storage="/custom/path",
)
Using volumes with the decorator API:
import basilica
cache = basilica.Volume.from_name("my-cache", create_if_missing=True)
@basilica.deployment(
name="app-with-storage",
port=8000,
volumes={"/data": cache},
)
def serve():
# Your app can read/write to /data
pass
Health Checks
Large model deployments (vLLM, SGLang) can take minutes to download and load into GPU memory. Configure custom health check probes to prevent Kubernetes from killing pods before models are ready:
from basilica import BasilicaClient, HealthCheckConfig, ProbeConfig
client = BasilicaClient()
# Deploy SGLang with a 20-minute startup tolerance
deployment = client.deploy_sglang(
model="Qwen/Qwen2.5-3B-Instruct",
health_check=HealthCheckConfig(
startup=ProbeConfig(
path="/health",
port=30000,
initial_delay_seconds=0,
period_seconds=10,
timeout_seconds=5,
failure_threshold=120, # 120 * 10s = 20 minutes
),
liveness=ProbeConfig(
path="/health",
port=30000,
initial_delay_seconds=120,
period_seconds=30,
timeout_seconds=10,
failure_threshold=5,
),
readiness=ProbeConfig(
path="/health",
port=30000,
initial_delay_seconds=60,
period_seconds=15,
timeout_seconds=10,
failure_threshold=5,
),
),
timeout=1200,
)
deploy_vllm() and deploy_sglang() include sensible defaults (10-minute startup
tolerance) when no health_check is provided. For very large models, pass your own
HealthCheckConfig to extend the startup window.
Health checks work with any deployment method:
# Generic deploy()
deployment = client.deploy(
name="my-gpu-app",
source="app.py",
port=8000,
gpu_count=1,
health_check=HealthCheckConfig(
startup=ProbeConfig(path="/ready", port=8000, failure_threshold=60),
),
)
# Decorator API
@basilica.deployment(
name="my-service",
port=8000,
health_check=HealthCheckConfig(
startup=ProbeConfig(path="/health", port=8000, failure_threshold=60),
),
)
def serve():
...
ProbeConfig fields:
path: HTTP endpoint to probe (e.g."/health")port: Port to probe (defaults to container port ifNone)initial_delay_seconds: Seconds before first probe (default: 30)period_seconds: Interval between probes (default: 10)timeout_seconds: Probe timeout (default: 5)failure_threshold: Consecutive failures before action (default: 3)
Pre-built Container Images
Deploy any Docker image:
deployment = client.deploy(
name="nginx",
image="nginxinc/nginx-unprivileged:alpine",
port=8080,
replicas=1,
cpu="250m",
memory="256Mi",
)
API Reference
BasilicaClient
class BasilicaClient:
def __init__(
self,
base_url: str = None, # Default: https://api.basilica.ai
api_key: str = None, # Default: BASILICA_API_TOKEN env var
): ...
deploy()
The primary method for deploying applications:
def deploy(
name: str, # Deployment name (DNS-safe)
source: Optional[str | Path] = None, # File path or inline code
image: str = "python:3.11-slim", # Container image
port: int = 8000, # Application port
env: Optional[Dict[str, str]] = None, # Environment variables
cpu: str = "500m", # CPU allocation
memory: str = "512Mi", # Memory allocation
storage: Union[bool, str] = False, # Persistent storage
gpu_count: Optional[int] = None, # Number of GPUs
gpu_models: Optional[List[str]] = None, # GPU model requirements
min_cuda_version: Optional[str] = None, # Minimum CUDA version
min_gpu_memory_gb: Optional[int] = None,# Minimum GPU VRAM
replicas: int = 1, # Number of instances
ttl_seconds: Optional[int] = None, # Auto-delete timeout
public: bool = True, # Create public URL
timeout: int = 300, # Deployment timeout
pip_packages: Optional[List[str]] = None, # pip dependencies
health_check: Optional[HealthCheckConfig] = None, # Custom health probes
) -> Deployment
Deployment Object
class Deployment:
name: str # Deployment name
url: str # Public URL
namespace: str # Kubernetes namespace
user_id: str # Owner user ID
state: str # Current state
created_at: str # Creation timestamp
def status() -> DeploymentStatus # Get detailed status
def logs(tail=None) -> str # Get application logs
def wait_until_ready(timeout=300) # Block until ready
def delete() -> None # Delete deployment
def refresh() -> Deployment # Refresh state
DeploymentStatus
@dataclass
class DeploymentStatus:
state: str # Pending, Active, Running, Failed, Terminating
replicas_ready: int # Ready replica count
replicas_desired: int # Desired replica count
message: Optional[str] # Status message
phase: Optional[str] # Detailed phase
progress: Optional[ProgressInfo] # Progress information
@property
def is_ready(self) -> bool # Check if fully ready
@property
def is_failed(self) -> bool # Check if failed
@property
def is_pending(self) -> bool # Check if still starting
Exception Handling
The SDK provides a comprehensive exception hierarchy:
from basilica import (
BasilicaError, # Base exception
AuthenticationError, # Invalid/missing token
AuthorizationError, # Permission denied
ValidationError, # Invalid parameters
DeploymentError, # Base deployment error
DeploymentNotFound, # Deployment doesn't exist
DeploymentTimeout, # Timeout waiting for ready
DeploymentFailed, # Deployment crashed
ResourceError, # Resource unavailable
StorageError, # Storage configuration error
NetworkError, # API communication error
RateLimitError, # Rate limit exceeded
SourceError, # Source file error
)
try:
deployment = client.deploy(...)
except DeploymentTimeout:
print("Deployment took too long to start")
except DeploymentFailed as e:
print(f"Deployment failed: {e}")
except AuthenticationError:
print("Invalid API token")
Low-Level API
For advanced use cases, access the low-level API methods:
# Create deployment with full control
response = client.create_deployment(
instance_name="my-app",
image="python:3.11-slim",
command=["python", "-m", "http.server", "8000"],
port=8000,
cpu="1",
memory="1Gi",
)
# Get deployment details
response = client.get_deployment("my-app")
# Delete deployment
client.delete_deployment("my-app")
# List all deployments
response = client.list_deployments()
# Get logs
logs = client.get_deployment_logs("my-app", tail=100)
GPU Rentals (Legacy API)
For direct GPU node access via SSH:
# List available nodes
nodes = client.list_nodes(gpu_type="A100", min_gpu_count=1)
# Start a rental
rental = client.start_rental(
gpu_type="A100",
container_image="pytorch/pytorch:latest",
)
print(f"Rental ID: {rental.rental_id}")
# Get SSH credentials
status = client.get_rental(rental.rental_id)
if status.ssh_credentials:
print(f"SSH: {status.ssh_credentials.username}@{status.ssh_credentials.host}")
# Stop rental
client.stop_rental(rental.rental_id)
Environment Variables
| Variable | Description | Default |
|---|---|---|
BASILICA_API_TOKEN |
API authentication token | Required |
BASILICA_API_URL |
API endpoint URL | https://api.basilica.ai |
Examples
For complete working examples, see the examples directory:
| Example | Description |
|---|---|
01_hello_world.py |
Simplest deployment with inline code |
02_with_storage.py |
Persistent storage example |
03_fastapi.py |
Production FastAPI deployment |
04_gpu.py |
GPU/CUDA deployment with PyTorch |
05_decorator_*.py |
Decorator API patterns |
06_vllm_qwen.py |
LLM inference with vLLM |
07_sglang_model.py |
SGLang model serving |
08_external_file.py |
Deploy from external Python file |
09_container_image.py |
Pre-built Docker image deployment |
10_custom_docker/ |
Multi-file project with Dockerfile |
11_agentgym.py |
RL environment deployment |
12_lobe_chat.py |
Self-hosted chat UI |
13_lobe_chat_vllm.py |
Full AI stack (LobeChat + vLLM) |
14_streamlit.py |
Interactive Streamlit app |
deploy_sglang_health_check.py |
SGLang with custom health check probes |
Development
Building from Source
git clone https://github.com/one-covenant/basilica.git
cd basilica/crates/basilica-sdk-python
# Create virtual environment
python -m venv .venv
source .venv/bin/activate
# Install maturin and build
pip install maturin
maturin develop
# Test import
python -c "from basilica import BasilicaClient; print('OK')"
Running Tests
pip install pytest
pytest tests/ -v
Architecture
The SDK is built with:
- PyO3: Rust bindings for high-performance HTTP operations
- Async runtime: Tokio-based async operations exposed as sync Python calls
- Type safety: Full type hints with IDE support
For detailed architecture documentation, see PYTHON-SDK-ARCHITECTURE.md.
License
MIT OR Apache-2.0
Links
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
Built Distributions
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 basilica_sdk-0.19.0.tar.gz.
File metadata
- Download URL: basilica_sdk-0.19.0.tar.gz
- Upload date:
- Size: 739.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8fc4966ca126e6579dd0fe3b1629b02359d97c74b8b5eb31f5b717ff411bda1
|
|
| MD5 |
8173abe65fbfd4c25f227b61da0581fb
|
|
| BLAKE2b-256 |
f72e1680b8ada641c89d697c74ad1d3c1f774459e45993a343da81ebc9a074af
|
Provenance
The following attestation bundles were made for basilica_sdk-0.19.0.tar.gz:
Publisher:
release-python-sdk.yml on one-covenant/basilica
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
basilica_sdk-0.19.0.tar.gz -
Subject digest:
c8fc4966ca126e6579dd0fe3b1629b02359d97c74b8b5eb31f5b717ff411bda1 - Sigstore transparency entry: 945559763
- Sigstore integration time:
-
Permalink:
one-covenant/basilica@af63c701451167b6639a74b0197c7922f16472f1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one-covenant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python-sdk.yml@af63c701451167b6639a74b0197c7922f16472f1 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file basilica_sdk-0.19.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: basilica_sdk-0.19.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 5.3 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
801ef2ad06075532c47cb302475e48dd614aa635dfb859fccba8469c90586c25
|
|
| MD5 |
f81fe0bff88d01dcb3345827fc12ae6e
|
|
| BLAKE2b-256 |
6c1d843a6f9a31839b5a8ce89a35fdbd2db4e560280965301495063f7e1f3ace
|
Provenance
The following attestation bundles were made for basilica_sdk-0.19.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release-python-sdk.yml on one-covenant/basilica
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
basilica_sdk-0.19.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
801ef2ad06075532c47cb302475e48dd614aa635dfb859fccba8469c90586c25 - Sigstore transparency entry: 945559816
- Sigstore integration time:
-
Permalink:
one-covenant/basilica@af63c701451167b6639a74b0197c7922f16472f1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one-covenant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python-sdk.yml@af63c701451167b6639a74b0197c7922f16472f1 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file basilica_sdk-0.19.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: basilica_sdk-0.19.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.3 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3c03cc37228c7b61b55bdf1bc67a35c3a8050775c743627878653e7f171de7b
|
|
| MD5 |
1a597b49e8cee283db80b076f0d0501f
|
|
| BLAKE2b-256 |
57b282d080dcf7316b3acbf7a5d602398440dbfe021beea29a11adb6f03a9fda
|
Provenance
The following attestation bundles were made for basilica_sdk-0.19.0-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
release-python-sdk.yml on one-covenant/basilica
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
basilica_sdk-0.19.0-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
c3c03cc37228c7b61b55bdf1bc67a35c3a8050775c743627878653e7f171de7b - Sigstore transparency entry: 945559793
- Sigstore integration time:
-
Permalink:
one-covenant/basilica@af63c701451167b6639a74b0197c7922f16472f1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one-covenant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python-sdk.yml@af63c701451167b6639a74b0197c7922f16472f1 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file basilica_sdk-0.19.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: basilica_sdk-0.19.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 4.1 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea5ef8db9ce4bfa216d6aa3fd28e8c6be7370fb04fd2f97250a6231d400329a3
|
|
| MD5 |
f054e8539b05010cfc8aa4721c845dc0
|
|
| BLAKE2b-256 |
80aabbd0d1841a538b26fc5836ccfd97261d7fc3c52123a2968840068fef44d7
|
Provenance
The following attestation bundles were made for basilica_sdk-0.19.0-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
release-python-sdk.yml on one-covenant/basilica
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
basilica_sdk-0.19.0-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
ea5ef8db9ce4bfa216d6aa3fd28e8c6be7370fb04fd2f97250a6231d400329a3 - Sigstore transparency entry: 945559829
- Sigstore integration time:
-
Permalink:
one-covenant/basilica@af63c701451167b6639a74b0197c7922f16472f1 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one-covenant
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python-sdk.yml@af63c701451167b6639a74b0197c7922f16472f1 -
Trigger Event:
workflow_dispatch
-
Statement type: