Python SDK
Simの公式Python SDKを使用すると、公式Python SDKを使用してPythonアプリケーションからプログラムでワークフローを実行できます。
Python SDKはPython 3.8以上をサポートし、同期的なワークフロー実行を提供します。現在、すべてのワークフロー実行は同期的です。
インストール
pipを使用してSDKをインストールします:
pip install simstudio-sdk
クイックスタート
以下は、始めるための簡単な例です:
from simstudio import SimStudioClient
# Initialize the client
client = SimStudioClient(
api_key="your-api-key-here",
base_url="https://sim.ai" # optional, defaults to https://sim.ai
)
# Execute a workflow
try:
result = client.execute_workflow("workflow-id")
print("Workflow executed successfully:", result)
except Exception as error:
print("Workflow execution failed:", error)
APIリファレンス
SimStudioClient
コンストラクタ
SimStudioClient(api_key: str, base_url: str = "https://sim.ai")
パラメータ:
api_key
(str): SimのAPIキーbase_url
(str, オプション): Sim APIのベースURL
メソッド
execute_workflow()
オプションの入力データでワークフローを実行します。
result = client.execute_workflow(
"workflow-id",
input_data={"message": "Hello, world!"},
timeout=30.0 # 30 seconds
)
パラメータ:
workflow_id
(str): 実行するワークフローのIDinput_data
(dict, オプション): ワークフローに渡す入力データtimeout
(float, オプション): タイムアウト(秒)(デフォルト:30.0)
戻り値: WorkflowExecutionResult
get_workflow_status()
ワークフローのステータス(デプロイメントステータスなど)を取得します。
status = client.get_workflow_status("workflow-id")
print("Is deployed:", status.is_deployed)
パラメータ:
workflow_id
(str): ワークフローのID
戻り値: WorkflowStatus
validate_workflow()
ワークフローが実行準備ができているかを検証します。
is_ready = client.validate_workflow("workflow-id")
if is_ready:
# Workflow is deployed and ready
pass
パラメータ:
workflow_id
(str): ワークフローのID
戻り値: bool
execute_workflow_sync()
現在、このメソッドは execute_workflow()
と同一です。すべての実行は同期的に行われるためです。このメソッドは、将来的に非同期実行が追加された際の互換性のために提供されています。
ワークフローを実行します(現在は同期的、execute_workflow()
と同じ)。
result = client.execute_workflow_sync(
"workflow-id",
input_data={"data": "some input"},
timeout=60.0
)
パラメータ:
workflow_id
(str): 実行するワークフローのIDinput_data
(dict, optional): ワークフローに渡す入力データtimeout
(float): 初期リクエストのタイムアウト(秒)
戻り値: WorkflowExecutionResult
set_api_key()
APIキーを更新します。
client.set_api_key("new-api-key")
set_base_url()
ベースURLを更新します。
client.set_base_url("https://my-custom-domain.com")
close()
基盤となるHTTPセッションを閉じます。
client.close()
データクラス
WorkflowExecutionResult
@dataclass
class WorkflowExecutionResult:
success: bool
output: Optional[Any] = None
error: Optional[str] = None
logs: Optional[List[Any]] = None
metadata: Optional[Dict[str, Any]] = None
trace_spans: Optional[List[Any]] = None
total_duration: Optional[float] = None
WorkflowStatus
@dataclass
class WorkflowStatus:
is_deployed: bool
deployed_at: Optional[str] = None
is_published: bool = False
needs_redeployment: bool = False
SimStudioError
class SimStudioError(Exception):
def __init__(self, message: str, code: Optional[str] = None, status: Optional[int] = None):
super().__init__(message)
self.code = code
self.status = status
例
基本的なワークフロー実行
APIキーを使用してSimStudioClientをセットアップします。
ワークフローがデプロイされ、実行準備ができているか確認します。
入力データでワークフローを実行します。
実行結果を処理し、エラーがあれば対処します。
import os
from simstudio import SimStudioClient
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
def run_workflow():
try:
# Check if workflow is ready
is_ready = client.validate_workflow("my-workflow-id")
if not is_ready:
raise Exception("Workflow is not deployed or ready")
# Execute the workflow
result = client.execute_workflow(
"my-workflow-id",
input_data={
"message": "Process this data",
"user_id": "12345"
}
)
if result.success:
print("Output:", result.output)
print("Duration:", result.metadata.get("duration") if result.metadata else None)
else:
print("Workflow failed:", result.error)
except Exception as error:
print("Error:", error)
run_workflow()
エラー処理
ワークフロー実行中に発生する可能性のある様々なタイプのエラーを処理します:
from simstudio import SimStudioClient, SimStudioError
import os
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
def execute_with_error_handling():
try:
result = client.execute_workflow("workflow-id")
return result
except SimStudioError as error:
if error.code == "UNAUTHORIZED":
print("Invalid API key")
elif error.code == "TIMEOUT":
print("Workflow execution timed out")
elif error.code == "USAGE_LIMIT_EXCEEDED":
print("Usage limit exceeded")
elif error.code == "INVALID_JSON":
print("Invalid JSON in request body")
else:
print(f"Workflow error: {error}")
raise
except Exception as error:
print(f"Unexpected error: {error}")
raise
コンテキストマネージャーの使用
リソースのクリーンアップを自動的に処理するためにコンテキストマネージャーとしてクライアントを使用します:
from simstudio import SimStudioClient
import os
# Using context manager to automatically close the session
with SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY")) as client:
result = client.execute_workflow("workflow-id")
print("Result:", result)
# Session is automatically closed here
バッチワークフロー実行
複数のワークフローを効率的に実行します:
from simstudio import SimStudioClient
import os
client = SimStudioClient(api_key=os.getenv("SIMSTUDIO_API_KEY"))
def execute_workflows_batch(workflow_data_pairs):
"""Execute multiple workflows with different input data."""
results = []
for workflow_id, input_data in workflow_data_pairs:
try:
# Validate workflow before execution
if not client.validate_workflow(workflow_id):
print(f"Skipping {workflow_id}: not deployed")
continue
result = client.execute_workflow(workflow_id, input_data)
results.append({
"workflow_id": workflow_id,
"success": result.success,
"output": result.output,
"error": result.error
})
except Exception as error:
results.append({
"workflow_id": workflow_id,
"success": False,
"error": str(error)
})
return results
# Example usage
workflows = [
("workflow-1", {"type": "analysis", "data": "sample1"}),
("workflow-2", {"type": "processing", "data": "sample2"}),
]
results = execute_workflows_batch(workflows)
for result in results:
print(f"Workflow {result['workflow_id']}: {'Success' if result['success'] else 'Failed'}")
環境設定
環境変数を使用してクライアントを設定します:
import os
from simstudio import SimStudioClient
# Development configuration
client = SimStudioClient(
api_key=os.getenv("SIMSTUDIO_API_KEY"),
base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai")
)
import os
from simstudio import SimStudioClient
# Production configuration with error handling
api_key = os.getenv("SIMSTUDIO_API_KEY")
if not api_key:
raise ValueError("SIMSTUDIO_API_KEY environment variable is required")
client = SimStudioClient(
api_key=api_key,
base_url=os.getenv("SIMSTUDIO_BASE_URL", "https://sim.ai")
)
APIキーの取得方法
Simに移動してアカウントにログインします。
プログラムで実行したいワークフローに移動します。
まだデプロイされていない場合は、「デプロイ」をクリックしてワークフローをデプロイします。
デプロイプロセス中に、APIキーを選択または作成します。
Pythonアプリケーションで使用するAPIキーをコピーします。
APIキーを安全に保管し、決してバージョン管理にコミットしないでください。環境変数や安全な設定管理を使用してください。
要件
- Python 3.8+
- requests >= 2.25.0
ライセンス
Apache-2.0