diff --git a/backend/routers/prompts.py b/backend/routers/prompts.py index 77cd2b7..65b3ae7 100644 --- a/backend/routers/prompts.py +++ b/backend/routers/prompts.py @@ -900,6 +900,20 @@ async def execute_unified_prompt( 'category': category } + # Add all stage outputs (raw JSON) for expert mode - regardless of whether referenced + for stage_key, stage_value in stage_outputs.items(): + if stage_key not in metadata['placeholders']: + stage_parts = stage_key.split('_') + stage_num = stage_parts[1] if len(stage_parts) > 1 else '?' + output_name = '_'.join(stage_parts[2:]) if len(stage_parts) > 2 else 'output' + + metadata['placeholders'][stage_key] = { + 'value': json.dumps(stage_value, ensure_ascii=False, indent=2) if isinstance(stage_value, dict) else str(stage_value), + 'description': f"Zwischenergebnis aus Stage {stage_num} ({output_name})", + 'is_stage_raw': True, + 'category': f"Stage {stage_num} - Rohdaten" + } + # Collect all resolved placeholders from prompts (input placeholders) for stage_debug in stages_debug: for prompt_debug in stage_debug.get('prompts', []): @@ -912,33 +926,23 @@ async def execute_unified_prompt( for key in resolved_keys: if key not in metadata['placeholders']: # Avoid duplicates - # Get value: first try stage outputs, then cleaned_values - value = stage_outputs.get(key, cleaned_values.get(key, '')) + # Get value from cleaned_values + value = cleaned_values.get(key, '') - # For stage output placeholders (raw JSON), add special description - if key.startswith('stage_'): - stage_parts = key.split('_') - stage_num = stage_parts[1] if len(stage_parts) > 1 else '?' - desc = f"Rohdaten Stage {stage_num} (Basis-Analyse JSON)" - category = f"Stage {stage_num} - Rohdaten" - is_stage_raw = True - else: - # Find description and category in catalog - desc = None - category = 'Sonstiges' - for cat_name, cat_items in catalog.items(): - matching = [item for item in cat_items if item['key'] == key] - if matching: - desc = matching[0].get('description', '') - category = cat_name - break - desc = desc or '' - is_stage_raw = False + # Find description and category in catalog + desc = None + category = 'Sonstiges' + for cat_name, cat_items in catalog.items(): + matching = [item for item in cat_items if item['key'] == key] + if matching: + desc = matching[0].get('description', '') + category = cat_name + break + desc = desc or '' metadata['placeholders'][key] = { 'value': value if isinstance(value, str) else json.dumps(value, ensure_ascii=False), 'description': desc, - 'is_stage_raw': is_stage_raw, # Mark raw stage outputs for expert mode 'category': category } diff --git a/frontend/src/pages/Analysis.jsx b/frontend/src/pages/Analysis.jsx index 61a232b..4cba2e8 100644 --- a/frontend/src/pages/Analysis.jsx +++ b/frontend/src/pages/Analysis.jsx @@ -224,7 +224,29 @@ function InsightCard({ ins, onDelete, defaultOpen=false, prompts=[] }) { fontSize: isStageRaw ? 9 : 11, color: isStageRaw ? 'var(--text3)' : 'var(--text1)' }}> - {data.value} + {isStageRaw ? ( +
+ + JSON anzeigen ▼ + +
+                                    {data.value}
+                                  
+
+ ) : data.value}