|
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, |
|
], |
|
|
|
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 |