Skip to content

Commit 92d0954

Browse files
authored
sdk v1 + code interpreter v1 (#79)
Co-authored-by: Mish Ushakov <[email protected]>
1 parent b7f0a70 commit 92d0954

File tree

8 files changed

+71
-103
lines changed

8 files changed

+71
-103
lines changed

app/api/sandbox/route.ts

+29-50
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { FragmentSchema } from '@/lib/schema'
22
import { ExecutionResultInterpreter, ExecutionResultWeb } from '@/lib/types'
3-
import { Sandbox, CodeInterpreter } from '@e2b/code-interpreter'
3+
import { Sandbox } from '@e2b/code-interpreter'
44

55
const sandboxTimeout = 10 * 60 * 1000 // 10 minute in ms
66

@@ -15,76 +15,55 @@ export async function POST(req: Request) {
1515
await req.json()
1616
console.log('fragment', fragment)
1717
console.log('userID', userID)
18-
console.log('apiKey', apiKey)
19-
20-
let sbx: Sandbox | CodeInterpreter | undefined = undefined
18+
// console.log('apiKey', apiKey)
2119

2220
// Create a interpreter or a sandbox
23-
if (fragment.template === 'code-interpreter-multilang') {
24-
sbx = await CodeInterpreter.create({
25-
metadata: { template: fragment.template, userID: userID },
26-
timeoutMs: sandboxTimeout,
27-
apiKey,
28-
})
29-
console.log('Created code interpreter', sbx.sandboxID)
30-
} else {
31-
sbx = await Sandbox.create(fragment.template, {
32-
metadata: { template: fragment.template, userID: userID },
33-
timeoutMs: sandboxTimeout,
34-
apiKey,
35-
})
36-
console.log('Created sandbox', sbx.sandboxID)
37-
}
21+
const sbx = await Sandbox.create(fragment.template, {
22+
metadata: { template: fragment.template, userID: userID },
23+
timeoutMs: sandboxTimeout,
24+
apiKey,
25+
})
3826

3927
// Install packages
4028
if (fragment.has_additional_dependencies) {
41-
if (sbx instanceof CodeInterpreter) {
42-
await sbx.notebook.execCell(fragment.install_dependencies_command)
43-
console.log(
44-
`Installed dependencies: ${fragment.additional_dependencies.join(', ')} in code interpreter ${sbx.sandboxID}`,
45-
)
46-
} else if (sbx instanceof Sandbox) {
47-
await sbx.commands.run(fragment.install_dependencies_command)
48-
console.log(
49-
`Installed dependencies: ${fragment.additional_dependencies.join(', ')} in sandbox ${sbx.sandboxID}`,
50-
)
51-
}
29+
await sbx.commands.run(fragment.install_dependencies_command)
30+
console.log(
31+
`Installed dependencies: ${fragment.additional_dependencies.join(', ')} in sandbox ${sbx.sandboxId}`,
32+
)
5233
}
5334

5435
// Copy code to fs
5536
if (fragment.code && Array.isArray(fragment.code)) {
5637
fragment.code.forEach(async (file) => {
5738
await sbx.files.write(file.file_path, file.file_content)
58-
console.log(`Copied file to ${file.file_path} in ${sbx.sandboxID}`)
39+
console.log(`Copied file to ${file.file_path} in ${sbx.sandboxId}`)
5940
})
6041
} else {
6142
await sbx.files.write(fragment.file_path, fragment.code)
62-
console.log(`Copied file to ${fragment.file_path} in ${sbx.sandboxID}`)
43+
console.log(`Copied file to ${fragment.file_path} in ${sbx.sandboxId}`)
6344
}
6445

6546
// Execute code or return a URL to the running sandbox
66-
if (fragment.template === 'code-interpreter-multilang') {
67-
const result = await (sbx as CodeInterpreter).notebook.execCell(
68-
fragment.code || '',
69-
)
70-
await (sbx as CodeInterpreter).close()
47+
if (fragment.template === 'code-interpreter-v1') {
48+
const { logs, error, results } = await sbx.runCode(fragment.code || '')
49+
7150
return new Response(
7251
JSON.stringify({
73-
sbxId: sbx?.sandboxID,
52+
sbxId: sbx?.sandboxId,
7453
template: fragment.template,
75-
stdout: result.logs.stdout,
76-
stderr: result.logs.stderr,
77-
runtimeError: result.error,
78-
cellResults: result.results,
54+
stdout: logs.stdout,
55+
stderr: logs.stderr,
56+
runtimeError: error,
57+
cellResults: results,
7958
} as ExecutionResultInterpreter),
8059
)
81-
} else {
82-
return new Response(
83-
JSON.stringify({
84-
sbxId: sbx?.sandboxID,
85-
template: fragment.template,
86-
url: `https://${sbx?.getHost(fragment.port || 80)}`,
87-
} as ExecutionResultWeb),
88-
)
8960
}
61+
62+
return new Response(
63+
JSON.stringify({
64+
sbxId: sbx?.sandboxId,
65+
template: fragment.template,
66+
url: `https://${sbx?.getHost(fragment.port || 80)}`,
67+
} as ExecutionResultWeb),
68+
)
9069
}

components/fragment-preview.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { FragmentWeb } from './fragment-web'
55
import { ExecutionResult } from '@/lib/types'
66

77
export function FragmentPreview({ result }: { result: ExecutionResult }) {
8-
if (result.template === 'code-interpreter-multilang') {
8+
if (result.template === 'code-interpreter-v1') {
99
return <FragmentInterpreter result={result} />
1010
}
1111

components/preview.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function Preview({
3838
return null
3939
}
4040

41-
const isLinkAvailable = result?.template !== 'code-interpreter-multilang'
41+
const isLinkAvailable = result?.template !== 'code-interpreter-v1'
4242

4343
return (
4444
<div className="absolute md:relative top-0 left-0 shadow-2xl md:rounded-tl-3xl md:rounded-bl-3xl md:border-l md:border-y bg-popover h-full w-full overflow-auto">

lib/templates.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"code-interpreter-multilang": {
2+
"code-interpreter-v1": {
33
"name": "Python data analyst",
44
"lib": ["python", "jupyter", "numpy", "pandas", "matplotlib", "seaborn", "plotly"],
55
"file": "script.py",

lib/types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ type ExecutionResultBase = {
66
}
77

88
export type ExecutionResultInterpreter = ExecutionResultBase & {
9-
template: 'code-interpreter-multilang'
9+
template: 'code-interpreter-v1'
1010
stdout: string[]
1111
stderr: string[]
1212
runtimeError?: ExecutionError
1313
cellResults: Result[]
1414
}
1515

1616
export type ExecutionResultWeb = ExecutionResultBase & {
17-
template: Exclude<TemplateId, 'code-interpreter-multilang'>
17+
template: Exclude<TemplateId, 'code-interpreter-v1'>
1818
url: string
1919
}
2020

package-lock.json

+36-47
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"@ai-sdk/google-vertex": "^0.0.39",
1515
"@ai-sdk/mistral": "^0.0.37",
1616
"@ai-sdk/openai": "^0.0.59",
17-
"@e2b/code-interpreter": "^0.0.9-beta.3",
17+
"@e2b/code-interpreter": "^1.0.2",
1818
"@radix-ui/react-avatar": "^1.1.0",
1919
"@radix-ui/react-dialog": "^1.1.1",
2020
"@radix-ui/react-dropdown-menu": "^2.1.1",

0 commit comments

Comments
 (0)