|
|
|
from tests import test_cases |
|
from evaluate.utils.logging import get_logger |
|
from evaluate.utils import ( |
|
infer_gradio_input_types, |
|
parse_gradio_data, |
|
json_to_string_type, |
|
parse_readme, |
|
parse_test_cases, |
|
) |
|
from pathlib import Path |
|
|
|
import evaluate |
|
import sys |
|
import evaluate |
|
|
|
logger = get_logger(__name__) |
|
|
|
|
|
def launch_gradio_widget(metric, test_cases): |
|
"""Launches `metric` widget with Gradio.""" |
|
|
|
try: |
|
import gradio as gr |
|
except ImportError as error: |
|
logger.error( |
|
"To create a metric widget with Gradio make sure gradio is installed." |
|
) |
|
raise 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(**parse_gradio_data(data, gradio_input_types)) |
|
|
|
iface = gr.Interface( |
|
fn=compute, |
|
inputs=gr.inputs.Dataframe( |
|
headers=feature_names, |
|
col_count=len(feature_names), |
|
row_count=5, |
|
datatype=json_to_string_type(gradio_input_types), |
|
), |
|
outputs=gr.outputs.Textbox(label=metric.name), |
|
description=( |
|
metric.info.description |
|
+ "\nIf this is a text-based metric, make sure to wrap you 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"), |
|
|
|
|
|
examples=[ |
|
parse_test_cases(tc, gradio_input_types, gradio_input_types) |
|
for tc in test_cases |
|
], |
|
) |
|
iface.launch() |
|
|
|
|
|
module = evaluate.load("danieldux/metric_template_1") |
|
|
|
launch_gradio_widget(module, test_cases) |
|
|