Spaces:
Runtime error
Runtime error
| from threading import Thread | |
| from queue import Queue | |
| from typing import Dict, Any | |
| import json | |
| import re | |
| class ActionProcessor(Thread): | |
| def __init__(self, text_queue: "Queue[str]", action_queue: "Queue[str]"): | |
| super().__init__() | |
| self.text_queue = text_queue | |
| self.action_queue = action_queue | |
| self.daemon = True # Thread will exit when main program exits | |
| def process_text(self, text: str) -> Dict[str, Any] | None: | |
| """Convert text into an action if a complete command is detected.""" | |
| # Define command patterns | |
| command_patterns = { | |
| r"(?i)\b(stop|now)\b": "stop", | |
| r"(?i)\b(come back|get back)\b": "return", | |
| r"(?i)\b(easy)\b": "slow", | |
| r"(?i)\b(stop drinking)\b": "pause_liquid", | |
| r"(?i)\b(stop eating)\b": "pause_solid", | |
| r"(?i)\b(look at me)\b": "look_at_me", | |
| r"(?i)\b(look away)\b": "look_away", | |
| r"(?i)\b(don't do that)\b": "stop", | |
| } | |
| # Check each pattern | |
| for pattern, action_type in command_patterns.items(): | |
| match = re.search(pattern, text.lower()) | |
| if match: | |
| return {"type": action_type} | |
| return None | |
| def run(self) -> None: | |
| """Main processing loop.""" | |
| while True: | |
| try: | |
| # Get text from queue, blocks until text is available | |
| text = self.text_queue.get() | |
| # Process the text into an action | |
| action = self.process_text(text) | |
| # If we got a valid action, add it to the action queue | |
| if action: | |
| self.action_queue.put(json.dumps(action)) | |
| # Mark the text as processed | |
| self.text_queue.task_done() | |
| except Exception as e: | |
| print(f"Error processing text: {str(e)}") | |
| continue | |