d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
260 lines
8.3 KiB
Python
260 lines
8.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Basic usage examples for the Sim Python SDK
|
|
"""
|
|
|
|
import os
|
|
from simstudio import SimStudioClient, SimStudioError
|
|
|
|
|
|
def basic_example():
|
|
"""Example 1: Basic workflow execution"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
try:
|
|
# Execute a workflow without input
|
|
result = client.execute_workflow("your-workflow-id")
|
|
|
|
if result.success:
|
|
print("✅ Workflow executed successfully!")
|
|
print(f"Output: {result.output}")
|
|
if result.metadata:
|
|
print(f"Duration: {result.metadata.get('duration')} ms")
|
|
else:
|
|
print(f"❌ Workflow failed: {result.error}")
|
|
|
|
except SimStudioError as error:
|
|
print(f"SDK Error: {error} (Code: {error.code})")
|
|
except Exception as error:
|
|
print(f"Unexpected error: {error}")
|
|
|
|
|
|
def with_input_example():
|
|
"""Example 2: Workflow execution with input data"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
try:
|
|
result = client.execute_workflow(
|
|
"your-workflow-id",
|
|
input_data={
|
|
"message": "Hello from Python SDK!",
|
|
"user_id": "12345",
|
|
"data": {
|
|
"type": "analysis",
|
|
"parameters": {
|
|
"include_metadata": True,
|
|
"format": "json"
|
|
}
|
|
}
|
|
},
|
|
timeout=60.0 # 60 seconds
|
|
)
|
|
|
|
if result.success:
|
|
print("✅ Workflow executed successfully!")
|
|
print(f"Output: {result.output}")
|
|
if result.metadata:
|
|
print(f"Duration: {result.metadata.get('duration')} ms")
|
|
else:
|
|
print(f"❌ Workflow failed: {result.error}")
|
|
|
|
except SimStudioError as error:
|
|
print(f"SDK Error: {error} (Code: {error.code})")
|
|
except Exception as error:
|
|
print(f"Unexpected error: {error}")
|
|
|
|
|
|
def status_example():
|
|
"""Example 3: Workflow validation and status checking"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
try:
|
|
# Check if workflow is ready
|
|
is_ready = client.validate_workflow("your-workflow-id")
|
|
print(f"Workflow ready: {is_ready}")
|
|
|
|
# Get detailed status
|
|
status = client.get_workflow_status("your-workflow-id")
|
|
print(f"Status: {{\n"
|
|
f" deployed: {status.is_deployed},\n"
|
|
f" needs_redeployment: {status.needs_redeployment},\n"
|
|
f" deployed_at: {status.deployed_at}\n"
|
|
f"}}")
|
|
|
|
if status.is_deployed:
|
|
# Execute the workflow
|
|
result = client.execute_workflow("your-workflow-id")
|
|
print(f"Result: {result}")
|
|
|
|
except Exception as error:
|
|
print(f"Error: {error}")
|
|
|
|
|
|
def context_manager_example():
|
|
"""Example 4: Using context manager"""
|
|
with SimStudioClient(api_key=os.getenv("SIM_API_KEY")) as client:
|
|
try:
|
|
result = client.execute_workflow("your-workflow-id")
|
|
print(f"Result: {result}")
|
|
except Exception as error:
|
|
print(f"Error: {error}")
|
|
# Session is automatically closed here
|
|
|
|
|
|
def batch_execution_example():
|
|
"""Example 5: Batch workflow execution"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
workflows = [
|
|
("workflow-1", {"type": "analysis", "data": "sample1"}),
|
|
("workflow-2", {"type": "processing", "data": "sample2"}),
|
|
("workflow-3", {"type": "validation", "data": "sample3"}),
|
|
]
|
|
|
|
results = []
|
|
|
|
for workflow_id, input_data in workflows:
|
|
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
|
|
})
|
|
|
|
status = "✅ Success" if result.success else "❌ Failed"
|
|
print(f"{status}: {workflow_id}")
|
|
|
|
except SimStudioError as error:
|
|
results.append({
|
|
"workflow_id": workflow_id,
|
|
"success": False,
|
|
"error": str(error)
|
|
})
|
|
print(f"❌ SDK Error in {workflow_id}: {error}")
|
|
except Exception as error:
|
|
results.append({
|
|
"workflow_id": workflow_id,
|
|
"success": False,
|
|
"error": str(error)
|
|
})
|
|
print(f"❌ Unexpected error in {workflow_id}: {error}")
|
|
|
|
# Summary
|
|
successful = sum(1 for r in results if r["success"])
|
|
total = len(results)
|
|
print(f"\n📊 Summary: {successful}/{total} workflows completed successfully")
|
|
|
|
return results
|
|
|
|
|
|
def streaming_example():
|
|
"""Example 6: Workflow execution with streaming"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
try:
|
|
result = client.execute_workflow(
|
|
"your-workflow-id",
|
|
input_data={"message": "Count to five"},
|
|
stream=True,
|
|
selected_outputs=["agent1.content"], # Use blockName.attribute format
|
|
timeout=60.0
|
|
)
|
|
|
|
if result.success:
|
|
print("✅ Workflow executed successfully!")
|
|
print(f"Output: {result.output}")
|
|
if result.metadata:
|
|
print(f"Duration: {result.metadata.get('duration')} ms")
|
|
else:
|
|
print(f"❌ Workflow failed: {result.error}")
|
|
|
|
except SimStudioError as error:
|
|
print(f"SDK Error: {error} (Code: {error.code})")
|
|
except Exception as error:
|
|
print(f"Unexpected error: {error}")
|
|
|
|
|
|
def error_handling_example():
|
|
"""Example 7: Comprehensive error handling"""
|
|
client = SimStudioClient(api_key=os.getenv("SIM_API_KEY"))
|
|
|
|
try:
|
|
result = client.execute_workflow("your-workflow-id")
|
|
|
|
if result.success:
|
|
print("✅ Workflow executed successfully!")
|
|
print(f"Output: {result.output}")
|
|
return result
|
|
else:
|
|
print(f"❌ Workflow failed: {result.error}")
|
|
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")
|
|
elif error.status == 404:
|
|
print("🔍 Workflow not found")
|
|
elif error.status == 403:
|
|
print("🚫 Workflow is not deployed")
|
|
else:
|
|
print(f"⚠️ Workflow error: {error}")
|
|
raise
|
|
except Exception as error:
|
|
print(f"💥 Unexpected error: {error}")
|
|
raise
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print("🚀 Running Sim Python SDK Examples\n")
|
|
|
|
# Check if API key is set
|
|
if not os.getenv("SIM_API_KEY"):
|
|
print("❌ Please set SIM_API_KEY environment variable")
|
|
exit(1)
|
|
|
|
try:
|
|
print("1️⃣ Basic Example:")
|
|
basic_example()
|
|
print("\n✅ Basic example completed\n")
|
|
|
|
print("2️⃣ Input Example:")
|
|
with_input_example()
|
|
print("\n✅ Input example completed\n")
|
|
|
|
print("3️⃣ Status Example:")
|
|
status_example()
|
|
print("\n✅ Status example completed\n")
|
|
|
|
print("4️⃣ Context Manager Example:")
|
|
context_manager_example()
|
|
print("\n✅ Context manager example completed\n")
|
|
|
|
print("5️⃣ Batch Execution Example:")
|
|
batch_execution_example()
|
|
print("\n✅ Batch execution example completed\n")
|
|
|
|
print("6️⃣ Streaming Example:")
|
|
streaming_example()
|
|
print("\n✅ Streaming example completed\n")
|
|
|
|
print("7️⃣ Error Handling Example:")
|
|
error_handling_example()
|
|
print("\n✅ Error handling example completed\n")
|
|
|
|
except Exception as e:
|
|
print(f"\n💥 Example failed: {e}")
|
|
exit(1)
|
|
|
|
print("🎉 All examples completed successfully!") |