Clicking on an example so that it directly displays the expected output without requiring the user to press Enter?

Clicking on an example so that it directly displays the expected output without requiring the user to press Enter?

I have a simple Gradio interface for machine translation:

enter image description here

How can I change it so that clicking on an example (e.g., 'Avion blanc') directly displays the translation without requiring the user to press Enter?

Code:

import gradio as gr
import time
def translate_sentence(src_text):
    start_time = time.time()
    translation = "hello" # I removed the translation model
    duration = (time.time() - start_time)*1000
    return translation, f"{duration:.0f} ms"

with gr.Blocks(title="French to English Translation", css="footer{display:none !important}") as demo:
    input_box = gr.Textbox(lines=1, label="Input (French)")
    output_box = gr.Textbox(lines=1, label="Translation (English)")
    time_box = gr.Text(label="Time Taken")
    translate_btn = gr.Button("Translate")
    gr.Examples(
        examples=[
            ["Avion blanc"],
            ["Chat sur un arbre"],
            ["Un oiseau sur l'eau"]
        ],
        inputs=input_box,
        outputs=[output_box, time_box],
        fn=translate_sentence
    )
    translate_btn.click(translate_sentence, inputs=input_box, outputs=[output_box, time_box])
    input_box.submit(translate_sentence, inputs=input_box, outputs=[output_box, time_box])

if __name__ == "__main__":
    demo.launch()

Answer

One can add this listener:

input_box.change(  
        translate_sentence,  
        inputs=input_box,  
        outputs=[output_box, time_box],  
        queue=False  
    )  

so that any input box change causes the translation to be run.

Full code:

import gradio as gr
import time
def translate_sentence(src_text):
    start_time = time.time()
    translation = "hello" # I removed the translation model
    duration = (time.time() - start_time)*1000
    return translation, f"{duration:.0f} ms"

with gr.Blocks(title="French to English Translation", css="footer{display:none !important}") as demo:
    input_box = gr.Textbox(lines=1, label="Input (French)")
    output_box = gr.Textbox(lines=1, label="Translation (English)")
    time_box = gr.Text(label="Time Taken")
    translate_btn = gr.Button("Translate")
    gr.Examples(
        examples=[
            ["Avion blanc"],
            ["Chat sur un arbre"],
            ["Un oiseau sur l'eau"]
        ],
        inputs=input_box,
        outputs=[output_box, time_box],
        fn=translate_sentence
    )

    input_box.change(
        translate_sentence,
        inputs=input_box,
        outputs=[output_box, time_box],
        queue=False
    )

    translate_btn.click(translate_sentence, inputs=input_box, outputs=[output_box, time_box])
    input_box.submit(translate_sentence, inputs=input_box, outputs=[output_box, time_box])

if __name__ == "__main__":
    demo.launch()

Enjoyed this question?

Check out more content on our blog or follow us on social media.

Browse more questions