mirror of
https://github.com/simstudioai/sim.git
synced 2026-04-28 03:00:29 -04:00
* improvement(docs): updated script to copy over icons, cleanup unnecessary pages * updated script with auto-icon generation * ignore translations, only icons changed * updated images * updated i18n.lock * updated images
190 lines
5.3 KiB
Plaintext
190 lines
5.3 KiB
Plaintext
---
|
|
title: Parallel
|
|
---
|
|
|
|
import { Callout } from 'fumadocs-ui/components/callout'
|
|
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
|
|
import { Image } from '@/components/ui/image'
|
|
|
|
The Parallel block is a container that executes multiple instances concurrently for faster workflow processing. Process items simultaneously instead of sequentially.
|
|
|
|
<Callout type="info">
|
|
Parallel blocks are container nodes that execute their contents multiple times simultaneously, unlike loops which execute sequentially.
|
|
</Callout>
|
|
|
|
## Configuration Options
|
|
|
|
### Parallel Type
|
|
|
|
Choose between two types of parallel execution:
|
|
|
|
<Tabs items={['Count-based', 'Collection-based']}>
|
|
<Tab>
|
|
**Count-based Parallel** - Execute a fixed number of parallel instances:
|
|
|
|
<div className="flex justify-center">
|
|
<Image
|
|
src="/static/blocks/parallel-1.png"
|
|
alt="Count-based parallel execution"
|
|
width={500}
|
|
height={400}
|
|
className="my-6"
|
|
/>
|
|
</div>
|
|
|
|
Use this when you need to run the same operation multiple times concurrently.
|
|
|
|
```
|
|
Example: Run 5 parallel instances
|
|
- Instance 1 ┐
|
|
- Instance 2 ├─ All execute simultaneously
|
|
- Instance 3 │
|
|
- Instance 4 │
|
|
- Instance 5 ┘
|
|
```
|
|
</Tab>
|
|
<Tab>
|
|
**Collection-based Parallel** - Distribute a collection across parallel instances:
|
|
|
|
<div className="flex justify-center">
|
|
<Image
|
|
src="/static/blocks/parallel-2.png"
|
|
alt="Collection-based parallel execution"
|
|
width={500}
|
|
height={400}
|
|
className="my-6"
|
|
/>
|
|
</div>
|
|
|
|
Each instance processes one item from the collection simultaneously.
|
|
|
|
```
|
|
Example: Process ["task1", "task2", "task3"] in parallel
|
|
- Instance 1: Process "task1" ┐
|
|
- Instance 2: Process "task2" ├─ All execute simultaneously
|
|
- Instance 3: Process "task3" ┘
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## How to Use Parallel Blocks
|
|
|
|
### Creating a Parallel Block
|
|
|
|
1. Drag a Parallel block from the toolbar onto your canvas
|
|
2. Configure the parallel type and parameters
|
|
3. Drag a single block inside the parallel container
|
|
4. Connect the block as needed
|
|
|
|
### Accessing Results
|
|
|
|
After a parallel block completes, you can access aggregated results:
|
|
|
|
- **`<parallel.results>`**: Array of results from all parallel instances
|
|
|
|
## Example Use Cases
|
|
|
|
**Batch API Processing** - Process multiple API calls simultaneously
|
|
```
|
|
Parallel (Collection) → API (Call Endpoint) → Function (Aggregate)
|
|
```
|
|
|
|
**Multi-Model AI Processing** - Get responses from multiple AI models concurrently
|
|
```
|
|
Parallel (["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"]) → Agent → Evaluator (Select Best)
|
|
```
|
|
|
|
## Advanced Features
|
|
|
|
### Result Aggregation
|
|
|
|
Results from all parallel instances are automatically collected:
|
|
|
|
```javascript
|
|
// In a Function block after the parallel
|
|
const allResults = input.parallel.results;
|
|
// Returns: [result1, result2, result3, ...]
|
|
```
|
|
|
|
### Instance Isolation
|
|
|
|
Each parallel instance runs independently:
|
|
- Separate variable scopes
|
|
- No shared state between instances
|
|
- Failures in one instance don't affect others
|
|
|
|
### Limitations
|
|
|
|
<Callout type="warning">
|
|
Container blocks (Loops and Parallels) cannot be nested inside each other. This means:
|
|
- You cannot place a Loop block inside a Parallel block
|
|
- You cannot place another Parallel block inside a Parallel block
|
|
- You cannot place any container block inside another container block
|
|
</Callout>
|
|
|
|
<Callout type="info">
|
|
While parallel execution is faster, be mindful of:
|
|
- API rate limits when making concurrent requests
|
|
- Memory usage with large datasets
|
|
- Maximum of 20 concurrent instances to prevent resource exhaustion
|
|
</Callout>
|
|
|
|
## Parallel vs Loop
|
|
|
|
Understanding when to use each:
|
|
|
|
| Feature | Parallel | Loop |
|
|
|---------|----------|------|
|
|
| Execution | Concurrent | Sequential |
|
|
| Speed | Faster for independent operations | Slower but ordered |
|
|
| Order | No guaranteed order | Maintains order |
|
|
| Use case | Independent operations | Dependent operations |
|
|
| Resource usage | Higher | Lower |
|
|
|
|
## Inputs and Outputs
|
|
|
|
<Tabs items={['Configuration', 'Variables', 'Results']}>
|
|
<Tab>
|
|
<ul className="list-disc space-y-2 pl-6">
|
|
<li>
|
|
<strong>Parallel Type</strong>: Choose between 'count' or 'collection'
|
|
</li>
|
|
<li>
|
|
<strong>Count</strong>: Number of instances to run (count-based)
|
|
</li>
|
|
<li>
|
|
<strong>Collection</strong>: Array or object to distribute (collection-based)
|
|
</li>
|
|
</ul>
|
|
</Tab>
|
|
<Tab>
|
|
<ul className="list-disc space-y-2 pl-6">
|
|
<li>
|
|
<strong>parallel.currentItem</strong>: Item for this instance
|
|
</li>
|
|
<li>
|
|
<strong>parallel.index</strong>: Instance number (0-based)
|
|
</li>
|
|
<li>
|
|
<strong>parallel.items</strong>: Full collection (collection-based)
|
|
</li>
|
|
</ul>
|
|
</Tab>
|
|
<Tab>
|
|
<ul className="list-disc space-y-2 pl-6">
|
|
<li>
|
|
<strong>parallel.results</strong>: Array of all instance results
|
|
</li>
|
|
<li>
|
|
<strong>Access</strong>: Available in blocks after the parallel
|
|
</li>
|
|
</ul>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Best Practices
|
|
|
|
- **Independent operations only**: Ensure operations don't depend on each other
|
|
- **Handle rate limits**: Add delays or throttling for API-heavy workflows
|
|
- **Error handling**: Each instance should handle its own errors gracefully
|