Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -300,5 +300,36 @@ with gr.Blocks(css=css, analytics_enabled=False) as demo:
|
|
300 |
caption_cache = gr.State(value={"image_path": None, "caption": None})
|
301 |
|
302 |
# обработчик клика по галерее: сразу подставляет картинку, генерирует подпись и обновляет кеш
|
303 |
-
def on_gallery_select(elem,
|
304 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
300 |
caption_cache = gr.State(value={"image_path": None, "caption": None})
|
301 |
|
302 |
# обработчик клика по галерее: сразу подставляет картинку, генерирует подпись и обновляет кеш
|
303 |
+
def on_gallery_select(elem, cache):
|
304 |
+
# elem может быть строкой (URL) или список/tuple в некоторых версиях
|
305 |
+
img = None
|
306 |
+
if isinstance(elem, (list, tuple)):
|
307 |
+
img = elem[0] if elem else None
|
308 |
+
else:
|
309 |
+
img = elem
|
310 |
+
caption, new_cache = generate_and_cache_caption(img, cache)
|
311 |
+
# возвращаем (image_input value, raw_caption, new_cache)
|
312 |
+
return img, caption, new_cache
|
313 |
+
|
314 |
+
gallery.select(on_gallery_select, inputs=[gallery, caption_cache], outputs=[image_input, raw_caption, caption_cache])
|
315 |
+
|
316 |
+
# обработчик изменения image_input (загрузка своей картинки)
|
317 |
+
def on_image_change(image, cache):
|
318 |
+
caption, new_cache = generate_and_cache_caption(image, cache)
|
319 |
+
return caption, new_cache
|
320 |
+
|
321 |
+
image_input.change(on_image_change, inputs=[image_input, caption_cache], outputs=[raw_caption, caption_cache])
|
322 |
+
|
323 |
+
# отправка (кнопка или Enter) — стриминг LLM, outputs: (chatbot, raw_caption)
|
324 |
+
send_btn.click(chat_stream, inputs=[image_input, user_input, chatbot, caption_cache], outputs=[chatbot, raw_caption])
|
325 |
+
user_input.submit(chat_stream, inputs=[image_input, user_input, chatbot, caption_cache], outputs=[chatbot, raw_caption])
|
326 |
+
|
327 |
+
# очистка: сбрасываем чат и кеш
|
328 |
+
def clear_all():
|
329 |
+
return [], {"image_path": None, "caption": None}, ""
|
330 |
+
|
331 |
+
clear_btn.click(clear_all, inputs=None, outputs=[chatbot, caption_cache, raw_caption])
|
332 |
+
|
333 |
+
# Запуск (в HF Spaces не указывать share=True)
|
334 |
+
if __name__ == "__main__":
|
335 |
+
demo.launch(server_name="0.0.0.0", server_port=int(os.environ.get("PORT", 7860)))
|