135 lines
3.8 KiB
Markdown
135 lines
3.8 KiB
Markdown
|
|
# Deployment-Checkliste: Prod vs. Dev Retrieval-Problem
|
||
|
|
|
||
|
|
**Datum**: 2026-01-12
|
||
|
|
**Version**: v4.5.10
|
||
|
|
**Status**: 🔴 Kritisch
|
||
|
|
|
||
|
|
## Problem
|
||
|
|
|
||
|
|
Prod-System findet keine Suchergebnisse, während Dev-System korrekt funktioniert. Identischer Code, identische Daten.
|
||
|
|
|
||
|
|
## Identifizierte Ursachen
|
||
|
|
|
||
|
|
### 1. 🔴 **KRITISCH: Alte EdgeDTO-Version in Prod**
|
||
|
|
|
||
|
|
**Symptom**:
|
||
|
|
```
|
||
|
|
ERROR: 1 validation error for EdgeDTO
|
||
|
|
provenance
|
||
|
|
Input should be 'explicit', 'rule', 'smart' or 'structure'
|
||
|
|
[type=literal_error, input_value='explicit:callout', input_type=str]
|
||
|
|
```
|
||
|
|
|
||
|
|
**Ursache**:
|
||
|
|
- Prod verwendet eine **alte Version** des `EdgeDTO`-Modells aus `app/models/dto.py`
|
||
|
|
- Die alte Version unterstützt nur: `"explicit", "rule", "smart", "structure"`
|
||
|
|
- Die neue Version (v4.5.3+) unterstützt: `"explicit:callout", "explicit:wikilink", "explicit:note_zone", ...`
|
||
|
|
|
||
|
|
**Lösung**:
|
||
|
|
- ✅ Code in `dto.py` ist bereits korrekt (Zeile 51-56)
|
||
|
|
- ⚠️ **Prod muss neu gestartet werden**, um die neue Version zu laden
|
||
|
|
- ⚠️ **Python-Modul-Cache leeren** falls nötig: `find . -type d -name __pycache__ -exec rm -r {} +`
|
||
|
|
|
||
|
|
### 2. ✅ Collection-Präfix korrekt
|
||
|
|
|
||
|
|
- Prod: `COLLECTION_PREFIX=mindnet` → `mindnet_chunks` ✅
|
||
|
|
- Dev: `COLLECTION_PREFIX=mindnet_dev` → `mindnet_dev_chunks` ✅
|
||
|
|
- **Kein Problem hier**
|
||
|
|
|
||
|
|
## Sofortmaßnahmen
|
||
|
|
|
||
|
|
### Schritt 1: Code-Verifikation in Prod
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# In Prod-System
|
||
|
|
cd /path/to/mindnet
|
||
|
|
grep -A 10 "provenance.*Literal" app/models/dto.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**Erwartete Ausgabe**:
|
||
|
|
```python
|
||
|
|
provenance: Optional[Literal[
|
||
|
|
"explicit", "rule", "smart", "structure",
|
||
|
|
"explicit:callout", "explicit:wikilink", "explicit:note_zone", ...
|
||
|
|
]] = "explicit"
|
||
|
|
```
|
||
|
|
|
||
|
|
**Falls nicht vorhanden**: Code ist nicht aktualisiert → Deployment erforderlich
|
||
|
|
|
||
|
|
### Schritt 2: Python-Cache leeren
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# In Prod-System
|
||
|
|
find . -type d -name __pycache__ -exec rm -r {} +
|
||
|
|
find . -name "*.pyc" -delete
|
||
|
|
```
|
||
|
|
|
||
|
|
### Schritt 3: Service neu starten
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# FastAPI/uvicorn neu starten
|
||
|
|
# Oder Docker-Container neu starten
|
||
|
|
```
|
||
|
|
|
||
|
|
### Schritt 4: Verifikation
|
||
|
|
|
||
|
|
1. **Test-Query ausführen**:
|
||
|
|
```bash
|
||
|
|
curl -X POST http://localhost:8001/api/chat \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"message": "Was für einen Status hat das Projekt mindnet?"}'
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Log prüfen**:
|
||
|
|
- ✅ Keine `validation error for EdgeDTO` mehr
|
||
|
|
- ✅ `✨ [SUCCESS] Stream 'facts_stream' lieferte X Treffer.`
|
||
|
|
- ✅ Ergebnisse werden zurückgegeben
|
||
|
|
|
||
|
|
## Code-Vergleich
|
||
|
|
|
||
|
|
### Aktuelle Version (sollte in Prod sein):
|
||
|
|
|
||
|
|
```python
|
||
|
|
# app/models/dto.py (Zeile 51-56)
|
||
|
|
provenance: Optional[Literal[
|
||
|
|
"explicit", "rule", "smart", "structure",
|
||
|
|
"explicit:callout", "explicit:wikilink", "explicit:note_zone", "explicit:note_scope",
|
||
|
|
"inline:rel", "callout:edge", "semantic_ai", "structure:belongs_to", "structure:order",
|
||
|
|
"derived:backlink", "edge_defaults", "global_pool"
|
||
|
|
]] = "explicit"
|
||
|
|
```
|
||
|
|
|
||
|
|
### Alte Version (verursacht Fehler):
|
||
|
|
|
||
|
|
```python
|
||
|
|
# Alte Version (nur 4 Werte)
|
||
|
|
provenance: Optional[Literal[
|
||
|
|
"explicit", "rule", "smart", "structure"
|
||
|
|
]] = "explicit"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Weitere mögliche Ursachen (wenn Fix nicht hilft)
|
||
|
|
|
||
|
|
### 1. Unterschiedliche Python-Versionen
|
||
|
|
- Prüfen: `python --version` in Dev vs. Prod
|
||
|
|
- Pydantic-Verhalten kann zwischen Versionen variieren
|
||
|
|
|
||
|
|
### 2. Unterschiedliche Pydantic-Versionen
|
||
|
|
- Prüfen: `pip list | grep pydantic` in Dev vs. Prod
|
||
|
|
- `requirements.txt` sollte identisch sein
|
||
|
|
|
||
|
|
### 3. Unterschiedliche Embedding-Modelle
|
||
|
|
- Prüfen: `MINDNET_EMBEDDING_MODEL` in beiden Systemen
|
||
|
|
- **Beide verwenden**: `nomic-embed-text` ✅
|
||
|
|
|
||
|
|
### 4. Unterschiedliche Vektor-Dimensionen
|
||
|
|
- Prüfen: `VECTOR_DIM` in beiden Systemen
|
||
|
|
- **Beide verwenden**: `768` ✅
|
||
|
|
|
||
|
|
## Erwartetes Ergebnis nach Fix
|
||
|
|
|
||
|
|
- ✅ Keine Pydantic-Validierungsfehler mehr
|
||
|
|
- ✅ Alle Streams liefern Ergebnisse
|
||
|
|
- ✅ Retrieval funktioniert identisch in Dev und Prod
|
||
|
|
- ✅ `explicit:callout` Provenance wird korrekt akzeptiert
|