45 lines
2 KiB
Python
45 lines
2 KiB
Python
# modeBase.py
|
|
# Abstract base class for workflow modes
|
|
|
|
from abc import ABC, abstractmethod
|
|
import logging
|
|
from typing import List, Dict, Any
|
|
from modules.datamodels.datamodelChat import TaskStep, TaskContext, TaskResult, ActionItem
|
|
from modules.datamodels.datamodelChat import ChatWorkflow
|
|
from modules.workflows.processing.core.taskPlanner import TaskPlanner
|
|
from modules.workflows.processing.core.actionExecutor import ActionExecutor
|
|
from modules.workflows.processing.core.messageCreator import MessageCreator
|
|
from modules.workflows.processing.core.validator import WorkflowValidator
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
class BaseMode(ABC):
|
|
"""Abstract base class for workflow execution modes"""
|
|
|
|
def __init__(self, services):
|
|
self.services = services
|
|
self.taskPlanner = TaskPlanner(services)
|
|
self.actionExecutor = ActionExecutor(services)
|
|
self.messageCreator = MessageCreator(services)
|
|
self.validator = WorkflowValidator(services)
|
|
|
|
|
|
@abstractmethod
|
|
async def executeTask(self, taskStep: TaskStep, workflow: ChatWorkflow, context: TaskContext,
|
|
taskIndex: int = None, totalTasks: int = None) -> TaskResult:
|
|
"""Execute a task step - must be implemented by concrete modes"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
async def generateActionItems(self, taskStep: TaskStep, workflow: ChatWorkflow,
|
|
previousResults: List = None, enhancedContext: TaskContext = None) -> List[ActionItem]:
|
|
"""Generate actions for a task step - must be implemented by concrete modes"""
|
|
pass
|
|
|
|
async def generateTaskPlan(self, userInput: str, workflow: ChatWorkflow):
|
|
"""Generate task plan - common to all modes"""
|
|
return await self.taskPlanner.generateTaskPlan(userInput, workflow)
|
|
|
|
async def createTaskPlanMessage(self, taskPlan, workflow: ChatWorkflow):
|
|
"""Create task plan message - common to all modes"""
|
|
return await self.messageCreator.createTaskPlanMessage(taskPlan, workflow)
|