ba_dashboard / src /utils /visualization.py
paulokewunmi's picture
Upload 10 files
0847744 verified
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