File size: 2,118 Bytes
0b0e7aa
 
 
e5ba913
0b0e7aa
2488f8b
c5503a4
0b0e7aa
 
2488f8b
e5ba913
2488f8b
 
 
 
 
 
0b0e7aa
 
2488f8b
b660ba8
728d57c
b660ba8
728d57c
 
b660ba8
728d57c
b660ba8
728d57c
b660ba8
728d57c
b660ba8
2488f8b
 
b660ba8
 
3a45cce
2488f8b
0b0e7aa
2488f8b
 
728d57c
b660ba8
2488f8b
 
 
 
 
 
0b0e7aa
2488f8b
b660ba8
 
 
 
 
 
 
 
2488f8b
 
 
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
import sys
import gradio as gr
import pandas as pd
import evaluate
from evaluate.utils import infer_gradio_input_types, json_to_string_type, parse_readme, parse_test_cases
# from evaluate.utils import launch_gradio_widget # using this directly is erroneous - lets fix this
from fixed_f1 import FixedF1
from pathlib import Path

metric = FixedF1()

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)

local_path = Path(sys.path[0])
test_cases = [ {"predictions":[1,2,3,4,5], "references":[1,2,5,4,3]} ] # configure this randomly using randint generator and feature names?

# configure this based on the input type, etc. for launch_gradio_widget
def compute(input_df: pd.DataFrame, feature_names: list[str]):

    predicted = [int(num) for num in input_df[feature_names[0]].to_list()]
    references = [int(num) for num in input_df[feature_names[1]].to_list()]

    metric.add_batch(predictions=predicted, references=references)
    
    outputs = metric._compute()

    f"Your metrics are as follows: \n {outputs}"

space = gr.Interface(
    fn=compute,
    inputs=[
        gr.Dataframe(
        headers=feature_names,
        col_count=len(feature_names),
        row_count=5,
        datatype=json_to_string_type(gradio_input_types),
        ),
        list(feature_names)
    ],
    outputs=gr.Textbox(label=metric.name),
    description=(
        metric.info.description + "\nIf this is a text-based metric, make sure to 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"),
    # TODO: load test cases and use them to populate examples
    examples=[
        [
            # consider how to generalize this
            parse_test_cases(test_cases, feature_names, gradio_input_types)[0], 
            feature_names
        ]
    ],
    cache_examples=False
    )

space.launch()