""" Step 3 Left Panel: Predefined Metrics """ import streamlit as st def render_step3_left(): """Render the left panel for Step 3: Predefined Metrics""" st.markdown("### 📊 Available Metrics") st.markdown("Select which therapeutic metrics to evaluate:") # Get available metrics from registry from evaluators import list_available_metrics, get_metrics_by_category, get_metric_metadata available_metrics = list_available_metrics() metrics_by_category = get_metrics_by_category() selected_metrics = [] # Display metrics grouped by category if metrics_by_category: for category, metric_keys in metrics_by_category.items(): if category: st.markdown(f"**{category}**") for metric_key in metric_keys: metadata = get_metric_metadata(metric_key) if metadata: label = metadata.label description = metadata.description help_text = description if description else None if st.checkbox( label, value=st.session_state.get(f'metric_{metric_key}', False), key=f'metric_{metric_key}', help=help_text ): selected_metrics.append(metric_key) else: # Fallback: display all metrics without categories for metric_key in available_metrics: metadata = get_metric_metadata(metric_key) label = metadata.label if metadata else metric_key.replace('_', ' ').title() description = metadata.description if metadata else None if st.checkbox( label, value=st.session_state.get(f'metric_{metric_key}', False), key=f'metric_{metric_key}', help=description ): selected_metrics.append(metric_key) st.session_state.selected_metrics = selected_metrics # Validation message for metrics if not selected_metrics: st.warning("⚠️ Please select at least one metric.") else: st.success(f"✅ {len(selected_metrics)} metric(s) selected") return selected_metrics