Spaces:
Runtime error
Runtime error
Commit
·
582e085
1
Parent(s):
47e279a
Metrics editor
Browse files- app.py +118 -10
- requirements.txt +2 -1
app.py
CHANGED
|
@@ -6,6 +6,7 @@ import requests
|
|
| 6 |
import streamlit as st
|
| 7 |
import yaml
|
| 8 |
from huggingface_hub import hf_hub_download
|
|
|
|
| 9 |
from streamlit_tags import st_tags
|
| 10 |
|
| 11 |
# exact same regex as in the Hub server. Please keep in sync.
|
|
@@ -93,7 +94,7 @@ def main():
|
|
| 93 |
"[our list here](https://huggingface.co/spaces/huggingface/hf-speech-bench/blob/main/languages.json). "
|
| 94 |
"When in doubt, use the most generic language code, e.g. `en` instead of `en-GB` and `en-US`."
|
| 95 |
)
|
| 96 |
-
st.markdown("*Example*: `
|
| 97 |
metadata["language"] = metadata["language"] if "language" in metadata else []
|
| 98 |
metadata["language"] = (
|
| 99 |
metadata["language"]
|
|
@@ -107,13 +108,19 @@ def main():
|
|
| 107 |
lang_names = [lang2name[lang] if lang in lang2name else lang for lang in languages]
|
| 108 |
st.markdown("These languages will be parsed by the leaderboard as: ")
|
| 109 |
st.code(", ".join(lang_names))
|
|
|
|
| 110 |
|
| 111 |
############################
|
| 112 |
# TRAIN DATASETS
|
| 113 |
############################
|
| 114 |
st.markdown("### Training dataset(s)")
|
| 115 |
-
st.markdown(
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
if "datasets" not in metadata:
|
| 119 |
metadata["datasets"] = []
|
|
@@ -126,6 +133,7 @@ def main():
|
|
| 126 |
"WARNING: `common_voice` is deprecated, please replace it with its equivalent: "
|
| 127 |
"`mozilla-foundation/common_voice_6_1`"
|
| 128 |
)
|
|
|
|
| 129 |
|
| 130 |
############################
|
| 131 |
# MODEL NAME
|
|
@@ -134,16 +142,116 @@ def main():
|
|
| 134 |
st.markdown("Enter a descriptive name for your model.")
|
| 135 |
st.markdown("*Example*: `XLS-R Wav2Vec2 LM Spanish by Jane Doe`")
|
| 136 |
|
| 137 |
-
if "
|
| 138 |
-
metadata["
|
| 139 |
-
if "name" not in ["
|
| 140 |
-
metadata["
|
| 141 |
-
model_name = st.text_input("", value=metadata["
|
|
|
|
| 142 |
|
| 143 |
############################
|
| 144 |
-
# EVAL
|
| 145 |
############################
|
| 146 |
-
st.markdown("### Evaluation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 147 |
|
| 148 |
|
| 149 |
if __name__ == "__main__":
|
|
|
|
| 6 |
import streamlit as st
|
| 7 |
import yaml
|
| 8 |
from huggingface_hub import hf_hub_download
|
| 9 |
+
from streamlit_ace import st_ace
|
| 10 |
from streamlit_tags import st_tags
|
| 11 |
|
| 12 |
# exact same regex as in the Hub server. Please keep in sync.
|
|
|
|
| 94 |
"[our list here](https://huggingface.co/spaces/huggingface/hf-speech-bench/blob/main/languages.json). "
|
| 95 |
"When in doubt, use the most generic language code, e.g. `en` instead of `en-GB` and `en-US`."
|
| 96 |
)
|
| 97 |
+
st.markdown("*Example*: `en, gsw, pt-BR`")
|
| 98 |
metadata["language"] = metadata["language"] if "language" in metadata else []
|
| 99 |
metadata["language"] = (
|
| 100 |
metadata["language"]
|
|
|
|
| 108 |
lang_names = [lang2name[lang] if lang in lang2name else lang for lang in languages]
|
| 109 |
st.markdown("These languages will be parsed by the leaderboard as: ")
|
| 110 |
st.code(", ".join(lang_names))
|
| 111 |
+
metadata["language"] = languages
|
| 112 |
|
| 113 |
############################
|
| 114 |
# TRAIN DATASETS
|
| 115 |
############################
|
| 116 |
st.markdown("### Training dataset(s)")
|
| 117 |
+
st.markdown(
|
| 118 |
+
"List the datasets that your model was **trained** on. "
|
| 119 |
+
"If the datasets aren't published on the Hub yet, just add their names anyway."
|
| 120 |
+
)
|
| 121 |
+
st.markdown(
|
| 122 |
+
"*Example*: `librispeech_asr, mozilla-foundation/common_voice_8_0, my_custom_youtube_dataset`"
|
| 123 |
+
)
|
| 124 |
|
| 125 |
if "datasets" not in metadata:
|
| 126 |
metadata["datasets"] = []
|
|
|
|
| 133 |
"WARNING: `common_voice` is deprecated, please replace it with its equivalent: "
|
| 134 |
"`mozilla-foundation/common_voice_6_1`"
|
| 135 |
)
|
| 136 |
+
metadata["datasets"] = train_datasets
|
| 137 |
|
| 138 |
############################
|
| 139 |
# MODEL NAME
|
|
|
|
| 142 |
st.markdown("Enter a descriptive name for your model.")
|
| 143 |
st.markdown("*Example*: `XLS-R Wav2Vec2 LM Spanish by Jane Doe`")
|
| 144 |
|
| 145 |
+
if "model-index" not in metadata:
|
| 146 |
+
metadata["model-index"] = [{}]
|
| 147 |
+
if "name" not in ["model-index"][0]:
|
| 148 |
+
metadata["model-index"][0]["name"] = model_id.split("/")[-1]
|
| 149 |
+
model_name = st.text_input("", value=metadata["model-index"][0]["name"])
|
| 150 |
+
metadata["model-index"][0]["name"] = model_name
|
| 151 |
|
| 152 |
############################
|
| 153 |
+
# EVAL RESULTS
|
| 154 |
############################
|
| 155 |
+
st.markdown("### Evaluation results")
|
| 156 |
+
st.markdown("To edit the metrics, you can either use the YAML editor below, or add new metrics using the handy "
|
| 157 |
+
"form under it.")
|
| 158 |
+
if "results" not in metadata["model-index"][0]:
|
| 159 |
+
metadata["model-index"][0]["results"] = []
|
| 160 |
+
|
| 161 |
+
results_editor = st.empty()
|
| 162 |
+
with results_editor:
|
| 163 |
+
results_yaml = yaml.dump(
|
| 164 |
+
metadata["model-index"][0]["results"], sort_keys=False, line_break="\n"
|
| 165 |
+
)
|
| 166 |
+
results_yaml = st_ace(value=results_yaml, language="yaml")
|
| 167 |
+
metadata["model-index"][0]["results"] = try_parse_yaml(results_yaml)
|
| 168 |
+
|
| 169 |
+
with st.form(key="eval_form"):
|
| 170 |
+
dataset_name = st.text_input(
|
| 171 |
+
label="Full name of the dataset", placeholder="Common Voice 8.0"
|
| 172 |
+
)
|
| 173 |
+
dataset_path = st.text_input(
|
| 174 |
+
label="Dataset path / id", placeholder="mozilla-foundation/common_voice_8_0"
|
| 175 |
+
)
|
| 176 |
+
dataset_config = st.text_input(
|
| 177 |
+
label="Dataset config (language). Examples: en, pt-BR, clean",
|
| 178 |
+
placeholder="en",
|
| 179 |
+
)
|
| 180 |
+
metric_name = st.text_input(label="Metric name", placeholder="Test WER (+LM)")
|
| 181 |
+
metric2name = {"wer": "Word Error Rate", "cer": "Character Error Rate"}
|
| 182 |
+
metric_type = st.selectbox(
|
| 183 |
+
label="Metric",
|
| 184 |
+
options=["wer", "cer"],
|
| 185 |
+
format_func=lambda key: metric2name[key],
|
| 186 |
+
)
|
| 187 |
+
metric_value = st.text_input(
|
| 188 |
+
label="Metric value (0.0 - 100.0)",
|
| 189 |
+
placeholder="12.34",
|
| 190 |
+
)
|
| 191 |
+
try:
|
| 192 |
+
metric_value = float(metric_value)
|
| 193 |
+
except ValueError:
|
| 194 |
+
st.error(f"Couldn't parse `{metric_value}`. Make sure it's a number from 0.0 to 100.0")
|
| 195 |
+
|
| 196 |
+
submitted = st.form_submit_button("Submit")
|
| 197 |
+
if submitted:
|
| 198 |
+
metric = {
|
| 199 |
+
"name": metric_name,
|
| 200 |
+
"type": metric_type,
|
| 201 |
+
"value": metric_value,
|
| 202 |
+
}
|
| 203 |
+
# first, try to find an existing dataset+config record to add a new metric to it
|
| 204 |
+
updated_existing = False
|
| 205 |
+
for existing_result in metadata["model-index"][0]["results"]:
|
| 206 |
+
existing_dataset = existing_result["dataset"]
|
| 207 |
+
if (
|
| 208 |
+
existing_dataset["type"] == dataset_path
|
| 209 |
+
and existing_dataset["args"] == dataset_config
|
| 210 |
+
):
|
| 211 |
+
if "metrics" not in existing_result:
|
| 212 |
+
existing_result["metrics"] = []
|
| 213 |
+
existing_result["metrics"].append(metric)
|
| 214 |
+
updated_existing = True
|
| 215 |
+
break
|
| 216 |
+
# if no dataset+config results found, create a new one
|
| 217 |
+
if not updated_existing:
|
| 218 |
+
result = {
|
| 219 |
+
"task": {
|
| 220 |
+
"name": "Automatic Speech Recognition",
|
| 221 |
+
"type": "automatic-speech-recognition",
|
| 222 |
+
},
|
| 223 |
+
"dataset": {
|
| 224 |
+
"name": dataset_name,
|
| 225 |
+
"type": dataset_path,
|
| 226 |
+
"args": dataset_config,
|
| 227 |
+
},
|
| 228 |
+
"metrics": [metric],
|
| 229 |
+
}
|
| 230 |
+
metadata["model-index"][0]["results"].append(result)
|
| 231 |
+
|
| 232 |
+
# update the code editor
|
| 233 |
+
with results_editor:
|
| 234 |
+
results_yaml = yaml.dump(
|
| 235 |
+
metadata["model-index"][0]["results"],
|
| 236 |
+
sort_keys=False,
|
| 237 |
+
line_break="\n",
|
| 238 |
+
)
|
| 239 |
+
results_yaml = st_ace(value=results_yaml, language="yaml")
|
| 240 |
+
metadata["model-index"][0]["results"] = try_parse_yaml(results_yaml)
|
| 241 |
+
st.success(f"Added the metric for {dataset_path} - {dataset_config}! "
|
| 242 |
+
f"Check the result in the YAML editor above.")
|
| 243 |
+
|
| 244 |
+
############################
|
| 245 |
+
# FINAL YAML
|
| 246 |
+
############################
|
| 247 |
+
st.markdown("## 3. Copy the generated metadata")
|
| 248 |
+
st.markdown(
|
| 249 |
+
"Copy the YAML from below and replace the metadata at the top of your model's README.md here: "
|
| 250 |
+
f"https://huggingface.co/{model_id}/blob/main/README.md"
|
| 251 |
+
)
|
| 252 |
+
|
| 253 |
+
new_yaml = yaml.dump(metadata, sort_keys=False, line_break="\n")
|
| 254 |
+
st.markdown(f"```yaml\n---\n{new_yaml}---\n```")
|
| 255 |
|
| 256 |
|
| 257 |
if __name__ == "__main__":
|
requirements.txt
CHANGED
|
@@ -1 +1,2 @@
|
|
| 1 |
-
streamlit-tags
|
|
|
|
|
|
| 1 |
+
streamlit-tags
|
| 2 |
+
streamlit-ace
|