mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-08 22:48:14 -05:00
* fix(billing): should allow restoring subscription (#1728) * fix(already-cancelled-sub): UI should allow restoring subscription * restore functionality fixed * fix * improvement(api-keys): move to workspace level * remove migration to prep merge * remove two more unused cols * prep staging merge * add migration back --------- Co-authored-by: Waleed <walif6@gmail.com> Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com>
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!") |