mirror of
https://github.com/skills-shell/superpowers.git
synced 2026-09-18 09:07:07 +08:00
d91c4376f2
Restructure the repository for better organization: - tools/ - App & model running skills - image/ (ai-image-generation, flux-image, nano-banana, qwen-image-2, etc.) - video/ (ai-video-generation, google-veo, ai-avatar-video, etc.) - audio/ (text-to-speech, speech-to-text, ai-music-generation, etc.) - llm/ (llm-models, web-search, ai-rag-pipeline) - social/ (twitter-automation) - utilities/ (agentic-browser, python-executor, related-skill) - agent-tools/ - sdk/ - SDK documentation - javascript-sdk/ - python-sdk/ - ui/ - UI components - agent-ui, chat-ui, tools-ui, widgets-ui - guides/ - How-to guides & workflows - content/, design/, photo/, product/ - prompting/, social/, video/, writing/ Update README to reflect new structure.
6.9 KiB
6.9 KiB
Sessions Reference
Stateful execution with warm workers.
What Are Sessions?
Sessions keep workers warm between requests, enabling:
- Faster execution - No cold start on subsequent calls
- Shared state - Maintain context, loaded models, cached data
- Cost efficiency - Reuse initialized resources
Creating a Session
from inferencesh import inference
client = inference(api_key="inf_...")
# Start new session
result = client.run({
"app": "my-app",
"input": {"action": "initialize"},
"session": "new"
})
session_id = result["session_id"]
print(f"Session: {session_id}")
Using an Existing Session
# Continue in same session
result = client.run({
"app": "my-app",
"input": {"action": "process", "data": "..."},
"session": session_id
})
Session Timeout
Set how long idle sessions stay alive (1-3600 seconds):
# 5-minute timeout
result = client.run({
"app": "my-app",
"input": {"action": "init"},
"session": "new",
"session_timeout": 300
})
Session Lifecycle
1. Create session (session: "new")
↓
2. Worker starts, initializes app
↓
3. Subsequent calls reuse worker (session: session_id)
↓
4. Idle timeout reached or explicit close
↓
5. Worker terminates
Use Cases
Model Loading
Load a model once, use it multiple times:
# Initial load (slow)
result = client.run({
"app": "ml-inference",
"input": {"action": "load_model", "model": "large-model-v2"},
"session": "new",
"session_timeout": 600
})
session_id = result["session_id"]
# Fast inference calls
for item in data_batch:
result = client.run({
"app": "ml-inference",
"input": {"action": "predict", "data": item},
"session": session_id
})
print(result["output"])
Browser Automation
Keep browser open across multiple actions:
# Start browser session
result = client.run({
"app": "browser-automation",
"input": {"action": "start", "url": "https://example.com"},
"session": "new",
"session_timeout": 300
})
session_id = result["session_id"]
# Navigate
client.run({
"app": "browser-automation",
"input": {"action": "click", "selector": "#login-btn"},
"session": session_id
})
# Fill form
client.run({
"app": "browser-automation",
"input": {"action": "type", "selector": "#username", "text": "user@example.com"},
"session": session_id
})
# Take screenshot
result = client.run({
"app": "browser-automation",
"input": {"action": "screenshot"},
"session": session_id
})
Stateful Conversations
# Initialize chat context
result = client.run({
"app": "chat-with-memory",
"input": {"action": "init", "system": "You are a helpful assistant."},
"session": "new",
"session_timeout": 1800 # 30 minutes
})
session_id = result["session_id"]
# Multi-turn conversation
messages = [
"What is quantum computing?",
"Can you give me a simple example?",
"How is it different from classical computing?"
]
for msg in messages:
result = client.run({
"app": "chat-with-memory",
"input": {"message": msg},
"session": session_id
})
print(f"Assistant: {result['output']['response']}")
Data Processing Pipeline
# Load data once
result = client.run({
"app": "data-processor",
"input": {"action": "load", "dataset": "large_dataset.parquet"},
"session": "new",
"session_timeout": 900
})
session_id = result["session_id"]
# Run multiple analyses
analyses = ["summary", "correlations", "outliers", "trends"]
for analysis in analyses:
result = client.run({
"app": "data-processor",
"input": {"action": "analyze", "type": analysis},
"session": session_id
})
print(f"{analysis}: {result['output']}")
Session Management
Check Session Status
# Sessions are implicitly active when used
# If session expired, you'll get an error
try:
result = client.run({
"app": "my-app",
"input": {"action": "check"},
"session": session_id
})
except Exception as e:
if "session not found" in str(e).lower():
print("Session expired, creating new one")
# Create new session
Explicit Session Close
# Close session to free resources
client.run({
"app": "my-app",
"input": {"action": "cleanup"},
"session": session_id
})
# Session will terminate after this call
Session Recovery Pattern
class SessionManager:
def __init__(self, client, app, timeout=300):
self.client = client
self.app = app
self.timeout = timeout
self.session_id = None
def ensure_session(self):
if self.session_id is None:
result = self.client.run({
"app": self.app,
"input": {"action": "init"},
"session": "new",
"session_timeout": self.timeout
})
self.session_id = result["session_id"]
return self.session_id
def run(self, input_data):
try:
return self.client.run({
"app": self.app,
"input": input_data,
"session": self.ensure_session()
})
except Exception as e:
if "session" in str(e).lower():
# Session expired, create new one
self.session_id = None
return self.client.run({
"app": self.app,
"input": input_data,
"session": self.ensure_session()
})
raise
# Usage
manager = SessionManager(client, "my-app", timeout=600)
result = manager.run({"action": "process", "data": "..."})
Async Sessions
from inferencesh import async_inference
import asyncio
async def session_workflow():
client = async_inference(api_key="inf_...")
# Create session
result = await client.run({
"app": "my-app",
"input": {"action": "init"},
"session": "new",
"session_timeout": 300
})
session_id = result["session_id"]
# Run operations
tasks = [
client.run({
"app": "my-app",
"input": {"action": "process", "id": i},
"session": session_id
})
for i in range(10)
]
# Note: These run sequentially on the same worker
results = []
for task in tasks:
results.append(await task)
return results
asyncio.run(session_workflow())
Best Practices
- Set appropriate timeouts - Balance between keeping workers warm and resource usage
- Handle session expiry - Always catch and handle session not found errors
- Clean up when done - Close sessions explicitly if you know you're finished
- Don't over-parallelize - Session requests go to the same worker sequentially
- Monitor costs - Long-running sessions incur ongoing charges