CodeGeeX4/interpreter_demo/SANDBOX.md

137 lines
4.1 KiB
Markdown
Raw Normal View History

2024-07-05 01:33:53 +00:00
# Sandbox API
### Ping
**Path:** GET `/`
Check whether a sandbox is alive and return information about it.
#### Request
-
#### Response
**Status:**
- `200` if alive
**Example:**
```json
{
"last_activity": "2006-01-02T15:04:05Z07:00", // RFC 3339
}
```
### Execute
**Path:** POST `/execute`
#### Request
**Content-Type:** `application/json`
**JSON Schema:**
| Name | Type | Description |
| -------------- | ----------------- | ------------------------------------------------------------------------------------------------------ |
| `code` | string | The code to be executed. |
| `timeout_secs` | number (Optional) | Abort execution after timeout. Does not include environment and runtime creation time. Defaults to 60. |
#### Response
**Status:**
- `200` if successful
**Content-Type:** `application/json`
**Example:**
```json
{
"status": "ok", // Possible values: "ok", "timeout"
"events": [
{
"type": "stream",
"timestamp": "2006-01-02T15:04:05Z07:00", // RFC 3339
"data": {
"name": "stdout", // Possible values: "stdout", "stderr"
"text": "Hello World!",
}
},
{
"type": "display_data",
"timestamp": "2006-01-02T15:04:05Z07:00", // RFC 3339
"data": {
"variants": {
"text/plain": "<IPython.core.display.Image object>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4//8/AAX+Av4N70a4AAAAAElFTkSuQmCC" // Base64 encoded PNG image
}
}
},
{
"type": "file", // The program has written a file to disk.
"timestamp": "2006-01-02T15:04:05Z07:00", // RFC 3339
"data": {
"path": "README.md",
"size": 128, // Size is expressed in bytes
}
},
{
"type": "error",
"timestamp": "2006-01-02T15:04:05Z07:00", // RFC 3339
"data": {
"ename": "ZeroDivisionError",
"evalue": "division by zero",
"traceback": [
"\\u001b[0;31m---------------------------------------------------------------------------\\u001b[0m",
"\\u001b[0;31mZeroDivisionError\\u001b[0m Traceback (most recent call last)",
"Cell \\u001b[0;32mIn[1], line 2\\u001b[0m\\n\\u001b[1;32m 1\\u001b[0m \\u001b[38;5;66;03m# \\u8ba1\\u7b97\\u8868\\u8fbe\\u5f0f\\u7684\\u7ed3\\u679c\\u001b[39;00m\\n\\u001b[0;32m----> 2\\u001b[0m result \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;241;43m361234\\u001b[39;49m\\u001b[43m \\u001b[49m\\u001b[38;5;241;43m/\\u001b[39;49m\\u001b[43m \\u001b[49m\\u001b[38;5;241;43m0\\u001b[39;49m \\u001b[38;5;241m+\\u001b[39m \\u001b[38;5;241m4514\\u001b[39m \\u001b[38;5;241m*\\u001b[39m \\u001b[38;5;241m1234\\u001b[39m \\u001b[38;5;241m-\\u001b[39m \\u001b[38;5;241m27152346\\u001b[39m \\u001b[38;5;241m/\\u001b[39m \\u001b[38;5;241m2023\\u001b[39m\\n\\u001b[1;32m 3\\u001b[0m result\\n",
"\\u001b[0;31mZeroDivisionError\\u001b[0m: division by zero"
]
}
}
]
}
```
### File upload
**Path:** POST `/files/upload/-/*path`
Upload a file to the sandbox under `*path`.
#### Request
**Content-Length:** The length of the file in bytes.
**Body:** The raw contents of the file as bytes.
#### Response
**Status:**
- `201` if upload was successful
- `409` if file already exists
### File download
**Path:** GET `/files/download/-/*path`
Download a file from the sandbox from `*path`.
#### Request
\-
#### Response
**Content-Type:** Automatically detected, depending on the file.
**Content-Disposition:** `attachment; filename*=UTF-8''<filename>`
**Body:** The raw contents of the file.
**Status:**
- `200` if file exists
- `404` if file is not found