AIppyDev commited on
Commit
9970646
·
1 Parent(s): f0f7196

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
- exercice_choices = (
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=exercice_choices,
56
- value=exercice_choices[0] if exercice_choices else None,
57
  )
58
 
59
  details_md = gr.Markdown(
@@ -120,12 +127,37 @@ def render_dl_execution_tab(
120
  label="Metrics",
121
  )
122
 
123
- # Callback de mise à jour details + tableau + prompt
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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, # ou [] mais None évite le warning
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