Python SDK は Python 3.9+ が必要です。
インストール
クイックスタート
from avala import Client
client = Client(api_key="your-api-key")
# List all datasets
datasets = client.datasets.list()
for dataset in datasets:
print(dataset.name, dataset.uid)
アカウントの作成
signup 関数は新しい Avala アカウントを作成し、API キーを返します。認証は不要です。
from avala import signup
result = signup(
email="dev@acme.com",
password="SecurePass123!",
first_name="Jane", # optional
last_name="Doe", # optional
)
print(f"User: {result.user.email}")
print(f"API Key: {result.api_key}")
非同期バリアントも利用可能です:
from avala import async_signup
result = await async_signup(email="dev@acme.com", password="SecurePass123!")
SDK は、すべてのリクエストで X-Avala-Api-Key ヘッダーを通じて送信される Avala API キーを使用して認証します。
キーを直接渡すか、SDK に環境変数から読み取らせることができます。
オプション 1: キーを直接渡す
from avala import Client
client = Client(api_key="your-api-key")
オプション 2: 環境変数を使用する
export AVALA_API_KEY="your-api-key"
from avala import Client
# 環境変数から AVALA_API_KEY を自動的に読み取ります
client = Client()
非同期サポート
SDK は httpx 上に構築された完全な非同期クライアントを提供します。非同期アプリケーションでのノンブロッキング I/O には AsyncClient を使用してください。
import asyncio
from avala import AsyncClient
async def main():
client = AsyncClient(api_key="your-api-key")
datasets = await client.datasets.list()
for dataset in datasets:
print(dataset.name)
# 完了したら必ずクライアントを閉じるか、コンテキストマネージャーを使用してください
await client.close()
asyncio.run(main())
非同期コンテキストマネージャーの使用:
import asyncio
from avala import AsyncClient
async def main():
async with AsyncClient() as client:
datasets = await client.datasets.list()
for dataset in datasets:
print(dataset.name)
asyncio.run(main())
データセットの操作
Python SDK は現在データセットに対して読み取り専用です — 一覧表示、取得、アイテムの閲覧は可能ですが、作成や削除はできません。アップロードやミューテーションには REST API を使用してください。
データセットの一覧表示
datasets = client.datasets.list()
for dataset in datasets:
print(f"{dataset.name} ({dataset.uid})")
print(f" Items: {dataset.item_count}")
print(f" Created: {dataset.created_at}")
データセットの取得
dataset = client.datasets.get("550e8400-e29b-41d4-a716-446655440000")
print(dataset.name)
print(dataset.slug)
print(dataset.item_count)
プロジェクトの操作
プロジェクトの一覧表示
projects = client.projects.list()
for project in projects:
print(f"{project.name} ({project.uid})")
print(f" Status: {project.status}")
print(f" Created: {project.created_at}")
プロジェクトの取得
project = client.projects.get("770a9600-a40d-63f6-c938-668877660000")
print(project.name)
print(project.status)
タスクの操作
タスクの一覧表示
tasks = client.tasks.list(project="770a9600-a40d-63f6-c938-668877660000", status="pending")
for task in tasks:
print(f"{task.uid} — {task.name} ({task.status})")
タスクの取得
task = client.tasks.get("990c1800-b62f-85a8-e150-880099880000")
print(task.name)
print(task.status)
エクスポートの操作
Python SDK は、エージェント、ウェブフック、ストレージ設定、推論プロバイダー、品質ターゲット、コンセンサス設定、組織に対する完全な CRUD 操作をサポートしています。データセットとプロジェクトは現在読み取り専用です — これらのリソースのミューテーションには REST API を使用してください。
エクスポートの作成
export = client.exports.create(project="770a9600-a40d-63f6-c938-668877660000")
print(f"Export started: {export.uid}")
print(f"Status: {export.status}")
完了のポーリング
import time
export = client.exports.create(project="770a9600-a40d-63f6-c938-668877660000")
while export.status != "completed":
time.sleep(2)
export = client.exports.get(export.uid)
print(f"Status: {export.status}")
print(f"Download: {export.download_url}")
組織の操作
組織の一覧表示
orgs = client.organizations.list()
for org in orgs:
print(f"{org.name} ({org.slug})")
組織の作成
org = client.organizations.create(name="My Team", visibility="private", industry="technology")
print(f"Created: {org.name} ({org.uid})")
メンバーの管理
members = client.organizations.list_members("my-team")
for member in members:
print(f"{member.full_name} - {member.role}")
スライスの操作
スライスの一覧表示
slices = client.slices.list("my-org")
for s in slices:
print(f"{s.name}: {s.item_count} items")
データセットアイテムの閲覧
データセット内のアイテム一覧
items = client.datasets.list_items("my-org", "my-dataset")
for item in items:
print(f"{item.uid}: {item.key}")
シーケンスの一覧
sequences = client.datasets.list_sequences("my-org", "my-dataset")
for seq in sequences:
print(f"{seq.uid}: {seq.key} ({seq.number_of_frames} frames)")
型ヒント
SDK は完全に型付けされています。すべてのレスポンスオブジェクトは完全な型アノテーション付きの Pydantic モデルであり、自動補完と型チェックをそのまま利用できます。
from avala.types import Dataset, Project, Export, Task
def process_dataset(dataset: Dataset) -> None:
print(dataset.name) # str
print(dataset.uid) # str
print(dataset.item_count) # int
print(dataset.created_at) # Optional[datetime]
def process_task(task: Task) -> None:
print(task.uid) # str
print(task.name) # Optional[str]
print(task.status) # Optional[str]
print(task.project) # Optional[str]
エラーハンドリング
SDK は型付き例外をスローするため、異なるエラーモードを正確に処理できます。
from avala import Client
from avala.errors import (
AvalaError,
NotFoundError,
RateLimitError,
ValidationError,
)
client = Client()
try:
dataset = client.datasets.get("nonexistent")
except NotFoundError as e:
print(f"Dataset not found: {e.message}")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after} seconds.")
except ValidationError as e:
print(f"Invalid request: {e.message}")
for detail in e.details:
print(f" - {detail}")
except AvalaError as e:
# Catch-all for any other Avala API error
print(f"API error ({e.status_code}): {e.message}")
| 例外 | 説明 |
|---|
AvalaError | すべての Avala API エラーの基底例外。 |
AuthenticationError | 無効または不足している API キー(HTTP 401)。 |
NotFoundError | リクエストされたリソースが存在しない(HTTP 404)。 |
RateLimitError | API レート制限を超過(HTTP 429)。retry_after 属性を含みます。 |
ValidationError | リクエストペイロードのバリデーション失敗(HTTP 400/422)。フィールドレベルエラーの details 属性を含みます。 |
ServerError | サーバーが内部エラーを返した(HTTP 5xx)。 |
ページネーション
リストメソッドは CursorPage オブジェクトを返します。アイテムを直接イテレートするか、ページネーションを手動で制御できます。
# 現在のページのアイテムをイテレート
for dataset in client.datasets.list():
print(dataset.name)
# 手動ページネーション — ページサイズの制御とカーソルへのアクセス
page = client.datasets.list(limit=10)
for dataset in page.items:
print(dataset.name)
# 次のページを取得
if page.has_more:
next_page = client.datasets.list(limit=10, cursor=page.next_cursor)
フリート管理
フリート管理はプレビュー版です。ここで説明する API は変更される可能性があります。
fleet ネームスペースは、デバイスレジストリ、レコーディング、イベント、ルール、アラートへのアクセスを提供します。
# List online devices
devices = client.fleet.devices.list(status="online")
# Create a timeline event on a recording
event = client.fleet.events.create(
recording_id="rec_abc123",
timestamp="2026-01-15T10:30:00Z",
type="anomaly",
label="Gripper force spike",
metadata={"force_n": 45.2}
)
# Create a recording rule
rule = client.fleet.rules.create(
name="High Latency Alert",
condition={"type": "threshold", "topic": "/diagnostics/latency", "field": "data.value", "operator": "gt", "value": 100},
actions=[{"type": "tag", "value": "high-latency"}, {"type": "notify", "channel_id": "ch_your_channel_id"}]
)
完全な例については フリートダッシュボードガイドをご覧ください。
初期化時にクライアントの動作をカスタマイズできます。
from avala import Client
client = Client(
api_key="your-api-key",
base_url="https://api.avala.ai/api/v1", # Default
timeout=60, # Request timeout in seconds (default: 30)
max_retries=3, # Number of retries on transient errors (default: 2)
)
| パラメータ | 型 | デフォルト | 説明 |
|---|
api_key | str | AVALA_API_KEY 環境変数 | Avala API キー。 |
base_url | str | https://api.avala.ai/api/v1 | API ベース URL。 |
timeout | float | 30 | リクエストタイムアウト(秒)。 |
max_retries | int | 2 | 一時的なエラー(5xx、タイムアウト)での自動リトライ回数。 |