e2b-dev / code-interpreter

Python & JS/TS SDK for running AI-generated code/code interpreting in your AI app
https://e2b.dev
Apache License 2.0
1.22k stars 85 forks source link

Top level async/await doesn't work in JavaScript runtime #44

Open mlejva opened 3 hours ago

mlejva commented 3 hours ago

When running JS code in the Sandbox, the top level promise is never awaited:

import { Sandbox } from '@e2b/code-interpreter'

const sandbox = await Sandbox.create({apiKey: 'e2b_5d31a239f59f4a7bb8b1c69cf359098c94448aaa'})

const code = `
 const printResult = async () => {
      return 'foo';
    };

  printResult()
    .then((result) => {
      console.log("glama.result");
    })
    .catch((error) => {
      console.log("glama.error");
    });
`

console.log('running code')
const ex = await sandbox.runCode(code, {
  language: 'js',
  onError: (error) => {
    console.log('error', error)
  },
  onStdout: (stdout) => {
    console.log('stdout', stdout)
  },
  onStderr: (stderr) => {
    console.log('stderr', stderr)
  },
})
console.log('code executed', ex)

The code above will produce a following output

running code
code executed Execution {
  results: [
    Result {
      isMainResult: true,
      text: 'Promise { <pending> }',
      html: undefined,
      markdown: undefined,
      svg: undefined,
      png: undefined,
      jpeg: undefined,
      pdf: undefined,
      latex: undefined,
      json: undefined,
      javascript: undefined,
      raw: [Object],
      data: undefined,
      chart: undefined,
      extra: {}
    }
  ],
  logs: { stdout: [], stderr: [] },
  error: undefined,
  executionCount: 2
}

The text field says 'Promise { <pending> }' which means the promise was never awaited.

linear[bot] commented 3 hours ago

E2B-1095 Top level async/await doesn't work in JavaScript runtime