Pamudu13/gemma-3-chat
0
1from e2b_code_interpreter import Sandbox2import asyncio3from concurrent.futures import ThreadPoolExecutor4from py.get_setting import load_settings5 6async def e2b_code(code: str, language: str = "Python") -> str:7 settings = await load_settings()8 e2b_api_key = settings["codeSettings"]["e2b_api_key"]9 executor = ThreadPoolExecutor()10 def run_in_sandbox():11 with Sandbox(api_key=e2b_api_key) as sandbox:12 execution = sandbox.run_code(code,language=language)13 return execution.logs14 15 # 使用线程池执行同步代码,防止阻塞事件循环16 loop = asyncio.get_event_loop()17 result = await loop.run_in_executor(executor, run_in_sandbox)18 return str(result)19 20import asyncio21from aiohttp import ClientSession22 23 24async def local_run_code(code: str, language: str = "python") -> str:25 settings = await load_settings()26 url = settings["codeSettings"]["sandbox_url"].strip("/") + "/run_code"27 headers = {28 "Content-Type": "application/json"29 }30 data = {31 "code": code,32 "language": language33 }34 35 async with ClientSession() as session:36 async with session.post(url, json=data, headers=headers) as response:37 # 获取响应文本38 result = await response.text()39 return result40 41e2b_code_tool = {42 "type": "function",43 "function": {44 "name": "e2b_code",45 "description": "执行代码,工具只会返回stdout和stderr。请将你要查看的答案输出到stdout。",46 "parameters": {47 "type": "object",48 "properties": {49 "code": {50 "type": "string",51 "description": "需要执行的代码,例如:print('Hello, World!'),不要包含markdown的代码块标记!只有输入可运行的代码字符串。",52 },53 "language": {54 "type": "string",55 "description": "代码语言。",56 "enum": ["python", "js", "ts", "r", "java", "bash"],57 "default": "python"58 }59 },60 "required": ["code"],61 },62 },63}64 65local_run_code_tool = {66 "type": "function",67 "function": {68 "name": "local_run_code",69 "description": "执行代码,工具只会返回stdout和stderr。请将你要查看的答案输出到stdout。",70 "parameters": {71 "type": "object",72 "properties": {73 "code": {74 "type": "string",75 "description": "需要执行的代码,例如:print('Hello, World!'),不要包含markdown的代码块标记!只有输入可运行的代码字符串。工具只会返回stdout和stderr。请将你要查看的答案放在print()中,不要放在其他地方。"76 },77 "language": {78 "type": "string",79 "description": "代码语言。",80 "enum": [81 "python", "cpp", "nodejs", "go", "go_test", "java", "php", "csharp",82 "bash", "typescript", "sql", "rust", "cuda", "lua", "R", "perl",83 "D_ut", "ruby", "scala", "julia", "pytest", "junit", "kotlin_script",84 "jest", "verilog", "python_gpu", "lean", "swift", "racket"85 ],86 "default": "python"87 }88 },89 "required": ["code"]90 }91 }92}