Spaces:
Sleeping
Sleeping
File size: 4,661 Bytes
0847744 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import plotly.express as px
import plotly.graph_objects as go
def create_radar_chart(metrics_data, title):
"""
Create a Plotly radar chart for a set of metrics
Args:
metrics_data (dict): Dictionary of metric names and values
title (str): Chart title
Returns:
plotly.graph_objects.Figure: Radar chart
"""
categories = list(metrics_data.keys())
values = list(metrics_data.values())
fig = go.Figure()
fig.add_trace(go.Scatterpolar(
r=values,
theta=categories,
fill='toself',
name=title
))
fig.update_layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 5] # Assuming metrics are on a 1-5 scale
)
),
title=title,
showlegend=True
)
return fig
def create_bar_chart(metrics_data, title):
"""
Create a Plotly bar chart for a set of metrics
Args:
metrics_data (dict): Dictionary of metric names and values
title (str): Chart title
Returns:
plotly.express.Figure: Bar chart
"""
fig = px.bar(
x=list(metrics_data.keys()),
y=list(metrics_data.values()),
labels={'x': 'Metric', 'y': 'Score'},
title=title
)
fig.update_layout(
xaxis_title="Metric",
yaxis_title="Score",
yaxis=dict(range=[0, 5]), # Assuming metrics are on a 1-5 scale
xaxis_tickangle=-45
)
return fig
def visualize_eval_data(eval_results, chart_type='radar'):
"""
Generate Plotly visualizations for evaluation results
Args:
eval_results (dict): Evaluation results
chart_type (str): Type of chart to create ('radar' or 'bar')
Returns:
list: List of tuples (title, chart)
"""
charts = []
if not eval_results or "message" in eval_results:
return []
# Handle different result structures
if "journeyEvals" in eval_results and "aiScriptEvals" in eval_results:
# Query 1 or ungrouped Query 2 result
for eval_name, metrics in eval_results["journeyEvals"].items():
if chart_type == 'radar':
chart = create_radar_chart(metrics, f"Journey Eval: {eval_name}")
else:
chart = create_bar_chart(metrics, f"Journey Eval: {eval_name}")
charts.append((f"Journey Eval: {eval_name}", chart))
for eval_name, metrics in eval_results["aiScriptEvals"].items():
if chart_type == 'radar':
chart = create_radar_chart(metrics, f"AI Script Eval: {eval_name}")
else:
chart = create_bar_chart(metrics, f"AI Script Eval: {eval_name}")
charts.append((f"AI Script Eval: {eval_name}", chart))
elif isinstance(eval_results, dict):
# Query 2 with group_by_plots=True or Query 3 with group_by_plots=True
for plot_name, plot_data in eval_results.items():
if isinstance(plot_data, dict) and "journeyEvals" in plot_data and "aiScriptEvals" in plot_data:
# Query 2 result grouped by plots
for eval_name, metrics in plot_data["journeyEvals"].items():
if chart_type == 'radar':
chart = create_radar_chart(metrics, f"{plot_name} - Journey Eval: {eval_name}")
else:
chart = create_bar_chart(metrics, f"{plot_name} - Journey Eval: {eval_name}")
charts.append((f"{plot_name} - Journey Eval: {eval_name}", chart))
for eval_name, metrics in plot_data["aiScriptEvals"].items():
if chart_type == 'radar':
chart = create_radar_chart(metrics, f"{plot_name} - AI Script Eval: {eval_name}")
else:
chart = create_bar_chart(metrics, f"{plot_name} - AI Script Eval: {eval_name}")
charts.append((f"{plot_name} - AI Script Eval: {eval_name}", chart))
elif isinstance(plot_data, dict):
# Query 3 result grouped by plots
for eval_name, metrics in plot_data.items():
if chart_type == 'radar':
chart = create_radar_chart(metrics, f"{plot_name} - Eval: {eval_name}")
else:
chart = create_bar_chart(metrics, f"{plot_name} - Eval: {eval_name}")
charts.append((f"{plot_name} - Eval: {eval_name}", chart))
return charts |