aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/run-bot.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/run-bot.py')
-rwxr-xr-xscripts/run-bot.py105
1 files changed, 0 insertions, 105 deletions
diff --git a/scripts/run-bot.py b/scripts/run-bot.py
deleted file mode 100755
index d7c7ae1..0000000
--- a/scripts/run-bot.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import json
-import sys
-import importlib.util
-
-
-def main():
- (bot_name, bot_func, raw_data) = parse_argv("run-bot.py")
- bot_data = parse_raw_data(raw_data)
-
- root_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
- setup_env(root_dir, bot_name)
-
- bot_tools_path = os.path.join(root_dir, f"bots/{bot_name}/tools.py")
- run(bot_tools_path, bot_func, bot_data)
-
-
-def parse_raw_data(data):
- if not data:
- raise ValueError("No JSON data")
-
- try:
- return json.loads(data)
- except Exception:
- raise ValueError("Invalid JSON data")
-
-
-def parse_argv(this_file_name):
- argv = sys.argv[:] + [None] * max(0, 4 - len(sys.argv))
-
- bot_name = argv[0]
- bot_func = ""
- bot_data = None
-
- if bot_name.endswith(this_file_name):
- bot_name = sys.argv[1]
- bot_func = sys.argv[2]
- bot_data = sys.argv[3]
- else:
- bot_name = os.path.basename(bot_name)
- bot_func = sys.argv[1]
- bot_data = sys.argv[2]
-
- if bot_name.endswith(".py"):
- bot_name = bot_name[:-3]
-
- return bot_name, bot_func, bot_data
-
-
-def setup_env(root_dir, bot_name):
- os.environ["LLM_ROOT_DIR"] = root_dir
- load_env(os.path.join(root_dir, ".env"))
- os.environ["LLM_BOT_NAME"] = bot_name
- os.environ["LLM_BOT_ROOT_DIR"] = os.path.join(root_dir, "bots", bot_name)
- os.environ["LLM_BOT_CACHE_DIR"] = os.path.join(root_dir, "cache", bot_name)
-
-
-def load_env(file_path):
- try:
- with open(file_path, "r") as f:
- for line in f:
- line = line.strip()
- if line.startswith("#") or line == "":
- continue
-
- key, *value = line.split("=")
- os.environ[key.strip()] = "=".join(value).strip()
- except FileNotFoundError:
- pass
-
-
-def run(bot_path, bot_func, bot_data):
- try:
- spec = importlib.util.spec_from_file_location(
- os.path.basename(bot_path), bot_path
- )
- mod = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(mod)
- except:
- raise Exception(f"Unable to load bot tools at '{bot_path}'")
-
- if not hasattr(mod, bot_func):
- raise Exception(f"Not module function '{bot_func}' at '{bot_path}'")
-
- value = getattr(mod, bot_func)(**bot_data)
- dump_value(value)
-
-
-def dump_value(value):
- if value is None:
- return
-
- value_type = type(value).__name__
- if value_type in ("str", "int", "float", "bool"):
- print(value)
- elif value_type == "dict" or value_type == "list":
- value_str = json.dumps(value, indent=2)
- assert value == json.loads(value_str)
- print(value_str)
-
-
-if __name__ == "__main__":
- main()