Spaces:
Sleeping
Sleeping
render_dl_execution_tab
Browse files
src/gradio/pages/dl_execution_tab.py
CHANGED
|
@@ -34,7 +34,7 @@ def render_dl_execution_tab(
|
|
| 34 |
df_no_exec = df.copy()
|
| 35 |
|
| 36 |
has_name_col = "exercise_name" in df_no_exec.columns
|
| 37 |
-
|
| 38 |
sorted(df_no_exec["exercise_name"].dropna().unique().tolist())
|
| 39 |
if has_name_col
|
| 40 |
else []
|
|
@@ -49,11 +49,18 @@ def render_dl_execution_tab(
|
|
| 49 |
|
| 50 |
gr.Markdown("### Program details")
|
| 51 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 52 |
with gr.Row():
|
| 53 |
exercice_selector = gr.Dropdown(
|
| 54 |
label="Select a program without execution",
|
| 55 |
-
choices=
|
| 56 |
-
value=
|
| 57 |
)
|
| 58 |
|
| 59 |
details_md = gr.Markdown(
|
|
@@ -120,12 +127,37 @@ def render_dl_execution_tab(
|
|
| 120 |
label="Metrics",
|
| 121 |
)
|
| 122 |
|
| 123 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
def _format_details_exec(ex_name: str):
|
| 125 |
empty_df = pd.DataFrame(columns=selected_cols)
|
| 126 |
empty_prompt = ""
|
| 127 |
|
| 128 |
-
if not ex_name:
|
| 129 |
return (
|
| 130 |
"Select a program **without execution description** "
|
| 131 |
"to see its details.",
|
|
@@ -165,8 +197,23 @@ def render_dl_execution_tab(
|
|
| 165 |
df_summary, df_model_df, df_training_df, df_metrics_df = get_dl_execution_model_report_components()
|
| 166 |
return df_summary, df_model_df, df_training_df, df_metrics_df
|
| 167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
|
|
|
|
| 170 |
exercice_selector.change(
|
| 171 |
_format_details_exec,
|
| 172 |
inputs=exercice_selector,
|
|
@@ -180,9 +227,10 @@ def render_dl_execution_tab(
|
|
| 180 |
outputs=generated_exec,
|
| 181 |
)
|
| 182 |
|
|
|
|
| 183 |
tab_dl_exec.select(
|
| 184 |
_update_exec_report,
|
| 185 |
-
inputs=None,
|
| 186 |
outputs=[dl_summary, dl_model, dl_training, dl_metrics],
|
| 187 |
)
|
| 188 |
|
|
|
|
| 34 |
df_no_exec = df.copy()
|
| 35 |
|
| 36 |
has_name_col = "exercise_name" in df_no_exec.columns
|
| 37 |
+
exercice_choices_all = (
|
| 38 |
sorted(df_no_exec["exercise_name"].dropna().unique().tolist())
|
| 39 |
if has_name_col
|
| 40 |
else []
|
|
|
|
| 49 |
|
| 50 |
gr.Markdown("### Program details")
|
| 51 |
|
| 52 |
+
# ---- Zone de recherche + dropdown filtrée ----
|
| 53 |
+
with gr.Row():
|
| 54 |
+
search_box = gr.Textbox(
|
| 55 |
+
label="Filter programs (by keyword)",
|
| 56 |
+
placeholder="Type part of the program name (e.g. squat, push, arms)...",
|
| 57 |
+
)
|
| 58 |
+
|
| 59 |
with gr.Row():
|
| 60 |
exercice_selector = gr.Dropdown(
|
| 61 |
label="Select a program without execution",
|
| 62 |
+
choices=[], # on remplit dynamiquement
|
| 63 |
+
value=None,
|
| 64 |
)
|
| 65 |
|
| 66 |
details_md = gr.Markdown(
|
|
|
|
| 127 |
label="Metrics",
|
| 128 |
)
|
| 129 |
|
| 130 |
+
# ---------- Callbacks ----------
|
| 131 |
+
|
| 132 |
+
# 1) Filtrer la liste d'exos en fonction de la recherche
|
| 133 |
+
def _filter_programs(query: str):
|
| 134 |
+
if not exercice_choices_all:
|
| 135 |
+
return gr.update(choices=[], value=None)
|
| 136 |
+
|
| 137 |
+
if not query:
|
| 138 |
+
# si aucune recherche → on ne propose que les 30 premiers
|
| 139 |
+
subset = exercice_choices_all[:30]
|
| 140 |
+
else:
|
| 141 |
+
q = query.lower().strip()
|
| 142 |
+
subset = [
|
| 143 |
+
name for name in exercice_choices_all
|
| 144 |
+
if q in name.lower()
|
| 145 |
+
][:50] # on limite à 50 résultats
|
| 146 |
+
|
| 147 |
+
if not subset:
|
| 148 |
+
subset = ["No match found"]
|
| 149 |
+
value = "No match found"
|
| 150 |
+
else:
|
| 151 |
+
value = subset[0]
|
| 152 |
+
|
| 153 |
+
return gr.update(choices=subset, value=value)
|
| 154 |
+
|
| 155 |
+
# 2) Mise à jour details + tableau + prompt
|
| 156 |
def _format_details_exec(ex_name: str):
|
| 157 |
empty_df = pd.DataFrame(columns=selected_cols)
|
| 158 |
empty_prompt = ""
|
| 159 |
|
| 160 |
+
if not ex_name or ex_name == "No match found":
|
| 161 |
return (
|
| 162 |
"Select a program **without execution description** "
|
| 163 |
"to see its details.",
|
|
|
|
| 197 |
df_summary, df_model_df, df_training_df, df_metrics_df = get_dl_execution_model_report_components()
|
| 198 |
return df_summary, df_model_df, df_training_df, df_metrics_df
|
| 199 |
|
| 200 |
+
# ---------- Wiring des événements ----------
|
| 201 |
+
|
| 202 |
+
# mise à jour des choix de la dropdown quand on tape dans la recherche
|
| 203 |
+
search_box.change(
|
| 204 |
+
_filter_programs,
|
| 205 |
+
inputs=search_box,
|
| 206 |
+
outputs=exercice_selector,
|
| 207 |
+
)
|
| 208 |
|
| 209 |
+
# Optionnel : pré-remplir au chargement du tab avec les 30 premiers
|
| 210 |
+
tab_dl_exec.select(
|
| 211 |
+
lambda: _filter_programs(""),
|
| 212 |
+
inputs=None,
|
| 213 |
+
outputs=exercice_selector,
|
| 214 |
+
)
|
| 215 |
|
| 216 |
+
# mise à jour des détails quand on choisit un programme
|
| 217 |
exercice_selector.change(
|
| 218 |
_format_details_exec,
|
| 219 |
inputs=exercice_selector,
|
|
|
|
| 227 |
outputs=generated_exec,
|
| 228 |
)
|
| 229 |
|
| 230 |
+
# Rapport modèle DL au select du tab
|
| 231 |
tab_dl_exec.select(
|
| 232 |
_update_exec_report,
|
| 233 |
+
inputs=None,
|
| 234 |
outputs=[dl_summary, dl_model, dl_training, dl_metrics],
|
| 235 |
)
|
| 236 |
|