5.3 KiB
5.3 KiB
🎉 Session Notes: Document Search Fix
Datum: 2025-12-03 Status: ✅ ERFOLGREICH
🎯 Ziel
Document Search API zum Laufen bringen - Semantic Search über 721 Crumbforest + 12 RZ-Nullfeld Markdown-Dateien.
🐛 Hauptproblem
{"detail":"Unsupported embedding model: openai/text-embedding-3-small.
Supported models: ['text-embedding-3-small', 'text-embedding-3-large', 'text-embedding-ada-002']"}
🔍 Root Causes (3x!)
1. Falscher Provider in .env
# ❌ FALSCH:
DEFAULT_EMBEDDING_PROVIDER=openai
# ✅ RICHTIG:
DEFAULT_EMBEDDING_PROVIDER=openrouter
2. Kein Volume Mount - Code nicht aktiv!
- Problem: Docker Image hat Code eingebacken (kein Volume Mount)
- Symptom: Alle Code-Edits hatten keine Wirkung
- Fix:
docker compose up --build -dnach JEDER Code-Änderung
3. Collection-Namen inkonsistent
- Qdrant:
docs_crumbforest_,docs_rz_nullfeld_(mit Unterstrich) - Code: Suchte nach
docs_crumbforest,docs_rz_nullfeld(ohne) - Zusätzlich: RAGService fügte
_{locale}hinzu → Doppel-Unterstrich!
✅ Alle Fixes
Fix 1: .env Konfiguration
# compose/.env
DEFAULT_EMBEDDING_PROVIDER=openrouter
DEFAULT_EMBEDDING_MODEL=text-embedding-3-small
DEFAULT_COMPLETION_PROVIDER=openrouter
DEFAULT_COMPLETION_MODEL=anthropic/claude-3-5-sonnet
Fix 2: app/routers/document_rag.py
# Explizites embedding_model ohne Prefix
embedding_provider = ProviderFactory.create_provider(
provider_name=provider,
settings=settings,
embedding_model="text-embedding-3-small" # Ohne openai/ prefix
)
# Collection-Namen ohne trailing underscore (RAGService fügt _{locale} hinzu)
collections = ["docs_rz_nullfeld", "docs_crumbforest"]
Fix 3: app/lib/embedding_providers/openrouter_provider.py
# Auto-Prefix für OpenRouter API
model = self.embedding_model if "/" in self.embedding_model else f"openai/{self.embedding_model}"
Fix 4: app/config.py
# Model ohne Prefix (funktioniert für beide Provider)
default_embedding_model: str = "text-embedding-3-small"
Fix 5: Docker Rebuild
cd compose
docker compose down
docker compose up --build -d
🎊 Erfolgreiche Test-Query
Request:
GET http://localhost:8000/api/documents/search?q=Docker&limit=5
Response:
{
"query": "Docker",
"results": [
{
"post_id": 2032991606,
"title": "ssh_login_test",
"header": "Dockerfile Ergänzung",
"score": 0.5505129,
"collection": "docs_crumbforest"
},
{
"post_id": 676631428,
"title": "crumbforest_specialist_roles",
"header": "🐋 DockerDuke – Container-Kapitän",
"score": 0.5469476,
"collection": "docs_crumbforest"
}
],
"provider": "openrouter"
}
🦉 Besondere Momente
DockerDuke ist Legende! 🐋
Der Character "DockerDuke – Container-Kapitän" tauchte in den Search Results auf und begeisterte sofort:
"dockerduke ist bereits jetzt legende #dude <3"
Token-Verbrennung 😅
Nach vielen Debugging-Runden:
"nö ... wir verbrennen nur token?"
Aber am Ende: WUHUUUU! 🎉
📊 System-Status
Indexierte Dokumente
- Crumbforest: 721 Dokumente, 5,219 Vektoren
- RZ Nullfeld: 12 Dokumente, 308 Vektoren
- Total: 733 Dokumente, 5,527 Vektoren
Qdrant Collections
curl -s http://localhost:6333/collections | jq '.result.collections[].name'
# "docs_crumbforest_"
# "docs_rz_nullfeld_"
Provider-Status
docker compose logs app | grep provider
# ✓ Using provider: openrouter
🎓 Wichtige Learnings
1. Docker Volume Mounts prüfen!
# compose/docker-compose.yml
# KEIN Volume Mount für app/ Code!
# → Code ist im Image eingebacken
# → Rebuild nach jeder Änderung!
2. .env überschreibt config.py
# config.py Defaults werden von .env überschrieben
# Pydantic BaseSettings liest:
# 1. Environment Variables
# 2. .env File
# 3. Class Defaults
3. Collection-Namen Konvention
# RAGService erwartet PREFIX
collection_prefix = "docs_crumbforest" # Ohne trailing _
# RAGService fügt hinzu:
collection_name = f"{collection_prefix}_{locale}"
# Bei locale="" → "docs_crumbforest_" ✅
4. Provider-spezifische Model-Namen
# OpenRouter: "openai/text-embedding-3-small" (mit Prefix)
# OpenAI: "text-embedding-3-small" (ohne Prefix)
# Lösung: Auto-Prefix in Provider
model = embedding_model if "/" in embedding_model else f"openai/{embedding_model}"
📝 Aktualisierte Dokumentation
- ✅ QUICKSTART.md - Provider-Config Warnung, Rebuild-Requirements
- ✅ HANDBUCH.md - Fehler 9 hinzugefügt mit vollständiger Diagnose
- ✅ compose/.env - Korrekte Provider-Einstellungen
🚀 Next Steps
- ✅ Document Search funktioniert
- ✅ DockerDuke ist Legende
- ⏭️ Weitere Queries testen (Python, Qdrant, Kubernetes)
- ⏭️ RAG mit Completions testen
- ⏭️ Performance monitoring
🦉 Fazit
Nach intensivem Debugging (und einigen Token-Opfern 😅):
- 3 Root Causes identifiziert und gefixt
- 5 Code-Änderungen implementiert
- 721 Dokumente durchsuchbar
- DockerDuke ist geboren! 🐋
Status: WUHUUUU! 🎊
"Die Eule hat den Wald durchsucht und gefunden!" - Crumbforest Philosophy, 2025