from typing import Dict, List import streamlit as st def create_radar_chart(scores: Dict[str, float], title: str): import plotly.graph_objects as go categories = list(scores.keys()) values = list(scores.values()) fig = go.Figure() fig.add_trace(go.Scatterpolar(r=values, theta=categories, fill='toself', name=title, line_color='blue')) fig.update_layout(polar=dict(radialaxis=dict(visible=True, range=[0, 2])), showlegend=True, title=title, font_size=12) return fig def display_utterance_results(results: List[Dict]): st.subheader("Utterance-Level Results") for i, result in enumerate(results): with st.expander(f"Utterance {i+1}: {result['speaker']}"): st.write(f"**Text:** {result['text']}") # Collect all scores all_scores = {} # OpenAI scores if result.get('openai_scores'): all_scores['OpenAI'] = result['openai_scores'] # Empathy scores empathy_scores = result.get('empathy_scores') or result.get('huggingface_scores') if empathy_scores: all_scores['Empathy'] = empathy_scores # Talk Type scores if result.get('talk_type_scores'): all_scores['Talk Type'] = result['talk_type_scores'] # Display scores in columns if all_scores: cols = st.columns(len(all_scores)) for idx, (eval_name, scores) in enumerate(all_scores.items()): with cols[idx]: st.write(f"**{eval_name} Scores:**") for metric, score in scores.items(): st.metric(metric.replace('_', ' ').title(), f"{float(score):.2f}/2") else: st.write("No scores available")