eidos-ai / utils /command_queue.py
rohh1865's picture
Upload folder using huggingface_hub
ab616bf verified
Raw
History Blame Contribute Delete
2.11 kB
import time
import uuid
from typing import List, Dict, Any, Optional
from threading import Lock
from utils.logger import setup_logger
logger = setup_logger("command_queue")
class CommandQueue:
_instance = None
_lock = Lock()
def __new__(cls):
with cls._lock:
if cls._instance is None:
cls._instance = super(CommandQueue, cls).__new__(cls)
cls._instance._init_queue()
return cls._instance
def _init_queue(self):
# session_id -> List[Dict]
self.queues: Dict[str, List[Dict[str, Any]]] = {}
self.lock = Lock()
def push(self, session_id: str, command_type: str, data: Dict[str, Any], priority: str = "medium"):
"""Pushes a new command to the queue for a specific session."""
command = {
"id": str(uuid.uuid4())[:8],
"type": command_type,
"data": data,
"priority": priority,
"timestamp": time.time(),
"status": "pending"
}
with self.lock:
if session_id not in self.queues:
self.queues[session_id] = []
self.queues[session_id].append(command)
target_info = data.get("target") or data.get("text") or data
print(f"[TEST LOG] Command queued: {command_type} ({target_info})")
logger.info(f"Command pushed to queue [{session_id}]: {command_type} (ID: {command['id']})")
def get_pending(self, session_id: str, clear: bool = True) -> List[Dict[str, Any]]:
"""Retrieves and optionally clears pending commands for a session."""
with self.lock:
if session_id not in self.queues or not self.queues[session_id]:
return []
pending = self.queues[session_id]
if clear:
self.queues[session_id] = []
if pending:
print(f"[TEST LOG] {len(pending)} Command(s) popped from queue")
return pending
# Global instance for easy import
command_queue = CommandQueue()