summaryrefslogtreecommitdiff
path: root/__main__.py
diff options
context:
space:
mode:
authorBotond Hende <nettingman@gmail.com>2024-10-16 17:32:13 +0200
committerBotond Hende <nettingman@gmail.com>2024-10-16 17:32:13 +0200
commita585d159a5acf03d0d75fc39d74ff5ee24e28b8a (patch)
tree7acc8ab195ca8626222c309a2925b941248a4ecd /__main__.py
parentc435f1d1175f090619cb1ae75e5000e0eafb35e3 (diff)
name based intent handling
Diffstat (limited to '__main__.py')
-rw-r--r--__main__.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/__main__.py b/__main__.py
new file mode 100644
index 0000000..79d6a23
--- /dev/null
+++ b/__main__.py
@@ -0,0 +1,47 @@
+import sys
+import yaml
+
+from pathlib import Path
+from .modules.hassil.recognize import recognize
+from .modules.hassil.util import merge_dict
+from .modules.hassil.intents import Intents, TextSlotList
+
+from .modules.intents import *
+
+
+def main():
+ input_dict = {"intents": {}}
+
+ yaml_path = Path(sys.argv[1])
+ yaml_file_paths = yaml_path.glob("*.yaml")
+
+ slot_lists = {}
+
+ for yaml_file_path in yaml_file_paths:
+ with open(yaml_file_path, "r", encoding="utf-8") as yaml_file:
+ merge_dict(input_dict, yaml.safe_load(yaml_file))
+
+ intents = Intents.from_dict(input_dict)
+
+ try:
+ for line in sys.stdin:
+ line = line.strip()
+ if not line:
+ continue
+
+ result = recognize(line, intents, slot_lists=slot_lists)
+ if result is not None:
+ result_dict = {
+ "intent": result.intent.name,
+ **{e.name: e.value for e in result.entities_list},
+ }
+ print(result_dict)
+ handler = getattr(globals()[result_dict["domain"]], result_dict["intent"])
+ handler(result_dict)
+ else:
+ print("<no match>")
+ except KeyboardInterrupt:
+ pass
+
+if __name__ == '__main__':
+ main() \ No newline at end of file