e0e362d700
SDK Tests / SDK CI (push) Blocked by required conditions
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
SDK Tests / Python SDK Tests (sandbox) (push) Waiting to run
SDK Tests / CLI Quality (push) Waiting to run
SDK Tests / CLI Tests (push) Waiting to run
SDK Tests / Python SDK Quality (code-interpreter) (push) Waiting to run
SDK Tests / Python SDK Quality (sandbox) (push) Waiting to run
SDK Tests / Python SDK Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Go SDK Quality And Tests (push) Waiting to run
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
188 lines
5.9 KiB
Markdown
188 lines
5.9 KiB
Markdown
# Alibaba Code Interpreter SDK for JavaScript/TypeScript
|
|
|
|
|
|
A TypeScript/JavaScript SDK for executing code in secure, isolated sandboxes. It provides a high-level API for running Python, Java, Go, TypeScript, and other languages safely, with support for code execution contexts.
|
|
|
|
## Prerequisites
|
|
|
|
This SDK requires a Docker image containing the Code Interpreter runtime environment. You must use the `opensandbox/code-interpreter` image (or a derivative) which includes pre-installed runtimes for Python, Java, Go, Node.js, etc.
|
|
|
|
For detailed information about supported languages and versions, please refer to the [Environment Documentation](../../../sandboxes/code-interpreter/README.md).
|
|
|
|
## Installation
|
|
|
|
### npm
|
|
|
|
```bash
|
|
npm install @alibaba-group/opensandbox-code-interpreter
|
|
```
|
|
|
|
### pnpm
|
|
|
|
```bash
|
|
pnpm add @alibaba-group/opensandbox-code-interpreter
|
|
```
|
|
|
|
### yarn
|
|
|
|
```bash
|
|
yarn add @alibaba-group/opensandbox-code-interpreter
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
The following example demonstrates how to create a sandbox with a specific runtime configuration and execute a simple script.
|
|
|
|
> **Note**: Before running this example, ensure the OpenSandbox service is running. See the root [README.md](../../../README.md) for startup instructions.
|
|
|
|
```ts
|
|
import { ConnectionConfig, Sandbox } from "@alibaba-group/opensandbox";
|
|
import { CodeInterpreter, SupportedLanguages } from "@alibaba-group/opensandbox-code-interpreter";
|
|
|
|
// 1. Configure connection
|
|
const config = new ConnectionConfig({
|
|
domain: "api.opensandbox.io",
|
|
apiKey: "your-api-key",
|
|
});
|
|
|
|
// 2. Create a Sandbox with the code-interpreter image + runtime versions
|
|
const sandbox = await Sandbox.create({
|
|
connectionConfig: config,
|
|
image: "opensandbox/code-interpreter:v1.1.0",
|
|
entrypoint: ["/opt/code-interpreter/code-interpreter.sh"],
|
|
env: {
|
|
PYTHON_VERSION: "3.11",
|
|
JAVA_VERSION: "17",
|
|
NODE_VERSION: "20",
|
|
GO_VERSION: "1.24",
|
|
},
|
|
timeoutSeconds: 15 * 60,
|
|
});
|
|
|
|
// 3. Create CodeInterpreter wrapper
|
|
const ci = await CodeInterpreter.create(sandbox);
|
|
|
|
// 4. Create an execution context (Python)
|
|
const ctx = await ci.codes.createContext(SupportedLanguages.PYTHON);
|
|
|
|
// 5. Run code
|
|
const result = await ci.codes.run("import sys\nprint(sys.version)\nresult = 2 + 2\nresult", {
|
|
context: ctx,
|
|
});
|
|
|
|
// 6. Print output
|
|
console.log(result.result[0]?.text);
|
|
|
|
// 7. Cleanup remote instance (optional but recommended)
|
|
await sandbox.kill();
|
|
await sandbox.close();
|
|
```
|
|
|
|
## Runtime Configuration
|
|
|
|
### Docker Image
|
|
|
|
The Code Interpreter SDK relies on a specialized environment. Ensure your sandbox provider has the `opensandbox/code-interpreter` image available.
|
|
|
|
### Language Version Selection
|
|
|
|
You can specify the desired version of a programming language by setting the corresponding environment variable when creating the `Sandbox`.
|
|
|
|
| Language | Environment Variable | Example Value | Default (if unset) |
|
|
| --- | --- | --- | --- |
|
|
| Python | `PYTHON_VERSION` | `3.11` | Image default |
|
|
| Java | `JAVA_VERSION` | `17` | Image default |
|
|
| Node.js | `NODE_VERSION` | `20` | Image default |
|
|
| Go | `GO_VERSION` | `1.24` | Image default |
|
|
|
|
```ts
|
|
const sandbox = await Sandbox.create({
|
|
connectionConfig: config,
|
|
image: "opensandbox/code-interpreter:v1.1.0",
|
|
entrypoint: ["/opt/code-interpreter/code-interpreter.sh"],
|
|
env: {
|
|
JAVA_VERSION: "17",
|
|
GO_VERSION: "1.24",
|
|
},
|
|
});
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### 0. Run with `language` (default language context)
|
|
|
|
If you don't need to manage explicit context IDs, you can run code by specifying only `language`.
|
|
When `context.id` is omitted, execd can create/reuse a default session for that language, so state can persist across runs.
|
|
|
|
```ts
|
|
import { SupportedLanguages } from "@alibaba-group/opensandbox-code-interpreter";
|
|
|
|
await ci.codes.run("x = 42", { language: SupportedLanguages.PYTHON });
|
|
const execution = await ci.codes.run("result = x\nresult", { language: SupportedLanguages.PYTHON });
|
|
console.log(execution.result[0]?.text); // "42"
|
|
```
|
|
|
|
### 0.1 Context management (list/get/delete)
|
|
|
|
You can manage contexts explicitly (aligned with Python/Kotlin SDKs):
|
|
|
|
```ts
|
|
const ctx = await ci.codes.createContext(SupportedLanguages.PYTHON);
|
|
|
|
const same = await ci.codes.getContext(ctx.id!);
|
|
console.log(same.id, same.language);
|
|
|
|
const all = await ci.codes.listContexts();
|
|
const pyOnly = await ci.codes.listContexts(SupportedLanguages.PYTHON);
|
|
|
|
await ci.codes.deleteContext(ctx.id!);
|
|
await ci.codes.deleteContexts(SupportedLanguages.PYTHON); // bulk cleanup
|
|
```
|
|
|
|
### 1. Java Code Execution
|
|
|
|
```ts
|
|
import { SupportedLanguages } from "@alibaba-group/opensandbox-code-interpreter";
|
|
|
|
const javaCtx = await ci.codes.createContext(SupportedLanguages.JAVA);
|
|
const execution = await ci.codes.run(
|
|
[
|
|
'System.out.println("Calculating sum...");',
|
|
"int a = 10;",
|
|
"int b = 20;",
|
|
"int sum = a + b;",
|
|
'System.out.println("Sum: " + sum);',
|
|
"sum",
|
|
].join("\n"),
|
|
{ context: javaCtx },
|
|
);
|
|
console.log(execution.logs.stdout.map((m) => m.text));
|
|
```
|
|
|
|
### 2. Streaming Output Handling
|
|
|
|
Handle stdout/stderr and execution events in real-time.
|
|
|
|
```ts
|
|
import type { ExecutionHandlers } from "@alibaba-group/opensandbox";
|
|
import { SupportedLanguages } from "@alibaba-group/opensandbox-code-interpreter";
|
|
|
|
const handlers: ExecutionHandlers = {
|
|
onStdout: (m) => console.log("STDOUT:", m.text),
|
|
onStderr: (m) => console.error("STDERR:", m.text),
|
|
onResult: (r) => console.log("RESULT:", r.text),
|
|
};
|
|
|
|
const pyCtx = await ci.codes.createContext(SupportedLanguages.PYTHON);
|
|
await ci.codes.run("import time\nfor i in range(5):\n print(i)\n time.sleep(0.2)", {
|
|
context: pyCtx,
|
|
handlers,
|
|
});
|
|
```
|
|
|
|
## Notes
|
|
|
|
- **Lifecycle**: `CodeInterpreter` wraps an existing `Sandbox` instance and reuses its connection configuration. Each sandbox instance clones the transport via `ConnectionConfig.withTransportIfMissing()`, so call `sandbox.close()` when you are finished to release the Node.js keep-alive agent and avoid leak.
|
|
- **Default context**: `codes.run(..., { language })` uses a language default context (state can persist across runs).
|
|
|