mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-09 15:07:55 -05:00
* feat(chat-stream): updated workflow id execute route to support streaming via API * enable streaming via api * added only text stream option * cleanup deployed preview componnet * updated selectedOutputIds to selectedOutput * updated TS and Python SDKs with async, rate limits, usage, and streaming API routes * stream non-streaming blocks when streaming is specified * fix(chat-panel): add onBlockComplete handler to chat panel to stream back blocks as they complete * update docs * cleanup * ack PR comments * updated next config * removed getAssetUrl in favor of local assets * resolve merge conflicts * remove extra logic to create sensitive result * simplify internal auth * remove vercel blob from CSP + next config
249 lines
5.8 KiB
Markdown
249 lines
5.8 KiB
Markdown
# Sim SDKs
|
|
|
|
This directory contains the official SDKs for [Sim](https://sim.ai), allowing developers to execute workflows programmatically from their applications.
|
|
|
|
## Available SDKs
|
|
|
|
### Package Installation Commands
|
|
|
|
- **TypeScript/JavaScript**: `npm install simstudio-ts-sdk`
|
|
- **Python**: `pip install simstudio-sdk`
|
|
|
|
### 🟢 TypeScript/JavaScript SDK (`simstudio-ts-sdk`)
|
|
|
|
**Directory:** `ts-sdk/`
|
|
|
|
The TypeScript SDK provides type-safe workflow execution for Node.js and browser environments.
|
|
|
|
**Installation:**
|
|
```bash
|
|
npm install simstudio-ts-sdk
|
|
# or
|
|
yarn add simstudio-ts-sdk
|
|
# or
|
|
bun add simstudio-ts-sdk
|
|
```
|
|
|
|
**Quick Start:**
|
|
```typescript
|
|
import { SimStudioClient } from 'simstudio-ts-sdk';
|
|
|
|
const client = new SimStudioClient({
|
|
apiKey: 'your-api-key-here'
|
|
});
|
|
|
|
const result = await client.executeWorkflow('workflow-id', {
|
|
input: { message: 'Hello, world!' }
|
|
});
|
|
```
|
|
|
|
### 🐍 Python SDK (`simstudio-sdk`)
|
|
|
|
**Directory:** `python-sdk/`
|
|
|
|
The Python SDK provides Pythonic workflow execution with comprehensive error handling and data classes.
|
|
|
|
**Installation:**
|
|
```bash
|
|
pip install simstudio-sdk
|
|
```
|
|
|
|
**Quick Start:**
|
|
```python
|
|
from simstudio import SimStudioClient
|
|
|
|
client = SimStudioClient(api_key='your-api-key-here')
|
|
|
|
result = client.execute_workflow('workflow-id',
|
|
input_data={'message': 'Hello, world!'})
|
|
```
|
|
|
|
## Core Features
|
|
|
|
Both SDKs provide the same core functionality:
|
|
|
|
✅ **Workflow Execution** - Execute deployed workflows with optional input data
|
|
✅ **Status Checking** - Check deployment status and workflow readiness
|
|
✅ **Error Handling** - Comprehensive error handling with specific error codes
|
|
✅ **Timeout Support** - Configurable timeouts for workflow execution
|
|
✅ **Input Validation** - Validate workflows before execution
|
|
✅ **Type Safety** - Full type definitions (TypeScript) and data classes (Python)
|
|
|
|
## API Compatibility
|
|
|
|
Both SDKs are built on top of the same REST API endpoints:
|
|
|
|
- `POST /api/workflows/{id}/execute` - Execute workflow (with or without input)
|
|
- `GET /api/workflows/{id}/status` - Get workflow status
|
|
|
|
## Authentication
|
|
|
|
Both SDKs use API key authentication via the `X-API-Key` header. You can obtain an API key by:
|
|
|
|
1. Logging in to your [Sim](https://sim.ai) account
|
|
2. Navigating to your workflow
|
|
3. Clicking "Deploy" to deploy your workflow
|
|
4. Creating or selecting an API key during deployment
|
|
|
|
## Environment Variables
|
|
|
|
Both SDKs support environment variable configuration:
|
|
|
|
```bash
|
|
# Required
|
|
SIM_API_KEY=your-api-key-here
|
|
|
|
# Optional
|
|
SIM_BASE_URL=https://sim.ai # or your custom domain
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
Both SDKs provide consistent error handling with these error codes:
|
|
|
|
| Code | Description |
|
|
|------|-------------|
|
|
| `UNAUTHORIZED` | Invalid API key |
|
|
| `TIMEOUT` | Request timed out |
|
|
| `USAGE_LIMIT_EXCEEDED` | Account usage limit exceeded |
|
|
| `INVALID_JSON` | Invalid JSON in request body |
|
|
| `EXECUTION_ERROR` | General execution error |
|
|
| `STATUS_ERROR` | Error getting workflow status |
|
|
|
|
## Examples
|
|
|
|
### TypeScript Example
|
|
|
|
```typescript
|
|
import { SimStudioClient, SimStudioError } from 'simstudio-ts-sdk';
|
|
|
|
const client = new SimStudioClient({
|
|
apiKey: process.env.SIM_API_KEY!
|
|
});
|
|
|
|
try {
|
|
// Check if workflow is ready
|
|
const isReady = await client.validateWorkflow('workflow-id');
|
|
if (!isReady) {
|
|
throw new Error('Workflow not deployed');
|
|
}
|
|
|
|
// Execute workflow
|
|
const result = await client.executeWorkflow('workflow-id', {
|
|
input: { data: 'example' },
|
|
timeout: 30000
|
|
});
|
|
|
|
if (result.success) {
|
|
console.log('Output:', result.output);
|
|
}
|
|
} catch (error) {
|
|
if (error instanceof SimStudioError) {
|
|
console.error(`Error ${error.code}: ${error.message}`);
|
|
}
|
|
}
|
|
```
|
|
|
|
### Python Example
|
|
|
|
```python
|
|
from simstudio import SimStudioClient, SimStudioError
|
|
import os
|
|
|
|
client = SimStudioClient(api_key=os.getenv('SIM_API_KEY'))
|
|
|
|
try:
|
|
# Check if workflow is ready
|
|
is_ready = client.validate_workflow('workflow-id')
|
|
if not is_ready:
|
|
raise Exception('Workflow not deployed')
|
|
|
|
# Execute workflow
|
|
result = client.execute_workflow('workflow-id',
|
|
input_data={'data': 'example'},
|
|
timeout=30.0)
|
|
|
|
if result.success:
|
|
print(f'Output: {result.output}')
|
|
|
|
except SimStudioError as error:
|
|
print(f'Error {error.code}: {error}')
|
|
```
|
|
|
|
## Development
|
|
|
|
### Building the SDKs
|
|
|
|
**TypeScript SDK:**
|
|
```bash
|
|
cd packages/ts-sdk
|
|
bun install
|
|
bun run build
|
|
```
|
|
|
|
**Python SDK:**
|
|
```bash
|
|
cd packages/python-sdk
|
|
pip install -e ".[dev]"
|
|
python -m build
|
|
```
|
|
|
|
### Running Examples
|
|
|
|
**TypeScript:**
|
|
```bash
|
|
cd packages/ts-sdk
|
|
SIM_API_KEY=your-key bun run examples/basic-usage.ts
|
|
```
|
|
|
|
**Python:**
|
|
```bash
|
|
cd packages/python-sdk
|
|
SIM_API_KEY=your-key python examples/basic_usage.py
|
|
```
|
|
|
|
### Testing
|
|
|
|
**TypeScript:**
|
|
```bash
|
|
cd packages/ts-sdk
|
|
bun run test
|
|
```
|
|
|
|
**Python:**
|
|
```bash
|
|
cd packages/python-sdk
|
|
pytest
|
|
```
|
|
|
|
## Publishing
|
|
|
|
The SDKs are automatically published to npm and PyPI when changes are pushed to the main branch. See [Publishing Setup](../.github/PUBLISHING.md) for details on:
|
|
|
|
- Setting up GitHub secrets for automated publishing
|
|
- Manual publishing instructions
|
|
- Version management and semantic versioning
|
|
- Troubleshooting common issues
|
|
|
|
## Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
3. Make your changes
|
|
4. Add tests for your changes
|
|
5. Run the test suite: `bun run test` (TypeScript) or `pytest` (Python)
|
|
6. Update version numbers if needed
|
|
7. Commit your changes: `git commit -m 'Add amazing feature'`
|
|
8. Push to the branch: `git push origin feature/amazing-feature`
|
|
9. Open a Pull Request
|
|
|
|
## License
|
|
|
|
Both SDKs are licensed under the Apache-2.0 License. See the [LICENSE](../LICENSE) file for details.
|
|
|
|
## Support
|
|
|
|
- 📖 [Documentation](https://docs.sim.ai)
|
|
- 💬 [Discord Community](https://discord.gg/simstudio)
|
|
- 🐛 [Issue Tracker](https://github.com/simstudioai/sim/issues)
|
|
- 📧 [Email Support](mailto:support@sim.ai) |