Files
T
wehub-resource-sync c56bef871b
Sync docs with Docusaurus / sync (push) Waiting to run
Tests / Check if changed (push) Waiting to run
Tests / format (push) Blocked by required conditions
Tests / check-imports (push) Blocked by required conditions
Tests / Unit / macos-latest (push) Blocked by required conditions
Tests / Unit / ubuntu-latest (push) Blocked by required conditions
Tests / Unit / windows-latest (push) Blocked by required conditions
Tests / mypy (push) Blocked by required conditions
Tests / Integration / ubuntu-latest (push) Blocked by required conditions
Tests / Integration / macos-latest (push) Blocked by required conditions
Tests / Integration / windows-latest (push) Blocked by required conditions
Tests / notify-slack-on-failure (push) Blocked by required conditions
Tests / Mark tests as completed (push) Blocked by required conditions
Docker image release / Build base image (push) Waiting to run
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:22:28 +08:00

419 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "E2B"
id: integrations-e2b
description: "E2B integration for Haystack"
slug: "/integrations-e2b"
---
## haystack_integrations.tools.e2b.bash_tool
### RunBashCommandTool
Bases: <code>Tool</code>
A :class:`~haystack.tools.Tool` that executes bash commands inside an E2B sandbox.
Pass the same :class:`E2BSandbox` instance to multiple tool classes so they
all operate in the same live sandbox environment.
### Usage example
```python
from haystack_integrations.tools.e2b import E2BSandbox, RunBashCommandTool, ReadFileTool
sandbox = E2BSandbox()
agent = Agent(
chat_generator=...,
tools=[
RunBashCommandTool(sandbox=sandbox),
ReadFileTool(sandbox=sandbox),
],
)
```
#### __init__
```python
__init__(sandbox: E2BSandbox) -> None
```
Create a RunBashCommandTool.
**Parameters:**
- **sandbox** (<code>E2BSandbox</code>) The :class:`E2BSandbox` instance that will execute commands.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize this tool to a dictionary.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> RunBashCommandTool
```
Deserialize a RunBashCommandTool from a dictionary.
## haystack_integrations.tools.e2b.e2b_sandbox
### E2BSandbox
Manages the lifecycle of an E2B cloud sandbox.
Instantiate this class and pass it to one or more E2B tool classes
(`RunBashCommandTool`, `ReadFileTool`, `WriteFileTool`,
`ListDirectoryTool`) to share a single sandbox environment across all
tools. All tools that receive the same `E2BSandbox` instance operate
inside the same live sandbox process.
### Usage example
```python
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent
from haystack_integrations.tools.e2b import (
E2BSandbox,
RunBashCommandTool,
ReadFileTool,
WriteFileTool,
ListDirectoryTool,
)
sandbox = E2BSandbox()
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o"),
tools=[
RunBashCommandTool(sandbox=sandbox),
ReadFileTool(sandbox=sandbox),
WriteFileTool(sandbox=sandbox),
ListDirectoryTool(sandbox=sandbox),
],
)
```
Lifecycle is handled automatically by the Agent's pipeline. If you use the
tools standalone, call :meth:`warm_up` before the first tool invocation:
```python
sandbox.warm_up()
# ... use tools ...
sandbox.close()
```
#### __init__
```python
__init__(
api_key: Secret = Secret.from_env_var("E2B_API_KEY", strict=True),
sandbox_template: str = "base",
timeout: int = 120,
environment_vars: dict[str, str] | None = None,
instance_id: str | None = None,
) -> None
```
Create an E2BSandbox instance.
**Parameters:**
- **api_key** (<code>Secret</code>) E2B API key.
- **sandbox_template** (<code>str</code>) E2B sandbox template name.
- **timeout** (<code>int</code>) Sandbox inactivity timeout in seconds.
- **environment_vars** (<code>dict\[str, str\] | None</code>) Optional environment variables to inject into the sandbox.
- **instance_id** (<code>str | None</code>) Stable identifier preserved across `to_dict`/`from_dict`. When
omitted, a fresh UUID is generated. Tools that share the same `E2BSandbox`
instance inherit this id, which is what lets them re-share the instance after
a serialization round-trip. Distinct from the cloud-side sandbox id assigned
by E2B at warm-up.
#### warm_up
```python
warm_up() -> None
```
Establish the connection to the E2B sandbox.
Idempotent -- calling it multiple times has no effect if the sandbox is
already running.
**Raises:**
- <code>RuntimeError</code> If the E2B sandbox cannot be created.
#### close
```python
close() -> None
```
Shut down the E2B sandbox and release all associated resources.
Call this when you are done to avoid leaving idle sandboxes running.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize the sandbox configuration to a dictionary.
**Returns:**
- <code>dict\[str, Any\]</code> Dictionary containing the serialised configuration.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> E2BSandbox
```
Deserialize an :class:`E2BSandbox` from a dictionary.
Multiple tools that shared a single :class:`E2BSandbox` before serialization
will share the same restored instance: each tool's `from_dict` consults a
process-wide cache keyed on `instance_id`. A cache hit is only honored when
the full serialized config (api_key, template, timeout, environment_vars)
matches the cached entry — a crafted YAML with a guessed id but a different
config falls through to a fresh instance and never observes the cached one.
**Parameters:**
- **data** (<code>dict\[str, Any\]</code>) Dictionary created by :meth:`to_dict`.
**Returns:**
- <code>E2BSandbox</code> An :class:`E2BSandbox` instance ready to be warmed up. May be a
previously-restored instance if the id and config match.
## haystack_integrations.tools.e2b.list_directory_tool
### ListDirectoryTool
Bases: <code>Tool</code>
A :class:`~haystack.tools.Tool` that lists directory contents in an E2B sandbox.
Pass the same :class:`E2BSandbox` instance to multiple tool classes so they
all operate in the same live sandbox environment.
### Usage example
```python
from haystack_integrations.tools.e2b import E2BSandbox, ListDirectoryTool
sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[ListDirectoryTool(sandbox=sandbox)])
```
#### __init__
```python
__init__(sandbox: E2BSandbox) -> None
```
Create a ListDirectoryTool.
**Parameters:**
- **sandbox** (<code>E2BSandbox</code>) The :class:`E2BSandbox` instance to list directories from.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize this tool to a dictionary.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> ListDirectoryTool
```
Deserialize a ListDirectoryTool from a dictionary.
## haystack_integrations.tools.e2b.read_file_tool
### ReadFileTool
Bases: <code>Tool</code>
A :class:`~haystack.tools.Tool` that reads files from an E2B sandbox filesystem.
Pass the same :class:`E2BSandbox` instance to multiple tool classes so they
all operate in the same live sandbox environment.
### Usage example
```python
from haystack_integrations.tools.e2b import E2BSandbox, ReadFileTool
sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[ReadFileTool(sandbox=sandbox)])
```
#### __init__
```python
__init__(sandbox: E2BSandbox) -> None
```
Create a ReadFileTool.
**Parameters:**
- **sandbox** (<code>E2BSandbox</code>) The :class:`E2BSandbox` instance to read files from.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize this tool to a dictionary.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> ReadFileTool
```
Deserialize a ReadFileTool from a dictionary.
## haystack_integrations.tools.e2b.sandbox_toolset
### E2BToolset
Bases: <code>Toolset</code>
A :class:`~haystack.tools.Toolset` that bundles all E2B sandbox tools.
All tools in the set share a single :class:`E2BSandbox` instance so they
operate inside the same live sandbox process. The toolset owns the sandbox
lifecycle: calling :meth:`warm_up` starts the sandbox, and serialisation
round-trips preserve the shared-sandbox relationship.
### Usage example
```python
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent
from haystack_integrations.tools.e2b import E2BToolset
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o"),
tools=E2BToolset(),
)
```
#### __init__
```python
__init__(
api_key: Secret = Secret.from_env_var("E2B_API_KEY", strict=True),
sandbox_template: str = "base",
timeout: int = 120,
environment_vars: dict[str, str] | None = None,
) -> None
```
Create an E2BToolset.
**Parameters:**
- **api_key** (<code>Secret</code>) E2B API key. Defaults to `Secret.from_env_var("E2B_API_KEY")`.
- **sandbox_template** (<code>str</code>) E2B sandbox template name. Defaults to `"base"`.
- **timeout** (<code>int</code>) Sandbox inactivity timeout in seconds. Defaults to `120`.
- **environment_vars** (<code>dict\[str, str\] | None</code>) Optional environment variables to inject into the sandbox.
#### warm_up
```python
warm_up() -> None
```
Start the shared E2B sandbox (idempotent).
#### close
```python
close() -> None
```
Shut down the shared E2B sandbox and release cloud resources.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize this toolset to a dictionary.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> E2BToolset
```
Deserialize an E2BToolset from a dictionary.
## haystack_integrations.tools.e2b.write_file_tool
### WriteFileTool
Bases: <code>Tool</code>
A :class:`~haystack.tools.Tool` that writes files to an E2B sandbox filesystem.
Pass the same :class:`E2BSandbox` instance to multiple tool classes so they
all operate in the same live sandbox environment.
### Usage example
```python
from haystack_integrations.tools.e2b import E2BSandbox, WriteFileTool
sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[WriteFileTool(sandbox=sandbox)])
```
#### __init__
```python
__init__(sandbox: E2BSandbox) -> None
```
Create a WriteFileTool.
**Parameters:**
- **sandbox** (<code>E2BSandbox</code>) The :class:`E2BSandbox` instance to write files to.
#### to_dict
```python
to_dict() -> dict[str, Any]
```
Serialize this tool to a dictionary.
#### from_dict
```python
from_dict(data: dict[str, Any]) -> WriteFileTool
```
Deserialize a WriteFileTool from a dictionary.