File size: 1,887 Bytes
0d4201c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c486f7
 
0d4201c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c486f7
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import evaluate
import json
import os
import re
import sys
from pathlib import Path

module = evaluate.load("SEA-AI/horizon-metrics")

REGEX_YAML_BLOCK = re.compile(r"---[\n\r]+([\S\s]*?)[\n\r]+---[\n\r]")


def json_to_string_type(input_types):
    """Maps json input type to str."""
    return ["str" if i == "json" else i for i in input_types]


def parse_readme(filepath):
    """Parses a repositories README and removes"""
    if not os.path.exists(filepath):
        return "No README.md found."
    with open(filepath, "r") as f:
        text = f.read()
        match = REGEX_YAML_BLOCK.search(text)
        if match:
            text = text[match.end():]
    return text


def launch_gradio_widget(metric):
    """Launches `metric` widget with Gradio."""

    try:
        import gradio as gr
    except ImportError as error:
        print(
            "To create a metric widget with Gradio make sure gradio is installed."
        )
        raise error

    local_path = Path(sys.path[0])

    def compute(data):
        return metric.compute(
        )  ##**parse_gradio_data(data, gradio_input_types)

    iface = gr.Interface(
        fn=compute,
        inputs=[
            gr.inputs.Textbox(lines=5, label="Predictions"),
            gr.inputs.Textbox(lines=5, label="Ground Truth")
        ],
        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"),
        # TODO: load test cases and use them to populate examples
        # examples=[parse_test_cases(test_cases, feature_names, gradio_input_types)]
    )

    iface.launch()


launch_gradio_widget(module)