import evaluate from evaluate.utils import infer_gradio_input_types, parse_gradio_data, json_to_string_type, parse_readme from pathlib import Path import sys def launch_gradio_widget(metric): """Launches metric widget with Gradio.""" try: import gradio as gr except ImportError as error: raise ImportError("To create a metric widget with Gradio, make sure gradio is installed.") from error local_path = Path(sys.path[0]) if isinstance(metric.features, list): (feature_names, feature_types) = zip(*metric.features[0].items()) else: (feature_names, feature_types) = zip(*metric.features.items()) gradio_input_types = infer_gradio_input_types(feature_types) def compute(data): return metric._compute( model='gpt2', tasks='wikitext', **parse_gradio_data(data, gradio_input_types) ) iface = gr.Interface( fn=compute, inputs=gr.Dataframe( headers=feature_names, col_count=len(feature_names), row_count=1, datatype=json_to_string_type(gradio_input_types), ), outputs=gr.Textbox(label=metric.name), description=( metric.info.description + "\nThis metric is computed using the 'gpt2' model on the 'wikitext' task.\n" "Ensure your input is appropriate for the selected task. " "If this is a text-based metric, wrap your input in double quotes." " Alternatively, you can use a JSON-formatted list as input." ), title=f"Metric: {metric.name}", article=parse_readme(local_path / "README.md"), ) iface.launch() module = evaluate.load("d-matrix/dmxMetric") launch_gradio_widget(module)