gateway/modules/CHATLOG_CREATION_OVERVIEW.md
2025-11-19 09:52:34 +01:00

429 lines
16 KiB
Markdown

# ChatLog Erzeugung - Übersicht
Diese Übersicht zeigt alle Stellen im `modules` Verzeichnis, wo ChatLog-Datensätze erzeugt werden.
## Status der Dokumentation
-**Kapitel 6, 5, 4**: Vollständig und korrekt dokumentiert
- 📋 **Kapitel 3**: Vollständig erweitert mit allen `progressLogStart/Update/Finish` Aufrufen
-**Kapitel 2, 1**: Vollständig dokumentiert (Service-Layer und Datenbank-Methoden)
## Erzeugungswege
ChatLog-Datensätze werden über zwei Hauptwege erzeugt:
1. **Direkter Weg**: `interfaceDbChatObjects.createLog()` - erstellt direkt in der Datenbank
2. **Service-Weg**: `mainServiceChat.storeLog()``interfaceDbChatObjects.createLog()` - erstellt über Service-Layer
## Übersicht nach Datei
### 1. `gateway/modules/interfaces/interfaceDbChatObjects.py`
**Hauptmethode für ChatLog-Erzeugung:**
- **Zeile 1042-1091**: `createLog()` - Direkte Erzeugung von ChatLog-Datensätzen in der Datenbank
- Wird von `storeLog()` aufgerufen
- Validiert Daten gegen ChatLog-Modell
- Erstellt Datensatz in normalisierter Tabelle
### 2. `gateway/modules/services/serviceChat/mainServiceChat.py`
**Service-Layer Methode:**
- **Zeile 605-622**: `storeLog()` - Wrapper um `createLog()`
- Fügt `workflowId` hinzu
- Synchronisiert mit in-memory workflow.logs Liste
- **Wird von vielen Stellen aufgerufen** (siehe unten)
### 3. `gateway/modules/shared/progressLogger.py`
**Progress-Logging System:**
- **Zeile 102-132**: `_logProgress()` - Erstellt ChatLog für Progress-Updates
- Wird von `startOperation()`, `updateOperation()`, `finishOperation()` aufgerufen
- Erstellt Logs für alle Progress-Updates während Operationen
- **Häufige Erzeugung**: Bei jedem Progress-Update wird ein ChatLog erstellt
**Alle Aufrufe von `progressLogStart()`, `progressLogUpdate()`, `progressLogFinish()`:**
#### 3.1. `gateway/modules/workflows/processing/workflowProcessor.py`
**Task Plan Generation:**
- **Zeile 51**: `progressLogStart()` - Start Task Plan Generation
```python
self.services.chat.progressLogStart(
operationId,
"Workflow Planning",
"Task Plan Generation",
f"Mode: {workflow.workflowMode.value}"
)
```
- **Zeile 68**: `progressLogUpdate(0.3)` - "Analyzing input"
- **Zeile 74**: `progressLogUpdate(0.8)` - "Creating plan"
- **Zeile 80**: `progressLogFinish(True)` - Erfolg
- **Zeile 86**: `progressLogFinish(False)` - Fehler
**Task Execution:**
- **Zeile 104**: `progressLogStart()` - Start Task Execution
```python
self.services.chat.progressLogStart(
operationId,
"Workflow Execution",
"Task Execution",
f"Task {taskIndex}"
)
```
- **Zeile 117**: `progressLogUpdate(0.2)` - "Executing"
- **Zeile 123**: `progressLogFinish(True)` - Erfolg
- **Zeile 129**: `progressLogFinish(False)` - Fehler
#### 3.2. `gateway/modules/services/serviceAi/mainServiceAi.py`
**AI Call with Looping (_callAiWithLooping):**
- **Zeile 198**: `progressLogUpdate(0.5)` - "Starting AI call iteration {iteration}" (erste Iteration)
- **Zeile 202**: `progressLogUpdate(baseProgress)` - "Continuing generation (iteration {iteration})" (weitere Iterationen)
- **Zeile 220**: `progressLogUpdate(0.51)` - "Calling AI model" (erste Iteration)
- **Zeile 239**: `progressLogUpdate(0.6)` - "AI response received (iteration {iteration})" (erste Iteration)
- **Zeile 242**: `progressLogUpdate(progress)` - "Processing response (iteration {iteration})" (weitere Iterationen)
- **Zeile 284**: `progressLogUpdate(0.65 + ...)` - "Extracted {len} sections (iteration {iteration})"
- **Zeile 304**: `progressLogUpdate(0.95)` - "Generation complete ({iteration} iterations, {len} sections)"
**AI Content Processing (callAiContent):**
- **Zeile 568**: `progressLogStart()` - Start AI Content Processing
```python
self.services.chat.progressLogStart(
aiOperationId,
"AI content processing",
"Content Processing",
f"Format: {outputFormat or 'text'}"
)
```
- **Zeile 593**: `progressLogUpdate(0.1)` - "Analyzing prompt parameters"
- **Zeile 613**: `progressLogUpdate(0.4)` - "Calling AI for image generation" (IMAGE_GENERATE)
- **Zeile 642**: `progressLogUpdate(0.9)` - "Image generated"
- **Zeile 643**: `progressLogFinish(True)` - Erfolg (IMAGE_GENERATE)
- **Zeile 653**: `progressLogFinish(False)` - Fehler (IMAGE_GENERATE)
- **Zeile 658**: `progressLogUpdate(0.4)` - "Calling AI for {opType.name}" (WEB_SEARCH/WEB_CRAWL)
- **Zeile 679**: `progressLogUpdate(0.9)` - "{opType.name} completed"
- **Zeile 680**: `progressLogFinish(True)` - Erfolg (WEB_SEARCH/WEB_CRAWL)
- **Zeile 689**: `progressLogFinish(False)` - Fehler (WEB_SEARCH/WEB_CRAWL)
- **Zeile 705**: `progressLogUpdate(0.3)` - "Building generation prompt" (Document Generation)
- **Zeile 719**: `progressLogUpdate(0.4)` - "Calling AI for content generation" (Document Generation)
- **Zeile 729**: `progressLogUpdate(0.7)` - "Parsing generated JSON" (Document Generation)
- **Zeile 736**: `progressLogFinish(False)` - Fehler JSON Parsing
- **Zeile 758**: `progressLogUpdate(0.8)` - "Rendering to {outputFormat} format" (Document Generation)
- **Zeile 796**: `progressLogFinish(True)` - Erfolg (Document Generation)
- **Zeile 806**: `progressLogFinish(False)` - Fehler Rendering
- **Zeile 810**: `progressLogUpdate(0.5)` - "Processing text call" (Text Processing)
- **Zeile 830**: `progressLogFinish(True)` - Erfolg (Text Processing)
- **Zeile 839**: `progressLogFinish(False)` - Fehler (Text Processing)
#### 3.3. `gateway/modules/services/serviceExtraction/mainServiceExtraction.py`
**Process Documents Per Chunk (processDocumentsPerChunk):**
- **Zeile 424**: `progressLogStart()` - Start Document Processing
```python
self.services.chat.progressLogStart(
operationId,
"AI Text Extract",
"Document Processing",
f"Processing {len(documents)} documents"
)
```
- **Zeile 451**: `progressLogUpdate(0.1)` - "Extracting content from {len} documents"
- **Zeile 456**: `progressLogFinish(False)` - Fehler bei Extraction
- **Zeile 461**: `progressLogUpdate(0.3)` - "Processing {len} extracted content parts"
- **Zeile 466**: `progressLogUpdate(0.9)` - "Merging {len} part results"
- **Zeile 473**: `progressLogFinish(True)` - Erfolg
- **Zeile 479**: `progressLogFinish(False)` - Fehler
- **Zeile 538**: `progressLogUpdate(progress)` - "Processing part {processedCount}/{totalParts}" (in Chunking Callback)
#### 3.4. `gateway/modules/workflows/methods/methodAi.py`
**AI Process (process):**
- **Zeile 52**: `progressLogStart()` - Start AI Processing
```python
self.services.chat.progressLogStart(
operationId,
"Generate",
"AI Processing",
f"Format: {parameters.get('resultType', 'txt')}"
)
```
- **Zeile 63**: `progressLogUpdate(0.2)` - "Preparing parameters"
- **Zeile 111**: `progressLogUpdate(0.3)` - "Extracting content from documents"
- **Zeile 145**: `progressLogUpdate(0.4)` - "Preparing AI call"
- **Zeile 155**: `progressLogUpdate(0.6)` - "Calling AI"
- **Zeile 166**: `progressLogUpdate(0.8)` - "Processing result"
- **Zeile 211**: `progressLogFinish(True)` - Erfolg
- **Zeile 220**: `progressLogFinish(False)` - Fehler
**Extract Content (extractContent):**
- **Zeile 251**: `progressLogStart()` - Start Content Extraction
```python
self.services.chat.progressLogStart(
operationId,
"Extracting content from documents",
"Content Extraction",
f"Documents: {len(parameters.documentList.references)}"
)
```
- **Zeile 259**: `progressLogUpdate(0.2)` - "Loading documents"
- **Zeile 263**: `progressLogFinish(False)` - Fehler (keine Dokumente)
- **Zeile 269**: `progressLogUpdate(0.3)` - "Preparing extraction options"
- **Zeile 286**: `progressLogUpdate(0.5)` - "Extracting content from {len} documents"
- **Zeile 290**: `progressLogUpdate(0.8)` - "Building result documents"
- **Zeile 301**: `progressLogFinish(True)` - Erfolg
- **Zeile 310**: `progressLogFinish(False)` - Fehler
**Generate Document (generateDocument):**
- **Zeile 341**: `progressLogStart()` - Start Document Generation
```python
self.services.chat.progressLogStart(...)
```
- **Zeile 359**: `progressLogFinish(True)` - Erfolg
- **Zeile 401**: `progressLogFinish(False)` - Fehler
#### 3.5. `gateway/modules/services/serviceWeb/mainServiceWeb.py`
**Research (research) - nur Updates, kein Start/Finish:**
- **Zeile 50**: `progressLogUpdate(0.1)` - "Analyzing research intent"
- **Zeile 75**: `progressLogUpdate(0.3)` - "Searching for URLs"
- **Zeile 87**: `progressLogUpdate(0.5)` - "Found {len} total URLs"
- **Zeile 102**: `progressLogUpdate(0.6)` - "Crawling {len} URLs"
- **Zeile 110**: `progressLogUpdate(0.9)` - "Consolidating results"
**Hinweis**: `serviceWeb` verwendet nur `progressLogUpdate()`, aber kein `progressLogStart()` oder `progressLogFinish()`. Dies könnte ein Bug sein oder die Operation wird von einem anderen Service gestartet/beendet.
### 4. `gateway/modules/workflows/workflowManager.py`
**Workflow-Management - 11 ChatLog-Erzeugungen:**
- **Zeile 58**: Workflow gestoppt für neuen Prompt
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow stopped for new prompt",
"type": "info",
"status": "stopped",
"progress": 1.0
})
```
- **Zeile 79**: Workflow fortgesetzt
```python
self.services.chat.storeLog(workflow, {
"message": f"Workflow resumed (round {workflow.currentRound}) with mode: {workflowMode}",
"type": "info",
"status": "running",
"progress": 0
})
```
- **Zeile 140**: Workflow gestoppt (workflowStop)
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow stopped",
"type": "warning",
"status": "stopped",
"progress": 1.0
})
```
- **Zeile 635**: Workflow gestoppt durch Benutzer (in _processWorkflowResults)
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow stopped by user",
"type": "warning",
"status": "stopped",
"progress": 1.0
})
```
- **Zeile 674**: Workflow fehlgeschlagen (in _processWorkflowResults)
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow failed: Unknown error",
"type": "error",
"status": "failed",
"progress": 1.0
})
```
- **Zeile 762**: Workflow abgeschlossen (in _sendLastMessage)
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow completed",
"type": "success",
"status": "completed",
"progress": 1.0
})
```
- **Zeile 837**: Workflow gestoppt (in _handleWorkflowStop)
```python
self.services.chat.storeLog(workflow, {
"message": "Workflow stopped by user",
"type": "warning",
"status": "stopped",
"progress": 1.0
})
```
- **Zeile 880**: Workflow-Fehler (in _handleWorkflowError)
```python
self.services.chat.storeLog(workflow, {
"message": f"Workflow failed: {str(error)}",
"type": "error",
"status": "failed",
"progress": 1.0
})
```
- **Zeile 931**: Binäre Datei Info (in _processFileIds - Neutralization)
```python
self.services.chat.storeLog(workflow, {
"message": infoMsg,
"type": "info",
"status": "running",
"progress": 50
})
```
- **Zeile 964**: Neutralization Fehler (in _processFileIds)
```python
self.services.chat.storeLog(workflow, {
"message": errorMsg,
"type": "error",
"status": "error",
"progress": -1
})
```
- **Zeile 974**: Neutralization Fehler (Exception) (in _processFileIds)
```python
self.services.chat.storeLog(workflow, {
"message": errorMsg,
"type": "error",
"status": "error",
"progress": -1
})
```
- **Zeile 999**: Datei-Verarbeitungsfehler (in _processFileIds)
```python
self.services.chat.storeLog(workflow, {
"message": errorMsg,
"type": "error",
"status": "error",
"progress": -1
})
```
### 5. `gateway/modules/workflows/processing/core/actionExecutor.py`
**Action Execution:**
- **Zeile 148**: Action-Fehler
```python
self.services.chat.storeLog(workflow, {
"message": f"❌ **Task {taskNum}****Action {actionNum}** failed: {result.error}",
"type": "error",
"progress": 1.0
})
```
### 6. `gateway/modules/services/serviceExtraction/mainServiceExtraction.py`
**Extraction Service:**
- **Zeile 553**: Chunking Progress Callback
```python
self.services.chat.storeLog(workflow, logData)
```
- Wird während AI-Chunking aufgerufen
- **Häufige Erzeugung**: Bei jedem Chunking-Progress-Update
## Zusammenfassung nach Kategorie
### ✅ Kapitel 6, 5, 4: Korrekt dokumentiert
Diese Kapitel sind vollständig und korrekt dokumentiert:
- **Kapitel 6**: Extraction Service Chunking (`mainServiceExtraction.py` Zeile 553)
- **Kapitel 5**: Action Executor (`actionExecutor.py` Zeile 148)
- **Kapitel 4**: Workflow Manager (`workflowManager.py` - 11 Stellen)
### 📋 Kapitel 3: ProgressLogger Aufrufe - Vollständige Liste
**Alle Aufrufe von `progressLogStart()`, `progressLogUpdate()`, `progressLogFinish()`:**
**Gesamtanzahl Aufrufe:**
- **startOperation**: 7 Aufrufe
- workflowProcessor.py: 2x (Task Plan, Task Execution)
- mainServiceAi.py: 1x (AI Content Processing)
- mainServiceExtraction.py: 1x (Document Processing)
- methodAi.py: 3x (AI Process, Extract Content, Generate Document)
- **updateOperation**: ~35+ Aufrufe
- workflowProcessor.py: 2x
- mainServiceAi.py: ~15x (AI Looping + Content Processing)
- mainServiceExtraction.py: 4x (+ Chunking Callback)
- methodAi.py: 8x
- mainServiceWeb.py: 5x (ohne Start/Finish!)
- **finishOperation**: ~15 Aufrufe
- workflowProcessor.py: 4x (2x Success, 2x Failure)
- mainServiceAi.py: ~6x (verschiedene Operationen)
- mainServiceExtraction.py: 2x
- methodAi.py: 6x
**Problematische Stellen:**
1. **Zu viele Update-Aufrufe**: Besonders in `_callAiWithLooping()` werden bei jeder Iteration mehrere Updates erstellt
2. **Fehlende Start/Finish**: `mainServiceWeb.py` verwendet nur Updates ohne Start/Finish
3. **Redundante Updates**: Viele Updates mit ähnlichen Progress-Werten (z.B. 0.4, 0.5, 0.6)
### 📋 Kapitel 2 und 1: Vollständig dokumentiert
- **Kapitel 2**: `mainServiceChat.storeLog()` - Service-Layer Methode
- **Kapitel 1**: `interfaceDbChatObjects.createLog()` - Datenbank-Methode
## Empfehlungen zur Reduzierung
1. **ProgressLogger**:
- Nur bei Start/Finish loggen, nicht bei jedem Update
- Oder: Batch-Updates alle N Sekunden
2. **Chunking Progress**:
- Nur bei wichtigen Meilensteinen (z.B. 25%, 50%, 75%, 100%)
- Nicht bei jedem einzelnen Chunk
3. **Workflow Status**:
- Behalten, aber Duplikate entfernen (z.B. mehrere "stopped" Logs)
4. **Fehler-Logging**:
- Nur kritische Fehler loggen, nicht alle Warnungen/Infos
## Statistik
### ChatLog-Erzeugungen nach Quelle:
1. **ProgressLogger (Kapitel 3)**: ~57+ Aufrufe
- 7x `startOperation()` → erzeugt ChatLog
- ~35+ `updateOperation()` → erzeugt ChatLog bei jedem Update
- ~15x `finishOperation()` → erzeugt ChatLog
- **Häufigste Quelle** - kann bei langen Operationen sehr viele Logs erzeugen
2. **Extraction Service Chunking (Kapitel 6)**: Variable Häufigkeit
- Wird bei jedem Chunking-Progress-Update aufgerufen
- **Zweithäufigste Quelle** - abhängig von Anzahl der Chunks
3. **Workflow Manager (Kapitel 4)**: 11 feste Stellen
- Workflow Status-Änderungen (einmalig pro Status-Übergang)
- Fehler-Logging bei Datei-Verarbeitung
4. **Action Executor (Kapitel 5)**: 1 Stelle
- Action-Fehler-Logging
### Gesamtübersicht:
- **Direkte `storeLog()` Aufrufe**: 12 Stellen (Kapitel 4, 5, 6)
- **ProgressLogger Aufrufe**: ~57+ Stellen (Kapitel 3)
- **Gesamtanzahl Code-Stellen**: ~70+ Stellen
- **Potenzial für Reduzierung**:
- ProgressLogger: ~35+ Update-Aufrufe könnten reduziert werden
- Chunking: Variable, abhängig von Chunk-Anzahl