239 lines
9.6 KiB
Markdown
239 lines
9.6 KiB
Markdown
# Workflow Implementation Gaps Analysis
|
|
|
|
## Overview
|
|
|
|
After refactoring the AI process for fast track and full track, the workflow implementation does not match the architecture described in `ai_plan_architecture.md`. This document identifies the gaps and missing implementations.
|
|
|
|
---
|
|
|
|
## Critical Issues Found
|
|
|
|
### 1. ❌ Fast Path Implementation Missing
|
|
|
|
**Architecture Requirement** (`ai_plan_architecture.md` lines 377-395):
|
|
- `detectComplexity()` function to determine "simple" | "moderate" | "complex"
|
|
- `fastPathExecute()` function for simple requests (5-15s)
|
|
- Fast path should skip full workflow and return directly
|
|
|
|
**Current Implementation**:
|
|
- ❌ **NO** `detectComplexity()` function found
|
|
- ❌ **NO** `fastPathExecute()` function found
|
|
- ❌ **NO** complexity detection before workflow execution
|
|
- ✅ User intention analysis exists but doesn't route to fast path
|
|
|
|
**Location**: Should be in `workflowManager.py` before `_planTasks()`
|
|
|
|
**Impact**: All requests go through full workflow, even simple ones that could be answered in 5-15s.
|
|
|
|
---
|
|
|
|
### 2. ❌ Task Numbering Always Shows "Task 0"
|
|
|
|
**Architecture Requirement** (`ai_plan_architecture.md` lines 117-152):
|
|
- `ChatWorkflow.currentTask` should increment properly
|
|
- `workflow.incrementTask()` should be called when starting new task
|
|
- Task numbers should be 1-indexed for display
|
|
|
|
**Current Implementation**:
|
|
- ✅ `ChatWorkflow.currentTask` field exists
|
|
- ✅ `_updateWorkflowBeforeExecutingTask()` exists in `modeDynamic.py` (line 902)
|
|
- ❌ **NOT CALLED** from `workflowManager._executeTasks()` (line 368)
|
|
- ❌ Task index calculation uses `idx + 1` but never updates `workflow.currentTask`
|
|
- ❌ Messages show `taskNumber: 0` because `currentTask` is never incremented
|
|
|
|
**Problem Location**: `workflowManager.py` line 368-396
|
|
|
|
**Current Code**:
|
|
```python
|
|
for idx, taskStep in enumerate(taskPlan.tasks):
|
|
currentTaskIndex = idx + 1 # Calculated but never used to update workflow
|
|
logger.info(f"Task {currentTaskIndex}/{totalTasks}: {taskStep.objective}")
|
|
# ... task execution ...
|
|
taskResult = await handling.executeTask(taskStep, workflow, taskContext)
|
|
# ❌ Missing: workflow.currentTask = currentTaskIndex
|
|
# ❌ Missing: workflow.incrementTask() or updateWorkflowBeforeExecutingTask()
|
|
```
|
|
|
|
**Fix Required**:
|
|
```python
|
|
for idx, taskStep in enumerate(taskPlan.tasks):
|
|
currentTaskIndex = idx + 1
|
|
logger.info(f"Task {currentTaskIndex}/{totalTasks}: {taskStep.objective}")
|
|
|
|
# ✅ ADD: Update workflow before executing task
|
|
handling.updateWorkflowBeforeExecutingTask(currentTaskIndex)
|
|
|
|
# ... task execution ...
|
|
taskResult = await handling.executeTask(taskStep, workflow, taskContext)
|
|
```
|
|
|
|
**Impact**: UI always shows "Task 0" instead of "Task 1", "Task 2", etc.
|
|
|
|
---
|
|
|
|
### 3. ❌ User Language Not in ChatMessages
|
|
|
|
**Architecture Requirement** (`ai_plan_architecture.md` lines 1300-1321):
|
|
- ChatMessages should contain user-friendly text in **user's language**
|
|
- User-facing workflows: Full `ChatMessage` with user language
|
|
- Process automation: Minimal `ChatMessage` (system role)
|
|
|
|
**Current Implementation**:
|
|
- ✅ User language detection exists (`workflowManager.py` line 256-277)
|
|
- ✅ `userMessage` field exists in `TaskStep` and `TaskPlan`
|
|
- ❌ **Messages use technical text** instead of user-friendly language
|
|
- ❌ **No AI-generated user messages** in user's language
|
|
- ❌ Messages show action names (`ai.process`, `outlook.readMails`) instead of user-friendly descriptions
|
|
|
|
**Problem Locations**:
|
|
1. `messageCreator.py` line 136-145: Uses `action.userMessage` if available, but this is often missing
|
|
2. `messageCreator.py` line 77: Task start message is just `"🚀 **Task {taskProgress}**"` - no user-friendly text
|
|
3. `messageCreator.py` line 204: Task completion message is generic `"✅ Task completed successfully"` - not in user language
|
|
|
|
**Example Current Message**:
|
|
```
|
|
🚀 **Task 1**
|
|
|
|
💬 Analyze the provided documents and extract key information
|
|
```
|
|
|
|
**Should Be** (in user's language, e.g., German):
|
|
```
|
|
🚀 **Aufgabe 1**
|
|
|
|
💬 Ich analysiere die bereitgestellten Dokumente und extrahiere die wichtigsten Informationen für Sie.
|
|
```
|
|
|
|
**Fix Required**:
|
|
1. Generate user-friendly messages in user's language during task planning
|
|
2. Store user messages in `TaskStep.userMessage` (already exists but not populated)
|
|
3. Use user messages in `messageCreator.py` instead of technical action names
|
|
|
|
**Impact**: Users see technical messages instead of friendly, localized messages.
|
|
|
|
---
|
|
|
|
### 4. ❌ Workflow-Level Architecture Not Implemented
|
|
|
|
**Architecture Requirement** (`ai_plan_architecture.md` lines 368-428):
|
|
- `RequestContext` model for normalized request
|
|
- `UnderstandingResult` model for initial understanding
|
|
- `TaskDefinition` model with `extractionOptions`
|
|
- `TaskResult` model for task results
|
|
- `persistTaskResult()` function to create ChatMessages
|
|
|
|
**Current Implementation**:
|
|
- ❌ **NO** `RequestContext` model
|
|
- ❌ **NO** `UnderstandingResult` model
|
|
- ❌ **NO** `TaskDefinition` model (using `TaskStep` instead)
|
|
- ❌ **NO** `TaskResult` model (using `ActionResult` instead)
|
|
- ❌ **NO** `persistTaskResult()` function
|
|
- ✅ `TaskStep` exists but doesn't match `TaskDefinition` structure
|
|
|
|
**Impact**: Workflow-level architecture described in `ai_plan_architecture.md` is not implemented. The system uses old `TaskStep` model instead of new `TaskDefinition` model.
|
|
|
|
---
|
|
|
|
### 5. ❌ Initial Understanding Phase Missing
|
|
|
|
**Architecture Requirement** (`ai_plan_architecture.md` lines 411-414):
|
|
- `initialUnderstanding(context)` → `UnderstandingResult`
|
|
- Combined AI call: parameters + intention + context + tasks
|
|
- Creates `TaskDefinition[]` from `UnderstandingResult`
|
|
|
|
**Current Implementation**:
|
|
- ✅ User intention analysis exists (`workflowManager.py` line 221-289)
|
|
- ❌ **NOT** structured as `initialUnderstanding()` function
|
|
- ❌ **NOT** returning `UnderstandingResult` model
|
|
- ❌ **NOT** creating `TaskDefinition[]` - creates `TaskStep[]` instead
|
|
- ❌ **NO** combined AI call - separate calls for different purposes
|
|
|
|
**Impact**: Initial understanding phase doesn't match architecture. Uses old approach instead of new unified `UnderstandingResult` model.
|
|
|
|
---
|
|
|
|
## Summary of Missing Implementations
|
|
|
|
| Component | Status | Priority | Location |
|
|
|-----------|--------|----------|----------|
|
|
| Fast Path (`fastPathExecute`) | ❌ Missing | 🔴 Critical | `workflowManager.py` |
|
|
| Complexity Detection (`detectComplexity`) | ❌ Missing | 🔴 Critical | `workflowManager.py` |
|
|
| Task Numbering Update | ❌ Not Called | 🔴 Critical | `workflowManager._executeTasks()` |
|
|
| User Language Messages | ⚠️ Partial | 🟡 High | `messageCreator.py` |
|
|
| RequestContext Model | ❌ Missing | 🟡 High | `datamodelWorkflow.py` |
|
|
| UnderstandingResult Model | ❌ Missing | 🟡 High | `datamodelWorkflow.py` |
|
|
| TaskDefinition Model | ❌ Missing | 🟡 High | `datamodelWorkflow.py` |
|
|
| TaskResult Model | ❌ Missing | 🟡 High | `datamodelWorkflow.py` |
|
|
| persistTaskResult() | ❌ Missing | 🟡 High | `workflowProcessor.py` |
|
|
| initialUnderstanding() | ❌ Missing | 🟡 High | `workflowProcessor.py` |
|
|
|
|
---
|
|
|
|
## Recommended Fix Order
|
|
|
|
### Phase 1: Critical Fixes (Immediate)
|
|
1. **Fix Task Numbering** (30 min)
|
|
- Call `updateWorkflowBeforeExecutingTask()` in `workflowManager._executeTasks()`
|
|
- Verify `currentTask` increments properly
|
|
|
|
2. **Add Fast Path Detection** (2 hours)
|
|
- Implement `detectComplexity()` function
|
|
- Add routing logic to `fastPathExecute()` for simple requests
|
|
- Test with simple vs. complex prompts
|
|
|
|
### Phase 2: User Experience (High Priority)
|
|
3. **Generate User-Friendly Messages** (4 hours)
|
|
- Add AI call to generate user messages in user's language
|
|
- Update `messageCreator.py` to use user messages
|
|
- Test with different languages
|
|
|
|
### Phase 3: Architecture Alignment (Medium Priority)
|
|
4. **Implement Workflow-Level Models** (8 hours)
|
|
- Create `RequestContext`, `UnderstandingResult`, `TaskDefinition`, `TaskResult` models
|
|
- Migrate from `TaskStep` to `TaskDefinition`
|
|
- Update all call sites
|
|
|
|
5. **Implement Initial Understanding** (4 hours)
|
|
- Create `initialUnderstanding()` function
|
|
- Return `UnderstandingResult` model
|
|
- Create `TaskDefinition[]` from result
|
|
|
|
---
|
|
|
|
## Code References
|
|
|
|
### Current Task Execution Flow
|
|
- **Entry Point**: `workflowManager.py` line 166 → `_executeTasks()`
|
|
- **Task Loop**: `workflowManager.py` line 368-396
|
|
- **Task Execution**: `workflowProcessor.py` → `executeTask()`
|
|
- **Message Creation**: `messageCreator.py` → `createTaskStartMessage()`, `createActionMessage()`
|
|
|
|
### Missing Fast Path Flow
|
|
- **Should Be**: `workflowManager.py` → `detectComplexity()` → `fastPathExecute()` OR `_planTasks()`
|
|
- **Currently**: Always goes to `_planTasks()` → `_executeTasks()`
|
|
|
|
### Task Numbering Issue
|
|
- **Problem**: `workflowManager._executeTasks()` line 369 calculates `currentTaskIndex` but never updates `workflow.currentTask`
|
|
- **Solution**: Call `handling.updateWorkflowBeforeExecutingTask(currentTaskIndex)` before `executeTask()`
|
|
|
|
---
|
|
|
|
## Testing Checklist
|
|
|
|
After fixes, verify:
|
|
- [ ] Simple requests use fast path (5-15s response time)
|
|
- [ ] Complex requests use full workflow (30-120s response time)
|
|
- [ ] Task numbers increment correctly (Task 1, Task 2, Task 3...)
|
|
- [ ] ChatMessages contain user-friendly text in user's language
|
|
- [ ] User messages are generated, not technical action names
|
|
- [ ] Workflow state (`currentTask`, `currentRound`, `currentAction`) updates correctly
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
1. **Immediate**: Fix task numbering (30 min fix, high impact)
|
|
2. **This Week**: Implement fast path detection and routing
|
|
3. **Next Sprint**: Add user-friendly message generation
|
|
4. **Future**: Migrate to workflow-level models (`TaskDefinition`, `UnderstandingResult`, etc.)
|
|
|