Механизм обмена сообщениями/отзывами в приложениях Gradio

Я создаю приложение Gradio.

Обработка на стороне сервера может занять много времени, поэтому я хотел бы иметь возможность реализовать парадигму обмена сообщениями для обновления пользовательского интерфейса на основе статуса обработки.

Что-то вроде динамической установки значения компонента не работает (нет ошибки, просто нет обновления)

      from time import sleep

import gradio as gr
import numpy as np
from gradio.components import Button, Image, Markdown, Textbox


def transform(component):
    def _transform(text):
        for i in range(5):
            component.update(value=str(i))
            sleep(1)
        return np.random.randint(0, 230, (100, 100, 3))

    return _transform


with gr.Blocks() as app:
    inp = Textbox(label="Your message")
    out = Image(label="Your transformed message")
    feedback = Markdown(value="Initial")
    btn = Button("See for yourself!", label="Run")
    btn.click(transform(feedback), inputs=inp, outputs=out)
app.launch()

Здесь вы можете видеть, что «Initial» все еще там вместо «4».

1 ответ

Вы можете сделать это, преобразовав вашу функцию в генератор. В основном просто изменитеreturnключевое слово дляyield. Вам также потребуется включить.queue().

Этот код должен работать:

      import gradio as gr
from gradio.components import Markdown, Textbox, Button
from time import sleep


def transform(component):
    for i in range(5):
        yield str(i)
        sleep(3)
    yield f"text -- {i}"


with gr.Blocks() as app:
    inp = Textbox(label="Your message")
    out = Textbox(label="Your transformed message")
    feedback = Markdown("Initial")
    btn = Button("See for yourself!", label="Run")
    btn.click(transform, inputs=inp, outputs=out)

app.queue()
app.launch()
Другие вопросы по тегам