import logging from typing import Optional from modules.datamodels.datamodelUam import User from modules.datamodels.datamodelChat import ChatWorkflow, UserInputRequest from modules.workflows.workflowManager import WorkflowManager from modules.services import getInterface as getServices logger = logging.getLogger(__name__) async def chatStart(interfaceDbChat, currentUser: User, userInput: UserInputRequest, workflowId: Optional[str] = None, workflowMode: str = "Actionplan") -> ChatWorkflow: """ Starts a new chat or continues an existing one, then launches processing asynchronously. Args: interfaceDbChat: Chat interface instance currentUser: Current user userInput: User input request workflowId: Optional workflow ID to continue existing workflow workflowMode: "Actionplan" for traditional task planning, "React" for iterative react-style processing Example usage for React mode: workflow = await chatStart(interfaceDbChat, currentUser, userInput, workflowMode="React") """ try: services = getServices(currentUser, None) workflowManager = WorkflowManager(services) workflow = await workflowManager.workflowStart(userInput, workflowId, workflowMode) return workflow except Exception as e: logger.error(f"Error starting chat: {str(e)}") raise async def chatStop(interfaceDbChat, currentUser: User, workflowId: str) -> ChatWorkflow: """Stops a running chat.""" try: services = getServices(currentUser, None) workflowManager = WorkflowManager(services) return await workflowManager.workflowStop(workflowId) except Exception as e: logger.error(f"Error stopping chat: {str(e)}") raise