chatgpt-api/legacy/packages/e2b/src/e2b.ts

55 wiersze
1.5 KiB
TypeScript

import { createAIFunction, getEnv } from '@agentic/core'
import { Sandbox } from '@e2b/code-interpreter'
import { z } from 'zod'
/**
* E2B Python code interpreter sandbox.
*
* @see https://e2b.dev
*/
export const e2b = createAIFunction(
{
name: 'execute_python',
description: `
Execute python code in a Jupyter notebook cell and returns any result, stdout, stderr, display_data, and error.
- code has access to the internet and can make api requests
- code has access to the filesystem and can read/write files
- coce can install any pip package (if it exists) if you need to, but the usual packages for data analysis are already preinstalled
- code uses python3
- code is executed in a secure sandbox environment, so you don't need to worry about safety
`.trim(),
inputSchema: z.object({
code: z
.string()
.describe('Python code to execute in a single notebook cell.')
})
},
async ({ code }) => {
const sandbox = await Sandbox.create({
apiKey: getEnv('E2B_API_KEY')
})
try {
const exec = await sandbox.runCode(code, {
onStderr: (msg) => {
console.warn('[Code Interpreter stderr]', msg)
},
onStdout: (stdout) => {
console.log('[Code Interpreter stdout]', stdout)
}
})
if (exec.error) {
console.error('[Code Interpreter error]', exec.error)
throw new Error(exec.error.value)
}
return exec.results.map((result) => result.toJSON())
} finally {
await sandbox.kill()
}
}
)