cleaned chatmanager with pydantic models
This commit is contained in:
parent
5687b1aec7
commit
53a4a39214
11 changed files with 520 additions and 389 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -15,8 +15,8 @@ from modules.interfaces.interfaceChatObjects import getInterface as getChatObjec
|
|||
from modules.interfaces.interfaceChatModel import ActionResult
|
||||
from modules.interfaces.interfaceComponentObjects import getInterface as getComponentObjects
|
||||
from modules.interfaces.interfaceAppObjects import getInterface as getAppObjects
|
||||
from modules.workflow.processorDocument import DocumentProcessor
|
||||
from modules.workflow.methodBase import MethodBase
|
||||
from modules.chat.processorDocument import DocumentProcessor
|
||||
from modules.chat.methodBase import MethodBase
|
||||
import uuid
|
||||
import base64
|
||||
import hashlib
|
||||
|
|
@ -454,3 +454,75 @@ register_model_labels(
|
|||
"tasks": {"en": "Tasks", "fr": "Tâches"}
|
||||
}
|
||||
)
|
||||
|
||||
# ====== WORKFLOW SUPPORT MODELS (for managerChat.py compatibility) ======
|
||||
|
||||
class TaskStep(BaseModel, ModelMixin):
|
||||
id: str
|
||||
description: str
|
||||
dependencies: Optional[list[str]] = []
|
||||
expected_outputs: Optional[list[str]] = []
|
||||
success_criteria: Optional[list[str]] = []
|
||||
required_documents: Optional[list[str]] = []
|
||||
estimated_complexity: Optional[str] = None
|
||||
ai_prompt: Optional[str] = None
|
||||
|
||||
class TaskContext(BaseModel, ModelMixin):
|
||||
task_step: TaskStep
|
||||
workflow: Optional['ChatWorkflow'] = None
|
||||
workflow_id: Optional[str] = None
|
||||
available_documents: Optional[list[str]] = []
|
||||
previous_results: Optional[list[str]] = []
|
||||
improvements: Optional[list[str]] = []
|
||||
retry_count: Optional[int] = 0
|
||||
previous_action_results: Optional[list] = []
|
||||
previous_review_result: Optional[dict] = None
|
||||
is_regeneration: Optional[bool] = False
|
||||
failure_patterns: Optional[list[str]] = []
|
||||
failed_actions: Optional[list] = []
|
||||
successful_actions: Optional[list] = []
|
||||
|
||||
class ActionExecutionResult(BaseModel, ModelMixin):
|
||||
success: bool
|
||||
data: dict
|
||||
metadata: dict = {}
|
||||
error: Optional[str] = None
|
||||
actionId: Optional[str] = None
|
||||
actionMethod: Optional[str] = None
|
||||
actionName: Optional[str] = None
|
||||
documents: Optional[list] = []
|
||||
validation: Optional[dict] = {}
|
||||
is_retry: Optional[bool] = False
|
||||
previous_error: Optional[str] = None
|
||||
applied_improvements: Optional[list[str]] = []
|
||||
|
||||
class ReviewContext(BaseModel, ModelMixin):
|
||||
task_step: TaskStep
|
||||
task_actions: Optional[list] = []
|
||||
action_results: Optional[list] = []
|
||||
step_result: Optional[dict] = {}
|
||||
workflow_id: Optional[str] = None
|
||||
previous_results: Optional[list[str]] = []
|
||||
|
||||
class ReviewResult(BaseModel, ModelMixin):
|
||||
status: str
|
||||
reason: Optional[str] = None
|
||||
improvements: Optional[list[str]] = []
|
||||
quality_score: Optional[int] = 5
|
||||
missing_outputs: Optional[list[str]] = []
|
||||
met_criteria: Optional[list[str]] = []
|
||||
unmet_criteria: Optional[list[str]] = []
|
||||
confidence: Optional[float] = 0.5
|
||||
|
||||
class TaskPlan(BaseModel, ModelMixin):
|
||||
overview: str
|
||||
tasks: list[TaskStep]
|
||||
|
||||
class WorkflowResult(BaseModel, ModelMixin):
|
||||
status: str
|
||||
completed_tasks: int
|
||||
total_tasks: int
|
||||
execution_time: float
|
||||
final_results_count: int
|
||||
error: Optional[str] = None
|
||||
phase: Optional[str] = None
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import logging
|
|||
import uuid
|
||||
from datetime import datetime, UTC
|
||||
|
||||
from modules.workflow.methodBase import MethodBase, ActionResult, action
|
||||
from modules.chat.methodBase import MethodBase, ActionResult, action
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from typing import Dict, Any, List, Optional
|
|||
import uuid
|
||||
from datetime import datetime, UTC
|
||||
|
||||
from modules.workflow.methodBase import MethodBase, ActionResult, action
|
||||
from modules.chat.methodBase import MethodBase, ActionResult, action
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from datetime import datetime, UTC
|
|||
import json
|
||||
import uuid
|
||||
|
||||
from modules.workflow.methodBase import MethodBase, ActionResult, action
|
||||
from modules.chat.methodBase import MethodBase, ActionResult, action
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from datetime import datetime, UTC
|
|||
import json
|
||||
import uuid
|
||||
|
||||
from modules.workflow.methodBase import MethodBase, ActionResult, action
|
||||
from modules.chat.methodBase import MethodBase, ActionResult, action
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from bs4 import BeautifulSoup
|
|||
import time
|
||||
import uuid
|
||||
|
||||
from modules.workflow.methodBase import MethodBase, ActionResult, action
|
||||
from modules.chat.methodBase import MethodBase, ActionResult, action
|
||||
from modules.shared.configuration import APP_CONFIG
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,8 @@ from modules.interfaces.interfaceAppObjects import User
|
|||
|
||||
from modules.interfaces.interfaceChatModel import (UserInputRequest, ChatMessage, ChatWorkflow, TaskItem, TaskStatus)
|
||||
from modules.interfaces.interfaceChatObjects import ChatObjects
|
||||
from modules.workflow.managerChat import ChatManager
|
||||
from modules.chat.managerChat import ChatManager
|
||||
from modules.interfaces.interfaceChatModel import WorkflowResult
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -179,15 +180,15 @@ class WorkflowManager:
|
|||
logger.error(f"Error sending last message: {str(e)}")
|
||||
raise
|
||||
|
||||
async def _processWorkflowResults(self, workflow: ChatWorkflow, workflow_result: Dict[str, Any], initial_message: ChatMessage) -> None:
|
||||
async def _processWorkflowResults(self, workflow: ChatWorkflow, workflow_result: WorkflowResult, initial_message: ChatMessage) -> None:
|
||||
"""Process workflow results and create appropriate messages"""
|
||||
try:
|
||||
if workflow_result.get('status') == 'failed':
|
||||
if workflow_result.status == 'failed':
|
||||
# Create error message
|
||||
error_message = {
|
||||
"workflowId": workflow.id,
|
||||
"role": "assistant",
|
||||
"message": f"Workflow failed: {workflow_result.get('error', 'Unknown error')}",
|
||||
"message": f"Workflow failed: {workflow_result.error or 'Unknown error'}",
|
||||
"status": "last",
|
||||
"sequenceNr": len(workflow.messages) + 1,
|
||||
"publishedAt": datetime.now(UTC).isoformat()
|
||||
|
|
@ -205,41 +206,11 @@ class WorkflowManager:
|
|||
})
|
||||
return
|
||||
|
||||
# Process successful workflow results
|
||||
workflow_results = workflow_result.get('workflow_results', [])
|
||||
|
||||
for i, result in enumerate(workflow_results):
|
||||
task_step = result['task_step']
|
||||
action_results = result['action_results']
|
||||
review_result = result['review_result']
|
||||
|
||||
# Create message for task step
|
||||
step_message = {
|
||||
"workflowId": workflow.id,
|
||||
"role": "assistant",
|
||||
"message": f"Completed task: {task_step.get('description', 'Unknown')}",
|
||||
"status": "step",
|
||||
"sequenceNr": len(workflow.messages) + 1,
|
||||
"publishedAt": datetime.now(UTC).isoformat()
|
||||
}
|
||||
|
||||
# Add action details if available
|
||||
if action_results:
|
||||
successful_actions = [r for r in action_results if r.get('status') == 'completed']
|
||||
step_message["message"] += f"\nExecuted {len(successful_actions)}/{len(action_results)} actions successfully."
|
||||
|
||||
message = self.chatInterface.createWorkflowMessage(step_message)
|
||||
if message:
|
||||
workflow.messages.append(message)
|
||||
|
||||
# Create final summary message
|
||||
successful_tasks = workflow_result.get('successful_tasks', 0)
|
||||
total_tasks = workflow_result.get('total_tasks', 0)
|
||||
|
||||
# For successful workflows, create a simple completion message
|
||||
summary_message = {
|
||||
"workflowId": workflow.id,
|
||||
"role": "assistant",
|
||||
"message": f"Workflow completed successfully. Completed {successful_tasks}/{total_tasks} tasks.",
|
||||
"message": f"Workflow completed successfully. Completed {workflow_result.completed_tasks}/{workflow_result.total_tasks} tasks in {workflow_result.execution_time:.2f} seconds.",
|
||||
"status": "last",
|
||||
"sequenceNr": len(workflow.messages) + 1,
|
||||
"publishedAt": datetime.now(UTC).isoformat()
|
||||
|
|
|
|||
Loading…
Reference in a new issue