Spaces:
Running
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)
- ui_components.py +41 -8
|
@@ -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=
|
| 88 |
inputs=None,
|
| 89 |
-
outputs=
|
| 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=
|
| 246 |
inputs=None,
|
| 247 |
-
outputs=
|
| 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."""
|