Spaces:
Runtime error
Runtime error
| from datetime import datetime | |
| import tempfile | |
| from typing import Callable | |
| import gradio as gr | |
| from functools import partial | |
| import re | |
| import json | |
| from src.logic.data_fetching import fetch_datasets, fetch_graph_data, fetch_groups, fetch_metrics, update_datasets_with_regex, update_datasets_with_regex | |
| from src.logic.data_processing import export_data | |
| from src.logic.graph_settings import update_graph_options | |
| from src.logic.plotting import plot_data | |
| def create_metric_view_tab(METRICS_LOCATION_DEFAULT: str, available_datasets: gr.State): | |
| metric_data = gr.State([]) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| base_folder = gr.Textbox( | |
| label="Metrics Location", | |
| value=METRICS_LOCATION_DEFAULT, | |
| ) | |
| datasets_fetch = gr.Button("Fetch Datasets") | |
| with gr.Column(scale=1): | |
| regex_select = gr.Text(label="Regex filter", value=".*") | |
| regex_button = gr.Button("Search") | |
| with gr.Row(): | |
| selected_datasets_dropdown = gr.Dropdown( | |
| choices=[], | |
| label="Datasets", | |
| multiselect=True, | |
| interactive=True, | |
| ) | |
| with gr.Column(scale=1): | |
| grouping_dropdown = gr.Dropdown( | |
| choices=[], | |
| label="Grouping", | |
| multiselect=False, | |
| ) | |
| metric_name_dropdown = gr.Dropdown( | |
| choices=[], | |
| label="Metric name", | |
| multiselect=False, | |
| ) | |
| render_button = gr.Button("Render Metric", variant="primary") | |
| with gr.Tabs(): | |
| with gr.TabItem("Graph Settings"): | |
| log_scale_x_checkbox = gr.Checkbox( | |
| label="Log scale x", | |
| value=False, | |
| ) | |
| log_scale_y_checkbox = gr.Checkbox( | |
| label="Log scale y", | |
| value=False, | |
| ) | |
| rounding = gr.Number( | |
| label="Rounding", | |
| value=2, | |
| ) | |
| with gr.TabItem("Grouping Settings") as group_settings: | |
| with gr.Row() as group_choices: | |
| with gr.Column(scale=2): | |
| group_regex = gr.Text( | |
| label="Group Regex", | |
| value=None, | |
| ) | |
| with gr.Row(): | |
| top_select = gr.Number( | |
| label="N Groups", | |
| value=100, | |
| interactive=True, | |
| ) | |
| direction_checkbox = gr.Radio( | |
| label="Partition", | |
| choices=[ | |
| "Top", | |
| "Bottom", | |
| "Most frequent (n_docs)", | |
| ], | |
| value="Most frequent (n_docs)", | |
| ) | |
| with gr.TabItem("Histogram Settings") as histogram_settings: | |
| normalization_checkbox = gr.Checkbox( | |
| label="Normalize", | |
| value=True, | |
| visible=False | |
| ) | |
| cdf_checkbox = gr.Checkbox( | |
| label="CDF", | |
| value=False, | |
| ) | |
| perc_checkbox = gr.Checkbox( | |
| label="%", | |
| value=False, | |
| ) | |
| with gr.TabItem("Summary Settings") as summary_settings: | |
| show_stds_checkbox = gr.Checkbox( | |
| label="Show standard deviations", | |
| value=False, | |
| ) | |
| with gr.Row(): | |
| graph_output = gr.Plot(label="Graph") | |
| with gr.Row(visible=False) as min_max_hist: | |
| with gr.Column(scale=3): | |
| min_max_hist_data = gr.Markdown() | |
| with gr.Column(scale=1): | |
| export_data_button = gr.Button("Export Data") | |
| export_data_json = gr.File(visible=False) | |
| def update_selected_datasets_dropdown(available_datasets, selected_datasets_dropdown): | |
| selected_datasets = selected_datasets_dropdown or [] | |
| selected_datasets = set(selected_datasets) & set(available_datasets) | |
| return gr.Dropdown(choices=available_datasets, value=sorted(list(selected_datasets))) | |
| datasets_fetch.click( | |
| fn=fetch_datasets, | |
| inputs=[base_folder], | |
| outputs=[available_datasets, selected_datasets_dropdown], | |
| ) | |
| available_datasets.change( | |
| fn=update_selected_datasets_dropdown, | |
| inputs=[available_datasets, selected_datasets_dropdown], | |
| outputs=selected_datasets_dropdown, | |
| ) | |
| regex_button.click( | |
| fn=update_datasets_with_regex, | |
| inputs=[regex_select, selected_datasets_dropdown, available_datasets], | |
| outputs=selected_datasets_dropdown, | |
| ) | |
| selected_datasets_dropdown.change( | |
| fn=fetch_groups, | |
| inputs=[base_folder, selected_datasets_dropdown, grouping_dropdown], | |
| outputs=grouping_dropdown, | |
| ) | |
| grouping_dropdown.change( | |
| fn=fetch_metrics, | |
| inputs=[base_folder, selected_datasets_dropdown, grouping_dropdown, metric_name_dropdown], | |
| outputs=metric_name_dropdown, | |
| ) | |
| render_button.click( | |
| fn=fetch_graph_data, | |
| inputs=[ | |
| base_folder, | |
| selected_datasets_dropdown, | |
| metric_name_dropdown, | |
| grouping_dropdown, | |
| ], | |
| # We also output the graph_output = None to show the progress | |
| outputs=[metric_data, graph_output], | |
| ) | |
| grouping_dropdown.change( | |
| fn=update_graph_options, | |
| inputs=[grouping_dropdown], | |
| outputs=[group_settings, histogram_settings, summary_settings], | |
| ) | |
| gr.on( | |
| triggers=[normalization_checkbox.input, rounding.input, group_regex.input, direction_checkbox.input, | |
| top_select.input, log_scale_x_checkbox.input, | |
| log_scale_y_checkbox.input, cdf_checkbox.input, perc_checkbox.input, show_stds_checkbox.input, metric_data.change], | |
| fn=plot_data, | |
| inputs=[ | |
| metric_data, | |
| metric_name_dropdown, | |
| normalization_checkbox, | |
| rounding, | |
| grouping_dropdown, | |
| top_select, | |
| direction_checkbox, | |
| group_regex, | |
| log_scale_x_checkbox, | |
| log_scale_y_checkbox, | |
| cdf_checkbox, | |
| perc_checkbox, | |
| show_stds_checkbox | |
| ], | |
| outputs=[graph_output, min_max_hist, min_max_hist_data], | |
| ) | |
| export_data_button.click( | |
| fn=export_data, | |
| inputs=[metric_data, metric_name_dropdown, grouping_dropdown], | |
| outputs=[export_data_json], | |
| ) | |
| return base_folder, selected_datasets_dropdown |