nazdridoy commited on
Commit
8243b24
·
verified ·
1 Parent(s): d48e4d6

ui: implement dynamic stop button visibility

Browse files

- [ui] Initialize `chat_stop` button with `visible=False` (ui_components.py:create_chat_tab():36)
- [ui] Add `chat_submit.click()` handler to set `chat_stop` `visible=True` (create_chat_tab():68-73)
- [ui] Add `chat_input.submit()` handler to set `chat_stop` `visible=True` (create_chat_tab():79-84)
- [ui] Modify `chat_stop.click()` handler to hide itself and set `queue=False` (create_chat_tab():90-94)
- [ui] Add `.then()` handlers to hide `chat_stop` after `chat_send_event` or `chat_enter_event` complete (create_chat_tab():97-98)
- [ui] Initialize `stop_generate_btn` button with `visible=False` (ui_components.py:create_image_tab():225)
- [ui] Add `generate_btn.click()` handler to set `stop_generate_btn` `visible=True` (create_image_tab():231-236)
- [ui] Modify `stop_generate_btn.click()` handler to hide itself and set `queue=False` (create_image_tab():245-249)
- [ui] Add `.then()` handler to hide `stop_generate_btn` after `gen_event` completes (create_image_tab():252)

Files changed (1) hide show
  1. ui_components.py +41 -8
ui_components.py CHANGED
@@ -33,7 +33,7 @@ def create_chat_tab(handle_chat_submit_fn, handle_chat_retry_fn=None):
33
  container=False
34
  )
35
  chat_submit = gr.Button("Send", variant="primary", scale=1)
36
- chat_stop = gr.Button("⏹ Stop", variant="secondary", scale=0)
37
 
38
  # Configuration options below the chat
39
  with gr.Row():
@@ -68,6 +68,14 @@ def create_chat_tab(handle_chat_submit_fn, handle_chat_retry_fn=None):
68
  create_chat_tips()
69
 
70
  # Connect chat events (streaming auto-detected from generator function)
 
 
 
 
 
 
 
 
71
  chat_send_event = chat_submit.click(
72
  fn=handle_chat_submit_fn,
73
  inputs=[chat_input, chatbot_display, chat_system_message, chat_model_name,
@@ -75,6 +83,14 @@ def create_chat_tab(handle_chat_submit_fn, handle_chat_retry_fn=None):
75
  outputs=[chatbot_display, chat_input]
76
  )
77
 
 
 
 
 
 
 
 
 
78
  chat_enter_event = chat_input.submit(
79
  fn=handle_chat_submit_fn,
80
  inputs=[chat_input, chatbot_display, chat_system_message, chat_model_name,
@@ -84,12 +100,17 @@ def create_chat_tab(handle_chat_submit_fn, handle_chat_retry_fn=None):
84
 
85
  # Stop current chat generation
86
  chat_stop.click(
87
- fn=None,
88
  inputs=None,
89
- outputs=None,
90
- cancels=[chat_send_event, chat_enter_event]
 
91
  )
92
 
 
 
 
 
93
  # Enable retry icon and bind handler if provided
94
  if handle_chat_retry_fn is not None:
95
  chatbot_display.retry(
@@ -222,7 +243,7 @@ def create_image_tab(handle_image_generation_fn):
222
  size="lg",
223
  scale=2
224
  )
225
- stop_generate_btn = gr.Button("⏹ Stop", variant="secondary")
226
 
227
  # Quick model presets
228
  create_image_presets(img_model_name, img_provider)
@@ -231,6 +252,14 @@ def create_image_tab(handle_image_generation_fn):
231
  create_image_examples(img_prompt)
232
 
233
  # Connect image generation events
 
 
 
 
 
 
 
 
234
  gen_event = generate_btn.click(
235
  fn=handle_image_generation_fn,
236
  inputs=[
@@ -242,12 +271,16 @@ def create_image_tab(handle_image_generation_fn):
242
 
243
  # Stop current image generation
244
  stop_generate_btn.click(
245
- fn=None,
246
  inputs=None,
247
- outputs=None,
248
- cancels=[gen_event]
 
249
  )
250
 
 
 
 
251
 
252
  def create_image_presets(img_model_name, img_provider):
253
  """Create quick model presets for image generation."""
 
33
  container=False
34
  )
35
  chat_submit = gr.Button("Send", variant="primary", scale=1)
36
+ chat_stop = gr.Button("⏹ Stop", variant="secondary", scale=0, visible=False)
37
 
38
  # Configuration options below the chat
39
  with gr.Row():
 
68
  create_chat_tips()
69
 
70
  # Connect chat events (streaming auto-detected from generator function)
71
+ # Show stop immediately when sending
72
+ chat_submit.click(
73
+ fn=lambda: gr.update(visible=True),
74
+ inputs=None,
75
+ outputs=[chat_stop],
76
+ queue=False
77
+ )
78
+
79
  chat_send_event = chat_submit.click(
80
  fn=handle_chat_submit_fn,
81
  inputs=[chat_input, chatbot_display, chat_system_message, chat_model_name,
 
83
  outputs=[chatbot_display, chat_input]
84
  )
85
 
86
+ # Show stop immediately when pressing Enter
87
+ chat_input.submit(
88
+ fn=lambda: gr.update(visible=True),
89
+ inputs=None,
90
+ outputs=[chat_stop],
91
+ queue=False
92
+ )
93
+
94
  chat_enter_event = chat_input.submit(
95
  fn=handle_chat_submit_fn,
96
  inputs=[chat_input, chatbot_display, chat_system_message, chat_model_name,
 
100
 
101
  # Stop current chat generation
102
  chat_stop.click(
103
+ fn=lambda: gr.update(visible=False),
104
  inputs=None,
105
+ outputs=[chat_stop],
106
+ cancels=[chat_send_event, chat_enter_event],
107
+ queue=False
108
  )
109
 
110
+ # Hide stop after completion of chat events
111
+ chat_send_event.then(lambda: gr.update(visible=False), None, [chat_stop], queue=False)
112
+ chat_enter_event.then(lambda: gr.update(visible=False), None, [chat_stop], queue=False)
113
+
114
  # Enable retry icon and bind handler if provided
115
  if handle_chat_retry_fn is not None:
116
  chatbot_display.retry(
 
243
  size="lg",
244
  scale=2
245
  )
246
+ stop_generate_btn = gr.Button("⏹ Stop", variant="secondary", visible=False)
247
 
248
  # Quick model presets
249
  create_image_presets(img_model_name, img_provider)
 
252
  create_image_examples(img_prompt)
253
 
254
  # Connect image generation events
255
+ # Show stop immediately when starting generation
256
+ generate_btn.click(
257
+ fn=lambda: gr.update(visible=True),
258
+ inputs=None,
259
+ outputs=[stop_generate_btn],
260
+ queue=False
261
+ )
262
+
263
  gen_event = generate_btn.click(
264
  fn=handle_image_generation_fn,
265
  inputs=[
 
271
 
272
  # Stop current image generation
273
  stop_generate_btn.click(
274
+ fn=lambda: gr.update(visible=False),
275
  inputs=None,
276
+ outputs=[stop_generate_btn],
277
+ cancels=[gen_event],
278
+ queue=False
279
  )
280
 
281
+ # Hide stop after generation completes
282
+ gen_event.then(lambda: gr.update(visible=False), None, [stop_generate_btn], queue=False)
283
+
284
 
285
  def create_image_presets(img_model_name, img_provider):
286
  """Create quick model presets for image generation."""