Spaces:
Running
Running
| from abc import abstractmethod | |
| import importlib | |
| from typing import List | |
| from toolformers.base import Tool | |
| class Executor: | |
| def run_routine(self, protocol_id, task_data, tools): | |
| pass | |
| class UnsafeExecutor(Executor): | |
| def run_routine(self, protocol_id, code, task_data, tools : List[Tool]): | |
| protocol_id = protocol_id.replace('-', '_').replace('.', '_').replace('/', '_') | |
| # TODO: This should be done in a safe, containerized environment | |
| spec = importlib.util.spec_from_loader(protocol_id, loader=None) | |
| loaded_module = importlib.util.module_from_spec(spec) | |
| #spec.loader.exec_module(loaded_module) | |
| exec(code, loaded_module.__dict__) | |
| for tool in tools: | |
| loaded_module.__dict__[tool.name] = tool.as_executable_function() | |
| return loaded_module.run(task_data) |