Spaces:
Running
Running
Commit
•
be473e6
1
Parent(s):
9e4233f
GSK-2352 create a leaderboard tab (#15)
Browse files- add leaderboard ui and refactor code (cbb886ad64e513b28407c51bf6f505899f61264d)
- fix bugs and add logs for leaderboard tab (80ed307fea11eb9acb2fff7e6d96ab2fba7aa55c)
- fix cicd submodule (f0a313e7fe8c116d0fee6c8d224373e9057f9db3)
- hide dropdown menus when the labels match (ba41a5cd5b15c2062ecc33dc66f9109cd3f88148)
- hide dropdown menus when the labels match when labels not matching (5058ff34b4c55153b293ac6f00c1e9c50b9ca7c9)
Co-authored-by: zcy <ZeroCommand@users.noreply.huggingface.co>
- app.py +6 -4
- app_leaderboard.py +98 -0
- app_legacy.py +1 -1
- app_text_classification.py +64 -26
- cicd +1 -0
- fetch_utils.py +26 -0
- utils.py → io_utils.py +9 -10
- wordings.py +8 -3
app.py
CHANGED
@@ -5,11 +5,13 @@
|
|
5 |
import gradio as gr
|
6 |
|
7 |
from app_text_classification import get_demo as get_demo_text_classification
|
8 |
-
|
9 |
|
10 |
with gr.Blocks(theme=gr.themes.Soft(primary_hue="green")) as demo:
|
11 |
with gr.Tab("Text Classification"):
|
12 |
get_demo_text_classification()
|
13 |
-
with gr.Tab("Leaderboard
|
14 |
-
|
15 |
-
|
|
|
|
|
|
5 |
import gradio as gr
|
6 |
|
7 |
from app_text_classification import get_demo as get_demo_text_classification
|
8 |
+
from app_leaderboard import get_demo as get_demo_leaderboard
|
9 |
|
10 |
with gr.Blocks(theme=gr.themes.Soft(primary_hue="green")) as demo:
|
11 |
with gr.Tab("Text Classification"):
|
12 |
get_demo_text_classification()
|
13 |
+
with gr.Tab("Leaderboard"):
|
14 |
+
get_demo_leaderboard()
|
15 |
+
|
16 |
+
demo.queue(max_size=100)
|
17 |
+
demo.launch(share=False)
|
app_leaderboard.py
CHANGED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import datasets
|
3 |
+
import logging
|
4 |
+
from fetch_utils import check_dataset_and_get_config, check_dataset_and_get_split
|
5 |
+
|
6 |
+
def get_records_from_dataset_repo(dataset_id):
|
7 |
+
dataset_config = check_dataset_and_get_config(dataset_id)
|
8 |
+
|
9 |
+
logging.info(f"Dataset {dataset_id} has configs {dataset_config}")
|
10 |
+
dataset_split = check_dataset_and_get_split(dataset_id, dataset_config[0])
|
11 |
+
logging.info(f"Dataset {dataset_id} has splits {dataset_split}")
|
12 |
+
|
13 |
+
try:
|
14 |
+
ds = datasets.load_dataset(dataset_id, dataset_config[0])[dataset_split[0]]
|
15 |
+
df = ds.to_pandas()
|
16 |
+
return df
|
17 |
+
except Exception as e:
|
18 |
+
logging.warning(f"Failed to load dataset {dataset_id} with config {dataset_config}: {e}")
|
19 |
+
return None
|
20 |
+
|
21 |
+
def get_model_ids(ds):
|
22 |
+
logging.info(f"Dataset {ds} column names: {ds['model_id']}")
|
23 |
+
models = ds['model_id'].tolist()
|
24 |
+
# return unique elements in the list model_ids
|
25 |
+
model_ids = list(set(models))
|
26 |
+
return model_ids
|
27 |
+
|
28 |
+
def get_dataset_ids(ds):
|
29 |
+
logging.info(f"Dataset {ds} column names: {ds['dataset_id']}")
|
30 |
+
datasets = ds['dataset_id'].tolist()
|
31 |
+
dataset_ids = list(set(datasets))
|
32 |
+
return dataset_ids
|
33 |
+
|
34 |
+
def get_types(ds):
|
35 |
+
# set all types for each column
|
36 |
+
types = [str(t) for t in ds.dtypes.to_list()]
|
37 |
+
types = [t.replace('object', 'markdown') for t in types]
|
38 |
+
types = [t.replace('float64', 'number') for t in types]
|
39 |
+
types = [t.replace('int64', 'number') for t in types]
|
40 |
+
return types
|
41 |
+
|
42 |
+
def get_display_df(df):
|
43 |
+
# style all elements in the model_id column
|
44 |
+
display_df = df.copy()
|
45 |
+
columns = display_df.columns.tolist()
|
46 |
+
if 'model_id' in columns:
|
47 |
+
display_df['model_id'] = display_df['model_id'].apply(lambda x: f'<p href="https://huggingface.co/{x}" style="color:blue">🔗{x}</p>')
|
48 |
+
# style all elements in the dataset_id column
|
49 |
+
if 'dataset_id' in columns:
|
50 |
+
display_df['dataset_id'] = display_df['dataset_id'].apply(lambda x: f'<p href="https://huggingface.co/datasets/{x}" style="color:blue">🔗{x}</p>')
|
51 |
+
# style all elements in the report_link column
|
52 |
+
if 'report_link' in columns:
|
53 |
+
display_df['report_link'] = display_df['report_link'].apply(lambda x: f'<p href="{x}" style="color:blue">🔗{x}</p>')
|
54 |
+
return display_df
|
55 |
+
|
56 |
+
def get_demo():
|
57 |
+
records = get_records_from_dataset_repo('ZeroCommand/test-giskard-report')
|
58 |
+
|
59 |
+
model_ids = get_model_ids(records)
|
60 |
+
dataset_ids = get_dataset_ids(records)
|
61 |
+
|
62 |
+
column_names = records.columns.tolist()
|
63 |
+
default_columns = ['model_id', 'dataset_id', 'total_issues', 'report_link']
|
64 |
+
# set the default columns to show
|
65 |
+
default_df = records[default_columns]
|
66 |
+
types = get_types(default_df)
|
67 |
+
display_df = get_display_df(default_df)
|
68 |
+
|
69 |
+
with gr.Row():
|
70 |
+
task_select = gr.Dropdown(label='Task', choices=['text_classification', 'tabular'], value='text_classification', interactive=True)
|
71 |
+
model_select = gr.Dropdown(label='Model id', choices=model_ids, interactive=True)
|
72 |
+
dataset_select = gr.Dropdown(label='Dataset id', choices=dataset_ids, interactive=True)
|
73 |
+
|
74 |
+
with gr.Row():
|
75 |
+
columns_select = gr.CheckboxGroup(label='Show columns', choices=column_names, value=default_columns, interactive=True)
|
76 |
+
|
77 |
+
with gr.Row():
|
78 |
+
leaderboard_df = gr.DataFrame(display_df, datatype=types, interactive=False)
|
79 |
+
|
80 |
+
@gr.on(triggers=[model_select.change, dataset_select.change, columns_select.change, task_select.change],
|
81 |
+
inputs=[model_select, dataset_select, columns_select, task_select],
|
82 |
+
outputs=[leaderboard_df])
|
83 |
+
def filter_table(model_id, dataset_id, columns, task):
|
84 |
+
# filter the table based on task
|
85 |
+
df = records[(records['task'] == task)]
|
86 |
+
# filter the table based on the model_id and dataset_id
|
87 |
+
if model_id:
|
88 |
+
df = records[(records['model_id'] == model_id)]
|
89 |
+
if dataset_id:
|
90 |
+
df = records[(records['dataset_id'] == dataset_id)]
|
91 |
+
|
92 |
+
# filter the table based on the columns
|
93 |
+
df = df[columns]
|
94 |
+
types = get_types(df)
|
95 |
+
display_df = get_display_df(df)
|
96 |
+
return (
|
97 |
+
gr.update(value=display_df, datatype=types, interactive=False)
|
98 |
+
)
|
app_legacy.py
CHANGED
@@ -11,7 +11,7 @@ import json
|
|
11 |
from transformers.pipelines import TextClassificationPipeline
|
12 |
|
13 |
from text_classification import check_column_mapping_keys_validity, text_classification_fix_column_mapping
|
14 |
-
from
|
15 |
from wordings import CONFIRM_MAPPING_DETAILS_MD, CONFIRM_MAPPING_DETAILS_FAIL_MD
|
16 |
|
17 |
HF_REPO_ID = 'HF_REPO_ID'
|
|
|
11 |
from transformers.pipelines import TextClassificationPipeline
|
12 |
|
13 |
from text_classification import check_column_mapping_keys_validity, text_classification_fix_column_mapping
|
14 |
+
from io_utils import read_scanners, write_scanners, read_inference_type, write_inference_type, convert_column_mapping_to_json
|
15 |
from wordings import CONFIRM_MAPPING_DETAILS_MD, CONFIRM_MAPPING_DETAILS_FAIL_MD
|
16 |
|
17 |
HF_REPO_ID = 'HF_REPO_ID'
|
app_text_classification.py
CHANGED
@@ -4,14 +4,15 @@ import os
|
|
4 |
import time
|
5 |
import subprocess
|
6 |
import logging
|
|
|
7 |
|
8 |
import json
|
9 |
|
10 |
from transformers.pipelines import TextClassificationPipeline
|
11 |
|
12 |
-
from text_classification import get_labels_and_features_from_dataset, check_model, get_example_prediction
|
13 |
-
from
|
14 |
-
from wordings import
|
15 |
|
16 |
HF_REPO_ID = 'HF_REPO_ID'
|
17 |
HF_SPACE_ID = 'SPACE_ID'
|
@@ -95,7 +96,7 @@ def check_dataset_and_get_split(dataset_id, dataset_config):
|
|
95 |
|
96 |
def get_demo():
|
97 |
with gr.Row():
|
98 |
-
gr.Markdown(
|
99 |
with gr.Row():
|
100 |
model_id_input = gr.Textbox(
|
101 |
label="Hugging Face model id",
|
@@ -117,13 +118,17 @@ def get_demo():
|
|
117 |
example_prediction = gr.Label(label='Model Prediction Sample', visible=False)
|
118 |
|
119 |
with gr.Row():
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
|
|
|
|
|
|
|
|
127 |
|
128 |
with gr.Accordion(label='Model Wrap Advance Config (optional)', open=False):
|
129 |
run_local = gr.Checkbox(value=True, label="Run in this Space")
|
@@ -165,14 +170,12 @@ def get_demo():
|
|
165 |
all_mappings["features"][feat] = ds_features[i]
|
166 |
write_column_mapping(all_mappings)
|
167 |
|
168 |
-
def list_labels_and_features_from_dataset(
|
169 |
-
ds_labels, ds_features = get_labels_and_features_from_dataset(dataset_id, dataset_config, dataset_split)
|
170 |
-
if ds_labels is None or ds_features is None:
|
171 |
-
return [gr.Dropdown(visible=False) for _ in range(MAX_LABELS + MAX_FEATURES)]
|
172 |
model_labels = list(model_id2label.values())
|
173 |
lables = [gr.Dropdown(label=f"{label}", choices=model_labels, value=model_id2label[i], interactive=True, visible=True) for i, label in enumerate(ds_labels[:MAX_LABELS])]
|
174 |
lables += [gr.Dropdown(visible=False) for _ in range(MAX_LABELS - len(lables))]
|
175 |
-
|
|
|
176 |
features += [gr.Dropdown(visible=False) for _ in range(MAX_FEATURES - len(features))]
|
177 |
return lables + features
|
178 |
|
@@ -182,7 +185,7 @@ def get_demo():
|
|
182 |
|
183 |
@gr.on(triggers=[model_id_input.change, dataset_config_input.change, dataset_split_input.change],
|
184 |
inputs=[model_id_input, dataset_id_input, dataset_config_input, dataset_split_input],
|
185 |
-
outputs=[example_input, example_prediction, *column_mappings])
|
186 |
def check_model_and_show_prediction(model_id, dataset_id, dataset_config, dataset_split):
|
187 |
ppl = check_model(model_id)
|
188 |
if ppl is None or not isinstance(ppl, TextClassificationPipeline):
|
@@ -192,27 +195,52 @@ def get_demo():
|
|
192 |
gr.update(visible=False),
|
193 |
*[gr.update(visible=False) for _ in range(MAX_LABELS + MAX_FEATURES)]
|
194 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
model_id2label = ppl.model.config.id2label
|
196 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
column_mappings = list_labels_and_features_from_dataset(
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
model_id2label,
|
202 |
-
model_features
|
203 |
)
|
204 |
|
205 |
-
|
206 |
-
|
|
|
|
|
207 |
return (
|
208 |
gr.update(visible=False),
|
209 |
gr.update(visible=False),
|
|
|
210 |
*column_mappings
|
211 |
)
|
|
|
212 |
prediction_input, prediction_output = get_example_prediction(ppl, dataset_id, dataset_config, dataset_split)
|
213 |
return (
|
214 |
gr.update(value=prediction_input, visible=True),
|
215 |
gr.update(value=prediction_output, visible=True),
|
|
|
216 |
*column_mappings
|
217 |
)
|
218 |
|
@@ -222,7 +250,17 @@ def get_demo():
|
|
222 |
check_dataset_and_get_split,
|
223 |
inputs=[dataset_id_input, dataset_config_input],
|
224 |
outputs=[dataset_split_input])
|
225 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
gr.on(
|
227 |
triggers=[
|
228 |
run_btn.click,
|
|
|
4 |
import time
|
5 |
import subprocess
|
6 |
import logging
|
7 |
+
import collections
|
8 |
|
9 |
import json
|
10 |
|
11 |
from transformers.pipelines import TextClassificationPipeline
|
12 |
|
13 |
+
from text_classification import get_labels_and_features_from_dataset, check_model, get_example_prediction
|
14 |
+
from io_utils import read_scanners, write_scanners, read_inference_type, read_column_mapping, write_column_mapping, write_inference_type
|
15 |
+
from wordings import INTRODUCTION_MD, CONFIRM_MAPPING_DETAILS_MD, CONFIRM_MAPPING_DETAILS_FAIL_RAW
|
16 |
|
17 |
HF_REPO_ID = 'HF_REPO_ID'
|
18 |
HF_SPACE_ID = 'SPACE_ID'
|
|
|
96 |
|
97 |
def get_demo():
|
98 |
with gr.Row():
|
99 |
+
gr.Markdown(INTRODUCTION_MD)
|
100 |
with gr.Row():
|
101 |
model_id_input = gr.Textbox(
|
102 |
label="Hugging Face model id",
|
|
|
118 |
example_prediction = gr.Label(label='Model Prediction Sample', visible=False)
|
119 |
|
120 |
with gr.Row():
|
121 |
+
with gr.Accordion(label='Label and Feature Mapping', visible=False, open=False) as column_mapping_accordion:
|
122 |
+
with gr.Row():
|
123 |
+
gr.Markdown(CONFIRM_MAPPING_DETAILS_MD)
|
124 |
+
column_mappings = []
|
125 |
+
with gr.Row():
|
126 |
+
with gr.Column():
|
127 |
+
for _ in range(MAX_LABELS):
|
128 |
+
column_mappings.append(gr.Dropdown(visible=False))
|
129 |
+
with gr.Column():
|
130 |
+
for _ in range(MAX_LABELS, MAX_LABELS + MAX_FEATURES):
|
131 |
+
column_mappings.append(gr.Dropdown(visible=False))
|
132 |
|
133 |
with gr.Accordion(label='Model Wrap Advance Config (optional)', open=False):
|
134 |
run_local = gr.Checkbox(value=True, label="Run in this Space")
|
|
|
170 |
all_mappings["features"][feat] = ds_features[i]
|
171 |
write_column_mapping(all_mappings)
|
172 |
|
173 |
+
def list_labels_and_features_from_dataset(ds_labels, ds_features, model_id2label):
|
|
|
|
|
|
|
174 |
model_labels = list(model_id2label.values())
|
175 |
lables = [gr.Dropdown(label=f"{label}", choices=model_labels, value=model_id2label[i], interactive=True, visible=True) for i, label in enumerate(ds_labels[:MAX_LABELS])]
|
176 |
lables += [gr.Dropdown(visible=False) for _ in range(MAX_LABELS - len(lables))]
|
177 |
+
# TODO: Substitute 'text' with more features for zero-shot
|
178 |
+
features = [gr.Dropdown(label=f"{feature}", choices=ds_features, value=ds_features[0], interactive=True, visible=True) for feature in ['text']]
|
179 |
features += [gr.Dropdown(visible=False) for _ in range(MAX_FEATURES - len(features))]
|
180 |
return lables + features
|
181 |
|
|
|
185 |
|
186 |
@gr.on(triggers=[model_id_input.change, dataset_config_input.change, dataset_split_input.change],
|
187 |
inputs=[model_id_input, dataset_id_input, dataset_config_input, dataset_split_input],
|
188 |
+
outputs=[example_input, example_prediction, column_mapping_accordion, *column_mappings])
|
189 |
def check_model_and_show_prediction(model_id, dataset_id, dataset_config, dataset_split):
|
190 |
ppl = check_model(model_id)
|
191 |
if ppl is None or not isinstance(ppl, TextClassificationPipeline):
|
|
|
195 |
gr.update(visible=False),
|
196 |
*[gr.update(visible=False) for _ in range(MAX_LABELS + MAX_FEATURES)]
|
197 |
)
|
198 |
+
|
199 |
+
dropdown_placement = [gr.Dropdown(visible=False) for _ in range(MAX_LABELS + MAX_FEATURES)]
|
200 |
+
|
201 |
+
if ppl is None: # pipeline not found
|
202 |
+
gr.Warning("Model not found")
|
203 |
+
return (
|
204 |
+
gr.update(visible=False),
|
205 |
+
gr.update(visible=False),
|
206 |
+
gr.update(visible=False, open=False),
|
207 |
+
*dropdown_placement
|
208 |
+
)
|
209 |
model_id2label = ppl.model.config.id2label
|
210 |
+
ds_labels, ds_features = get_labels_and_features_from_dataset(dataset_id, dataset_config, dataset_split)
|
211 |
+
|
212 |
+
# when dataset does not have labels or features
|
213 |
+
if not isinstance(ds_labels, list) or not isinstance(ds_features, list):
|
214 |
+
gr.Warning(CONFIRM_MAPPING_DETAILS_FAIL_RAW)
|
215 |
+
return (
|
216 |
+
gr.update(visible=False),
|
217 |
+
gr.update(visible=False),
|
218 |
+
gr.update(visible=False, open=False),
|
219 |
+
*dropdown_placement
|
220 |
+
)
|
221 |
+
|
222 |
column_mappings = list_labels_and_features_from_dataset(
|
223 |
+
ds_labels,
|
224 |
+
ds_features,
|
225 |
+
model_id2label,
|
|
|
|
|
226 |
)
|
227 |
|
228 |
+
# when labels or features are not aligned
|
229 |
+
# show manually column mapping
|
230 |
+
if collections.Counter(model_id2label.items()) != collections.Counter(ds_labels) or ds_features[0] != 'text':
|
231 |
+
gr.Warning(CONFIRM_MAPPING_DETAILS_FAIL_RAW)
|
232 |
return (
|
233 |
gr.update(visible=False),
|
234 |
gr.update(visible=False),
|
235 |
+
gr.update(visible=True, open=True),
|
236 |
*column_mappings
|
237 |
)
|
238 |
+
|
239 |
prediction_input, prediction_output = get_example_prediction(ppl, dataset_id, dataset_config, dataset_split)
|
240 |
return (
|
241 |
gr.update(value=prediction_input, visible=True),
|
242 |
gr.update(value=prediction_output, visible=True),
|
243 |
+
gr.update(visible=True, open=False),
|
244 |
*column_mappings
|
245 |
)
|
246 |
|
|
|
250 |
check_dataset_and_get_split,
|
251 |
inputs=[dataset_id_input, dataset_config_input],
|
252 |
outputs=[dataset_split_input])
|
253 |
+
|
254 |
+
scanners.change(
|
255 |
+
write_scanners,
|
256 |
+
inputs=scanners
|
257 |
+
)
|
258 |
+
|
259 |
+
run_inference.change(
|
260 |
+
write_inference_type,
|
261 |
+
inputs=[run_inference]
|
262 |
+
)
|
263 |
+
|
264 |
gr.on(
|
265 |
triggers=[
|
266 |
run_btn.click,
|
cicd
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
Subproject commit 24d96209fb943568e001d582999345e2c58e0876
|
fetch_utils.py
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import huggingface_hub
|
2 |
+
import datasets
|
3 |
+
import logging
|
4 |
+
|
5 |
+
def check_dataset_and_get_config(dataset_id):
|
6 |
+
try:
|
7 |
+
configs = datasets.get_dataset_config_names(dataset_id)
|
8 |
+
return configs
|
9 |
+
except Exception:
|
10 |
+
# Dataset may not exist
|
11 |
+
return None
|
12 |
+
|
13 |
+
def check_dataset_and_get_split(dataset_id, dataset_config):
|
14 |
+
try:
|
15 |
+
ds = datasets.load_dataset(dataset_id, dataset_config)
|
16 |
+
except Exception as e:
|
17 |
+
# Dataset may not exist
|
18 |
+
logging.warning(f"Failed to load dataset {dataset_id} with config {dataset_config}: {e}")
|
19 |
+
return None
|
20 |
+
try:
|
21 |
+
splits = list(ds.keys())
|
22 |
+
return splits
|
23 |
+
except Exception as e:
|
24 |
+
# Dataset has no splits
|
25 |
+
logging.warning(f"Dataset {dataset_id} with config {dataset_config} has no splits: {e}")
|
26 |
+
return None
|
utils.py → io_utils.py
RENAMED
@@ -17,13 +17,13 @@ def read_scanners(path):
|
|
17 |
|
18 |
# convert a list of scanners to yaml file
|
19 |
def write_scanners(scanners):
|
20 |
-
|
|
|
21 |
config = yaml.load(f, Loader=yaml.FullLoader)
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
yaml.dump(config, f, Dumper=Dumper)
|
27 |
|
28 |
# read model_type from yaml file
|
29 |
def read_inference_type(path):
|
@@ -35,15 +35,14 @@ def read_inference_type(path):
|
|
35 |
|
36 |
# write model_type to yaml file
|
37 |
def write_inference_type(use_inference):
|
38 |
-
with open(YAML_PATH, "r") as f:
|
39 |
config = yaml.load(f, Loader=yaml.FullLoader)
|
40 |
if use_inference:
|
41 |
config["inference_type"] = 'hf_inference_api'
|
42 |
else:
|
43 |
config["inference_type"] = 'hf_pipeline'
|
44 |
-
|
45 |
-
|
46 |
-
yaml.dump(config, f, Dumper=Dumper)
|
47 |
|
48 |
# read column mapping from yaml file
|
49 |
def read_column_mapping(path):
|
|
|
17 |
|
18 |
# convert a list of scanners to yaml file
|
19 |
def write_scanners(scanners):
|
20 |
+
print(scanners)
|
21 |
+
with open(YAML_PATH, "r+") as f:
|
22 |
config = yaml.load(f, Loader=yaml.FullLoader)
|
23 |
+
if config:
|
24 |
+
config["detectors"] = scanners
|
25 |
+
# save scanners to detectors in yaml
|
26 |
+
yaml.dump(config, f, Dumper=Dumper)
|
|
|
27 |
|
28 |
# read model_type from yaml file
|
29 |
def read_inference_type(path):
|
|
|
35 |
|
36 |
# write model_type to yaml file
|
37 |
def write_inference_type(use_inference):
|
38 |
+
with open(YAML_PATH, "r+") as f:
|
39 |
config = yaml.load(f, Loader=yaml.FullLoader)
|
40 |
if use_inference:
|
41 |
config["inference_type"] = 'hf_inference_api'
|
42 |
else:
|
43 |
config["inference_type"] = 'hf_pipeline'
|
44 |
+
# save inference_type to inference_type in yaml
|
45 |
+
yaml.dump(config, f, Dumper=Dumper)
|
|
|
46 |
|
47 |
# read column mapping from yaml file
|
48 |
def read_column_mapping(path):
|
wordings.py
CHANGED
@@ -1,10 +1,15 @@
|
|
1 |
-
|
2 |
<h1 style="text-align: center;">
|
3 |
-
Giskard Evaluator
|
4 |
</h1>
|
5 |
Welcome to Giskard Evaluator Space! Get your report immediately by simply input your model id and dataset id below. Follow our leads and improve your model in no time.
|
6 |
'''
|
7 |
-
|
|
|
|
|
|
|
|
|
|
|
8 |
CONFIRM_MAPPING_DETAILS_FAIL_MD = '''
|
9 |
<h1 style="text-align: center;">
|
10 |
Confirm Pre-processing Details
|
|
|
1 |
+
INTRODUCTION_MD = '''
|
2 |
<h1 style="text-align: center;">
|
3 |
+
🐢Giskard Evaluator
|
4 |
</h1>
|
5 |
Welcome to Giskard Evaluator Space! Get your report immediately by simply input your model id and dataset id below. Follow our leads and improve your model in no time.
|
6 |
'''
|
7 |
+
CONFIRM_MAPPING_DETAILS_MD = '''
|
8 |
+
<h1 style="text-align: center;">
|
9 |
+
Confirm Pre-processing Details
|
10 |
+
</h1>
|
11 |
+
Please confirm the pre-processing details below. If you are not sure, please double check your model and dataset.
|
12 |
+
'''
|
13 |
CONFIRM_MAPPING_DETAILS_FAIL_MD = '''
|
14 |
<h1 style="text-align: center;">
|
15 |
Confirm Pre-processing Details
|