73 lines
3.8 KiB
Python
73 lines
3.8 KiB
Python
import logging
|
|
from typing import Dict, Any, List
|
|
from modules.interfaces.interfaceAppModel import User
|
|
from modules.interfaces.interfaceChatModel import ChatWorkflow, UserInputRequest, TaskStep, TaskAction, ActionExecutionResult, ReviewResult, TaskPlan, WorkflowResult, TaskContext
|
|
from modules.chat.serviceCenter import ServiceCenter
|
|
from modules.interfaces.interfaceChatObjects import ChatObjects
|
|
from .handling.handlingTasks import HandlingTasks
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# ===== STATE MANAGEMENT AND VALIDATION CLASSES =====
|
|
|
|
class ChatManager:
|
|
"""Chat manager with improved AI integration and method handling"""
|
|
|
|
def __init__(self, currentUser: User, chatInterface: ChatObjects):
|
|
self.currentUser = currentUser
|
|
self.chatInterface = chatInterface
|
|
self.service: ServiceCenter = None
|
|
self.workflow: ChatWorkflow = None
|
|
self.handlingTasks: HandlingTasks = None
|
|
|
|
async def initialize(self, workflow: ChatWorkflow) -> None:
|
|
"""Initialize chat manager with workflow"""
|
|
self.workflow = workflow
|
|
self.service = ServiceCenter(self.currentUser, self.workflow)
|
|
self.handlingTasks = HandlingTasks(self.chatInterface, self.service, self.workflow)
|
|
|
|
async def executeUnifiedWorkflow(self, userInput: UserInputRequest, workflow: ChatWorkflow) -> WorkflowResult:
|
|
"""Unified Workflow Execution"""
|
|
try:
|
|
logger.info(f"Starting unified workflow execution for workflow {workflow.id}")
|
|
# Phase 1: High-Level Task Planning
|
|
task_plan = await self.handlingTasks.planHighLevelTasks(userInput.userRequest, workflow)
|
|
if not task_plan or not task_plan.tasks:
|
|
raise Exception("No tasks generated in task plan.")
|
|
workflow.taskPlan = task_plan
|
|
# Phase 2-5: For each task, define actions, execute, review, and handover
|
|
all_task_results = []
|
|
for idx, task_step in enumerate(task_plan.tasks):
|
|
logger.info(f"Processing task {idx+1}/{len(task_plan.tasks)}: {task_step.description}")
|
|
# Define actions
|
|
previous_results = self.handlingTasks.getPreviousResults(task_step) if hasattr(self.handlingTasks, 'getPreviousResults') else []
|
|
actions = await self.handlingTasks.defineTaskActions(task_step, workflow, previous_results=previous_results)
|
|
if not actions:
|
|
logger.warning(f"No actions defined for task {task_step.id}, skipping.")
|
|
continue
|
|
# Execute actions
|
|
action_results = await self.handlingTasks.executeTaskActions(actions, workflow)
|
|
# Review completion
|
|
review_result = await self.handlingTasks.reviewTaskCompletion(task_step, actions, action_results, workflow)
|
|
# Handover
|
|
handover_data = await self.handlingTasks.prepareTaskHandover(task_step, actions, review_result, workflow)
|
|
# Collect results
|
|
all_task_results.append({
|
|
'task_step': task_step,
|
|
'actions': actions,
|
|
'action_results': action_results,
|
|
'review_result': review_result,
|
|
'handover_data': handover_data
|
|
})
|
|
# Final workflow result
|
|
workflow_result = WorkflowResult(
|
|
status="completed",
|
|
task_results=all_task_results,
|
|
workflow=workflow
|
|
)
|
|
logger.info(f"Unified workflow execution completed for workflow {workflow.id}")
|
|
return workflow_result
|
|
except Exception as e:
|
|
logger.error(f"Error in executeUnifiedWorkflow: {str(e)}")
|
|
from modules.interfaces.interfaceChatModel import WorkflowResult
|
|
return WorkflowResult(status="failed", task_results=[], workflow=workflow)
|