terryyz commited on
Commit
844732b
·
1 Parent(s): ba99c06
sandbox/code_runner.py CHANGED
@@ -10,7 +10,6 @@ import time
10
  import gradio as gr
11
  import re
12
  import base64
13
- from e2b_code_interpreter import Sandbox as CodeSandbox
14
  from gradio_sandboxcomponent import SandboxComponent
15
 
16
  from sandbox.sandbox_state import ChatbotSandboxState
@@ -377,7 +376,7 @@ def run_code_interpreter(code: str, code_language: str | None, install_command:
377
  Args:
378
  code (str): The code to be executed.
379
  """
380
- sandbox = CodeSandbox()
381
 
382
  stderrs = []
383
 
@@ -393,8 +392,14 @@ def run_code_interpreter(code: str, code_language: str | None, install_command:
393
  if not is_success:
394
  print(f"Install command failed: {stderr}")
395
 
 
396
  execution = sandbox.run_code(
397
- code=code,
 
 
 
 
 
398
  language=code_language
399
  )
400
 
 
10
  import gradio as gr
11
  import re
12
  import base64
 
13
  from gradio_sandboxcomponent import SandboxComponent
14
 
15
  from sandbox.sandbox_state import ChatbotSandboxState
 
376
  Args:
377
  code (str): The code to be executed.
378
  """
379
+ sandbox = create_sandbox(is_code_sandbox=True)
380
 
381
  stderrs = []
382
 
 
392
  if not is_success:
393
  print(f"Install command failed: {stderr}")
394
 
395
+ # Add virtual environment to Python path and run user code
396
  execution = sandbox.run_code(
397
+ code=f"""
398
+ import sys, glob
399
+ for path in glob.glob("/home/user/.venv/lib/python*/site-packages"):
400
+ if path not in sys.path: sys.path.insert(0, path)
401
+
402
+ {code}""",
403
  language=code_language
404
  )
405
 
sandbox/sandbox_manager.py CHANGED
@@ -5,6 +5,7 @@ Facades for interacting with the e2b sandbox.
5
  import json
6
  from typing import Literal
7
  from e2b import Sandbox
 
8
  from e2b.sandbox.commands.command_handle import CommandExitException
9
  from e2b.exceptions import TimeoutException
10
  import time
@@ -15,14 +16,20 @@ import queue
15
  from .constants import SANDBOX_TEMPLATE_ID, SANDBOX_NGINX_PORT, SANDBOX_RETRY_COUNT, SANDBOX_TIMEOUT_SECONDS, INSTALLED_PYPI_PACKAGES
16
 
17
 
18
- def create_sandbox(template: str = SANDBOX_TEMPLATE_ID) -> Sandbox:
19
  '''
20
  Create a new sandbox.
21
  Will retry if the sandbox creation fails.
22
  '''
23
  for attempt in range(1, SANDBOX_RETRY_COUNT + 1):
24
  try:
25
- return Sandbox(
 
 
 
 
 
 
26
  domain="e2b-foxtrot.dev",
27
  template=template,
28
  timeout=SANDBOX_TIMEOUT_SECONDS,
 
5
  import json
6
  from typing import Literal
7
  from e2b import Sandbox
8
+ from e2b_code_interpreter import Sandbox as CodeSandbox
9
  from e2b.sandbox.commands.command_handle import CommandExitException
10
  from e2b.exceptions import TimeoutException
11
  import time
 
16
  from .constants import SANDBOX_TEMPLATE_ID, SANDBOX_NGINX_PORT, SANDBOX_RETRY_COUNT, SANDBOX_TIMEOUT_SECONDS, INSTALLED_PYPI_PACKAGES
17
 
18
 
19
+ def create_sandbox(template: str = SANDBOX_TEMPLATE_ID, is_code_sandbox: bool = False) -> Sandbox:
20
  '''
21
  Create a new sandbox.
22
  Will retry if the sandbox creation fails.
23
  '''
24
  for attempt in range(1, SANDBOX_RETRY_COUNT + 1):
25
  try:
26
+ if is_code_sandbox:
27
+ return CodeSandbox.create(
28
+ domain="e2b-foxtrot.dev",
29
+ template=template,
30
+ timeout=SANDBOX_TIMEOUT_SECONDS,
31
+ )
32
+ return Sandbox.create(
33
  domain="e2b-foxtrot.dev",
34
  template=template,
35
  timeout=SANDBOX_TIMEOUT_SECONDS,