Skip to main content

概要

Jinba Toolboxは、隔離されたSandbox環境でToolコードを実行します。Sandboxシステムはプロバイダー非依存のアーキテクチャで設計されています。共有インターフェースパッケージ(@jinba-toolbox/sandbox-core)がコントラクトを定義し、個別のプロバイダーパッケージ(sandbox-e2bsandbox-daytona)がそれを実装します。 この分離により、ビジネスロジックを変更することなく、プロバイダーの切り替えや新規追加が可能になります。

アーキテクチャ

コアインターフェース

@jinba-toolbox/sandbox-core パッケージにはインターフェースと型のみが含まれ、具体的な実装はありません。すべてのプロバイダーはこれらのコントラクトに準拠する必要があります。

SandboxProvider

Sandboxインスタンスを作成・再開するファクトリ:

SandboxInstance

コード実行、シェルコマンド、ファイルシステムアクセスを備えた実行中のSandbox環境:

SandboxCommands

Sandbox内でのシェルコマンド実行:

SandboxFilesystem

Sandbox内でのファイル操作:

主要な型

E2Bプロバイダー

@jinba-toolbox/sandbox-e2b パッケージは、E2B Code Interpreter SDKを使用してSandboxインターフェースを実装しています。

設定

動作の仕組み

  1. Sandboxの作成: プロバイダーがE2B Code Interpreter Sandboxを作成します。オプションでカスタムテンプレートを使用できます。
  2. パッケージのインストール: パッケージが指定されている場合、Sandbox内で pip install(Python)または npm install(TypeScript)が実行されます。
  3. コードの実行: ToolコードはE2Bの runCode APIを介してJupyterライクなカーネルで実行されます。
  4. ライフサイクル: Sandboxは一時停止、再開、または終了できます。

TypeScriptに関する注意

E2BのCode Interpreterは、ESMファイルインポートをサポートしないJupyterカーネルでTypeScriptを実行します。このため、TypeScript Toolのコードはファイルからの読み込みではなくインライン化されます。Python Toolは通常通りファイルシステムインポートを使用できます。

Daytonaプロバイダー

@jinba-toolbox/sandbox-daytona パッケージは、Daytona SDKを使用してSandboxインターフェースを実装しています。

設定

動作の仕組み

  1. Sandboxの作成: プロバイダーがDaytona SDKを初期化し、指定された言語でSandboxを作成します。
  2. パッケージのインストール: パッケージが指定されている場合、プロバイダーがSandbox内で pip install または npm install を実行します。
  3. コードの実行: ToolコードはDaytonaの process.codeRun APIを介して実行されます。
  4. ライフサイクル: Sandboxは起動、停止、削除が可能です。

ToolSetのSandbox設定

ToolSetを作成する際に、使用するSandboxプロバイダーと設定を指定します:
各ToolSetに保存される SandboxConfig

エラーハンドリング

すべてのSandboxパッケージは統一された SandboxError 型を使用します:

新しいプロバイダーの追加

アーキテクチャは拡張性を考慮して設計されています。新しいSandboxプロバイダーを追加するには:
1

新しいパッケージを作成する

標準的なパッケージ構成で packages/sandbox-<provider> を作成します。
2

SandboxProviderインターフェースを実装する

SandboxInstance を返す create()resume() メソッドを実装します。
3

プロバイダーを登録する

APIサーバーの getSandboxProvider 関数にプロバイダーのケースを追加します。sandbox-core やビジネスロジックの変更は不要です。

関連ドキュメント