File size: 1,514 Bytes
92c4ae6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import logging
from typing import Dict, Any

logger = logging.getLogger(__name__)

def execute_agent_background(task_data: Dict[str, Any]):
    """
    Background worker function for executing an agent task.
    This is called by the RQ worker.
    """
    try:
        from core.atom_meta_agent import AtomMetaAgent, AgentTriggerMode
        
        request = task_data.get("request")
        context = task_data.get("context", {})
        trigger_mode_str = task_data.get("trigger_mode", "manual")
        tenant_id = task_data.get("tenant_id", "default")
        
        # Convert string trigger mode back to enum if needed
        # (Assuming the caller passes the value string)
        
        logger.info(f"Background worker: Executing agent for {tenant_id} - Request: {request[:50]}...")
        
        # We need an event loop for the async execute method
        import asyncio
        atom = AtomMetaAgent(tenant_id)
        
        # Create a new event loop for this thread if necessary
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        
        result = loop.run_until_complete(atom.execute(
            request=request,
            context=context,
            trigger_mode=AgentTriggerMode(trigger_mode_str)
        ))
        
        logger.info(f"Background worker: Execution completed for {tenant_id}")
        return result
        
    except Exception as e:
        logger.error(f"Background agent execution failed: {e}", exc_info=True)
        raise e