docs: create Issue #50 - Value Table Refinement
- Normal-Modus: Nur Einzelwerte (übersichtlich) - Experten-Modus: Zusätzlich Stage-Rohdaten - Beschreibungen für alle Platzhalter vervollständigen - Schema-basierte Beschreibungen für extrahierte Werte Aufwand: 4-6h, Priority: Medium
This commit is contained in:
parent
6e651b5bb5
commit
713f7475c9
181
docs/issues/issue-50-value-table-refinement.md
Normal file
181
docs/issues/issue-50-value-table-refinement.md
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
# Enhancement: Wertetabelle Optimierung
|
||||
|
||||
**Labels:** enhancement, ux
|
||||
**Priority:** Medium (Phase 1)
|
||||
**Related:** Issue #47 (Value Table - Complete)
|
||||
|
||||
## Beschreibung
|
||||
Wertetabelle übersichtlicher gestalten durch intelligente Filterung und Beschreibungs-Vervollständigung.
|
||||
|
||||
## Problem (aktueller Stand)
|
||||
|
||||
Nach Implementierung von Issue #47 haben wir eine sehr umfangreiche Wertetabelle mit:
|
||||
- Reguläre Platzhalter (PROFIL, KÖRPER, etc.)
|
||||
- Extrahierte Einzelwerte aus Stages (↳ Symbol)
|
||||
- Rohdaten der Stage-Outputs (🔬 JSON)
|
||||
|
||||
**Probleme:**
|
||||
1. Zu viele Werte im Normal-Modus (unübersichtlich)
|
||||
2. Stage-Rohdaten sollten nur im Experten-Modus sichtbar sein
|
||||
3. Einige Platzhalter haben keine/unvollständige Beschreibungen
|
||||
|
||||
## Gewünschtes Verhalten
|
||||
|
||||
### Normal-Modus (Standard)
|
||||
```
|
||||
📊 Verwendete Werte (24) [🔬 Experten-Modus]
|
||||
|
||||
PROFIL
|
||||
├─ name: Lars Stommer
|
||||
├─ age: 35 Jahre (Geburtsdatum 1990-05-15)
|
||||
├─ height: 178cm (Körpergröße)
|
||||
|
||||
KÖRPER
|
||||
├─ weight_aktuell: 85.2kg (Aktuelles Gewicht)
|
||||
├─ bmi: 26.9 (Body-Mass-Index)
|
||||
├─ bmi_interpretation: Leicht übergewichtig (BMI-Bewertung)
|
||||
├─ kf_aktuell: 18.5% (Körperfettanteil)
|
||||
|
||||
ERNÄHRUNG
|
||||
├─ kcal_avg: 2450 kcal (Durchschnitt 7 Tage)
|
||||
...
|
||||
|
||||
Stage 1 - Body (Extrahierte Werte)
|
||||
├─ ↳ trend: leicht sinkend (Gewichtstrend)
|
||||
├─ ↳ ziel_erreichbar: ja, in 8 Wochen (Zielerreichbarkeit)
|
||||
```
|
||||
|
||||
**Ausgeblendet:**
|
||||
- 🔬 stage_1_stage1_body (komplettes JSON)
|
||||
- Leere/nicht verfügbare Werte
|
||||
|
||||
### Experten-Modus
|
||||
```
|
||||
📊 Verwendete Werte (32) [🔬 Experten-Modus ✓]
|
||||
|
||||
[... wie Normal-Modus ...]
|
||||
|
||||
Stage 1 - Rohdaten
|
||||
├─ 🔬 stage_1_stage1_body
|
||||
└─ [JSON anzeigen ▼]
|
||||
{
|
||||
"bmi": 26.9,
|
||||
"trend": "leicht sinkend",
|
||||
"ziel_erreichbar": "ja, in 8 Wochen",
|
||||
"interpretation": "Dein BMI liegt..."
|
||||
}
|
||||
|
||||
Stage 2 - Rohdaten
|
||||
├─ 🔬 stage_2_stage2_nutrition
|
||||
└─ [JSON anzeigen ▼]
|
||||
{ ... }
|
||||
```
|
||||
|
||||
**Zusätzlich sichtbar:**
|
||||
- Alle Stage-Rohdaten (🔬 JSON)
|
||||
- Leere/nicht verfügbare Werte
|
||||
- Debug-Informationen
|
||||
|
||||
## Technische Umsetzung
|
||||
|
||||
### 1. Filterlogik anpassen (Analysis.jsx)
|
||||
|
||||
**Aktuell:**
|
||||
```javascript
|
||||
const placeholders = expertMode
|
||||
? allPlaceholders
|
||||
: Object.fromEntries(
|
||||
Object.entries(allPlaceholders).filter(([key, data]) => {
|
||||
if (data.is_stage_raw) return false // Versteckt Rohdaten
|
||||
const val = data.value || ''
|
||||
return val.trim() !== '' && val !== 'nicht verfügbar'
|
||||
})
|
||||
)
|
||||
```
|
||||
|
||||
**Problem:** `is_stage_raw` wird nur für Keys wie "stage_1_stage1_body" gesetzt, nicht für extrahierte Werte.
|
||||
|
||||
**Lösung:** Neue Flag `is_extracted` (bereits vorhanden) wird beibehalten, `is_stage_raw` nur für komplette JSON-Outputs.
|
||||
|
||||
### 2. Beschreibungen vervollständigen (placeholder_resolver.py)
|
||||
|
||||
**Fehlende Beschreibungen prüfen:**
|
||||
```python
|
||||
# In get_placeholder_catalog()
|
||||
PLACEHOLDER_CATALOG = {
|
||||
'PROFIL': [
|
||||
{'key': 'name', 'description': 'Name des Nutzers', 'example': '...'},
|
||||
{'key': 'age', 'description': 'Alter in Jahren', 'example': '35'},
|
||||
# ... alle prüfen
|
||||
],
|
||||
'KÖRPER': [
|
||||
{'key': 'weight_aktuell', 'description': 'Aktuelles Gewicht', 'example': '85.2kg'},
|
||||
{'key': 'bmi', 'description': 'Body-Mass-Index (berechnet)', 'example': '26.9'},
|
||||
# ... alle prüfen
|
||||
],
|
||||
# ... alle Kategorien durchgehen
|
||||
}
|
||||
```
|
||||
|
||||
**Aktionen:**
|
||||
- Alle 32 Platzhalter durchgehen
|
||||
- Fehlende Beschreibungen ergänzen
|
||||
- Beschreibungen aus Kontext ableiten (z.B. bei extrahierten Werten aus Stage-Output)
|
||||
|
||||
### 3. Extrahierte Werte beschreiben (prompts.py)
|
||||
|
||||
**Aktuell (Line 896-901):**
|
||||
```python
|
||||
metadata['placeholders'][field_key] = {
|
||||
'value': field_data['value'],
|
||||
'description': f"Aus Stage {field_data['source_stage']} ({field_data['source_output']})",
|
||||
'is_extracted': True,
|
||||
'category': category
|
||||
}
|
||||
```
|
||||
|
||||
**Verbesserung:**
|
||||
- Wenn Base-Prompt ein JSON-Schema hat, Feld-Beschreibungen aus Schema extrahieren
|
||||
- Fallback: Generische Beschreibung aus Kontext
|
||||
|
||||
**Beispiel:**
|
||||
```python
|
||||
# Wenn output_schema verfügbar:
|
||||
schema = base_prompt.get('output_schema', {})
|
||||
properties = schema.get('properties', {})
|
||||
field_description = properties.get(field_key, {}).get('description', '')
|
||||
|
||||
metadata['placeholders'][field_key] = {
|
||||
'value': field_data['value'],
|
||||
'description': field_description or f"Aus Stage {stage_num} ({output_name})",
|
||||
'is_extracted': True,
|
||||
'category': category
|
||||
}
|
||||
```
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Normal-Modus zeigt nur Einzelwerte (regulär + extrahiert ↳)
|
||||
- [ ] Experten-Modus zeigt zusätzlich Stage-Rohdaten (🔬 JSON)
|
||||
- [ ] Alle 32 Platzhalter haben sinnvolle Beschreibungen
|
||||
- [ ] Extrahierte Werte nutzen Schema-Beschreibungen (wenn vorhanden)
|
||||
- [ ] Toggle "Experten-Modus" funktioniert korrekt
|
||||
- [ ] Kategorien bleiben sauber getrennt
|
||||
- [ ] Leere Werte werden im Normal-Modus ausgeblendet
|
||||
|
||||
## Abschätzung
|
||||
|
||||
**Aufwand:** 4-6 Stunden
|
||||
- 1h: Filterlogik testen/anpassen
|
||||
- 2-3h: Beschreibungen vervollständigen (32 Platzhalter)
|
||||
- 1h: Schema-basierte Beschreibungen für extrahierte Werte
|
||||
- 1h: Testing + Feintuning
|
||||
|
||||
**Priorität:** Medium (verbessert UX erheblich, aber keine kritische Funktionalität)
|
||||
|
||||
## Notizen
|
||||
|
||||
- Issue #47 hat die Grundlage geschaffen (Kategorien, Expert-Mode, Stage-Outputs)
|
||||
- Diese Optimierung macht die Wertetabelle produktionsreif
|
||||
- Beschreibungen sind wichtig für KI-Kontext UND User-Verständnis
|
||||
- ggf. später: Beschreibungen editierbar machen (Admin-UI)
|
||||
Loading…
Reference in New Issue
Block a user