mirror of
https://github.com/HKUDS/OpenSpace.git
synced 2026-10-07 02:57:50 +00:00
138 lines
No EOL
4 KiB
Markdown
138 lines
No EOL
4 KiB
Markdown
---
|
|
name: execute-code-fallback
|
|
description: Fallback from execute_code_sandbox to run_shell when e2b sandbox is unavailable
|
|
---
|
|
|
|
# Execute Code Fallback Pattern
|
|
|
|
When `execute_code_sandbox` fails due to e2b unavailability, immediately fall back to `run_shell` with embedded Python code. This ensures task continuity when the sandbox service is down.
|
|
|
|
## When to Apply
|
|
|
|
Use this pattern when you observe:
|
|
- `execute_code_sandbox` returns errors mentioning "e2b", "sandbox unavailable", or connection timeouts
|
|
- Repeated sandbox execution failures (2+ attempts)
|
|
- Error messages indicating the code execution environment is unreachable
|
|
|
|
## Fallback Procedure
|
|
|
|
### Step 1: Detect the Failure
|
|
|
|
Identify that `execute_code_sandbox` has failed. Common error indicators:
|
|
- "e2b service unavailable"
|
|
- "Sandbox connection failed"
|
|
- "Execution environment not reachable"
|
|
- Timeout errors during code execution
|
|
|
|
### Step 2: Switch to run_shell with Embedded Python
|
|
|
|
Instead of:
|
|
```python
|
|
execute_code_sandbox(code="...")
|
|
```
|
|
|
|
Use:
|
|
```bash
|
|
run_shell(command="python3 -c '...your Python code...'")
|
|
```
|
|
|
|
### Step 3: Install Dependencies First (If Needed)
|
|
|
|
If your Python code requires external packages, install them first:
|
|
|
|
```bash
|
|
run_shell(command="pip install pandas requests matplotlib")
|
|
```
|
|
|
|
Then execute your main code:
|
|
|
|
```bash
|
|
run_shell(command="python3 << 'EOF'
|
|
import pandas as pd
|
|
import requests
|
|
|
|
# Your code here
|
|
print("Success")
|
|
EOF
|
|
")
|
|
```
|
|
|
|
### Step 4: Use Heredoc for Multi-line Code
|
|
|
|
For complex Python scripts, use heredoc syntax for cleaner code:
|
|
|
|
```bash
|
|
run_shell(command="python3 << 'PYTHON_SCRIPT'
|
|
import json
|
|
import os
|
|
|
|
# Complex logic here
|
|
data = {'key': 'value'}
|
|
with open('output.json', 'w') as f:
|
|
json.dump(data, f)
|
|
|
|
print('File created successfully')
|
|
PYTHON_SCRIPT
|
|
")
|
|
```
|
|
|
|
## Complete Example
|
|
|
|
**Scenario:** You need to process a CSV file and generate a report.
|
|
|
|
**Original approach (sandbox):**
|
|
```python
|
|
execute_code_sandbox(code="""
|
|
import pandas as pd
|
|
df = pd.read_csv('data.csv')
|
|
summary = df.describe()
|
|
print(summary)
|
|
""")
|
|
```
|
|
|
|
**Fallback approach (run_shell):**
|
|
```bash
|
|
# First install dependencies if needed
|
|
run_shell(command="pip install pandas --quiet")
|
|
|
|
# Then execute the code
|
|
run_shell(command="python3 << 'EOF'
|
|
import pandas as pd
|
|
df = pd.read_csv('data.csv')
|
|
summary = df.describe()
|
|
print(summary)
|
|
EOF
|
|
")
|
|
```
|
|
|
|
## Important Considerations
|
|
|
|
1. **State Persistence**: Unlike `execute_code_sandbox`, `run_shell` executions may not share state between calls. Save intermediate results to files if needed.
|
|
|
|
2. **Working Directory**: Ensure you're operating in the correct directory. Use `pwd` to verify or include `cd /path/to/workdir` in your commands.
|
|
|
|
3. **Python Version**: Use `python3` explicitly to avoid ambiguity. Verify with `python3 --version` if needed.
|
|
|
|
4. **Error Handling**: Check the stdout/stderr from `run_shell` to confirm success. Failed Python scripts will return non-zero exit codes.
|
|
|
|
5. **Security**: Be cautious when embedding user-provided data into shell commands. Escape appropriately or use file-based input.
|
|
|
|
6. **Performance**: For large computations, `run_shell` may be slower than sandbox. Consider breaking into smaller steps if timeouts occur.
|
|
|
|
## Quick Reference
|
|
|
|
| Task | Sandbox Approach | Fallback Approach |
|
|
|------|-----------------|-------------------|
|
|
| Simple calculation | `execute_code_sandbox(code="print(2+2)")` | `run_shell(command="python3 -c 'print(2+2)'")` |
|
|
| Install + run | `execute_code_sandbox(code="import pkg; ...")` | `run_shell(command="pip install pkg && python3 -c '...'")` |
|
|
| Multi-line script | `execute_code_sandbox(code="...")` | `run_shell(command="python3 << 'EOF'...EOF")` |
|
|
| File I/O | `execute_code_sandbox(code="...")` | `run_shell(command="python3 << 'EOF'...EOF")` |
|
|
|
|
## Recovery Checklist
|
|
|
|
- [ ] Confirm `execute_code_sandbox` failure (not a code bug)
|
|
- [ ] Switch to `run_shell` immediately
|
|
- [ ] Install required packages with `pip install`
|
|
- [ ] Use heredoc for multi-line Python
|
|
- [ ] Verify output and handle errors
|
|
- [ ] Save intermediate results to files if multi-step |