Spaces:
Sleeping
Sleeping
| 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 |