Official Python SDK for the ORO Bittensor Subnet API
Project description
ORO SDK for Python
Official Python SDK for the ORO Bittensor Subnet API.
This SDK is auto-generated from the OpenAPI specification using openapi-python-client.
Documentation
Full SDK documentation: docs.oroagents.com/docs/api/sdk
Installation
pip install oro-sdk
With Bittensor wallet support:
pip install "oro-sdk[bittensor]"
Or install from source:
pip install git+https://github.com/ORO-AI/oro-sdk.git#subdirectory=packages/python
Quick Start
Public API (No Auth Required)
from oro_sdk import Client
from oro_sdk.api.public import get_leaderboard, get_top_for_emissions
client = Client(base_url="https://api.oro.ai")
# Get leaderboard
leaderboard = get_leaderboard.sync(client=client)
if leaderboard:
for entry in leaderboard.entries:
print(f"{entry.rank}. {entry.miner_hotkey}: {entry.final_score}")
# Get top agent for emissions
top = get_top_for_emissions.sync(client=client)
if top:
print(f"Top miner: {top.top_miner_hotkey} with score {top.top_score}")
Validator API (Requires Bittensor Wallet)
from bittensor_wallet import Wallet
from oro_sdk import BittensorAuthClient
from oro_sdk.api.validator import claim_work, heartbeat_evaluation_run, complete_evaluation_run
from oro_sdk.models import CompleteEvaluationRequest, CompleteEvaluationRequestTerminalStatus
wallet = Wallet(name="validator", hotkey="default")
client = BittensorAuthClient(base_url="https://api.oro.ai", wallet=wallet)
# Claim work
work = claim_work.sync(client=client)
if work:
print(f"Claimed eval run: {work.eval_run_id}")
# Send heartbeat
heartbeat = heartbeat_evaluation_run.sync(
eval_run_id=work.eval_run_id,
client=client,
)
print(f"Lease extended to: {heartbeat.lease_expires_at}")
# Complete run
result = complete_evaluation_run.sync(
eval_run_id=work.eval_run_id,
client=client,
body=CompleteEvaluationRequest(
terminal_status=CompleteEvaluationRequestTerminalStatus.SUCCESS,
validator_score=0.85,
),
)
print(f"Completed! Eligible: {result.agent_version_became_eligible}")
else:
print("No work available")
Miner API (Requires Bittensor Wallet)
from bittensor_wallet import Wallet
from oro_sdk import BittensorAuthClient
from oro_sdk.api.miner import submit_agent, get_miner_agent_version_status
wallet = Wallet(name="miner", hotkey="default")
client = BittensorAuthClient(base_url="https://api.oro.ai", wallet=wallet)
# Submit an agent (multipart file upload)
with open("my_agent.py", "rb") as f:
from oro_sdk.models import SubmitAgentBody
from oro_sdk.types import File
body = SubmitAgentBody(file=File(payload=f, file_name="my_agent.py"))
response = submit_agent.sync(client=client, body=body)
if response.admission_status.value == "ACCEPTED":
print(f"Submitted! Version ID: {response.agent_version_id}")
# Check status
status = get_miner_agent_version_status.sync(
agent_version_id=response.agent_version_id,
client=client,
)
print(f"State: {status.state}, Score: {status.final_score}")
Async Support
All endpoints support async:
import asyncio
from oro_sdk import Client
from oro_sdk.api.public import get_leaderboard
async def main():
client = Client(base_url="https://api.oro.ai")
leaderboard = await get_leaderboard.asyncio(client=client)
print(leaderboard)
asyncio.run(main())
API Structure
The SDK is organized by API tag:
oro_sdk.api.public- Public endpoints (no auth)oro_sdk.api.validator- Validator endpoints (requires validator wallet)oro_sdk.api.miner- Miner endpoints (requires miner wallet)oro_sdk.api.admin- Admin endpoints (requires admin access)
Each endpoint module provides:
sync()- Blocking request returning parsed responsesync_detailed()- Blocking request returning full Response objectasyncio()- Async request returning parsed responseasyncio_detailed()- Async request returning full Response object
Models
All request/response models are in oro_sdk.models:
from oro_sdk.models import (
ClaimWorkResponse,
HeartbeatResponse,
CompleteEvaluationRequest,
CompleteEvaluationResponse,
LeaderboardResponse,
TopForEmissions,
# ... etc
)
Development
Running Tests
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest tests/ -v
Regenerating the SDK
When the API changes, regenerate the SDK:
pip install openapi-python-client
./scripts/generate-python.sh
License
MIT
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 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 oro_sdk-1.0.24.tar.gz.
File metadata
- Download URL: oro_sdk-1.0.24.tar.gz
- Upload date:
- Size: 97.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c462d1ce83207a3d219bd39f363c7e3c6a5da4b42377531756c5f3c41b26306
|
|
| MD5 |
148548dbca1be428050b47f02cb96f9e
|
|
| BLAKE2b-256 |
88cc109c020366bd057f1461f27b43ac05db5fe154e008cd467e5e947560e895
|
File details
Details for the file oro_sdk-1.0.24-py3-none-any.whl.
File metadata
- Download URL: oro_sdk-1.0.24-py3-none-any.whl
- Upload date:
- Size: 237.7 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 |
ffad790e587fa01763ed08bbc6305210fafbf680b85c11c37a467f237767d37b
|
|
| MD5 |
7734ded90311b8872c1cd65e26697f9a
|
|
| BLAKE2b-256 |
ade8b7e86950c8a9803f12a1b12f4cb2363f3812e38b301a51f3085dd3f63ea1
|