import gradio as gr
import groovy as gv
from flow import flow

with gr.Blocks() as app:
    task_box = gr.Textbox(label="🕺 Task", value="flow.task", info="Run this workflow locally by installing the [Groovy Python package](https://github.com/abidlabs/groovy) and then running `groovy run https://huggingface.co/space/url>`.")
    with gr.Row():
        if flow.inputs:
            with gr.Column(scale=1):
                for component in flow.inputs:
                    component.render()
        with gr.Column(scale=2):
            gr.Image(label="Recording", value=".groovy/recording.gif")
            config = gr.JSON(visible=False)

    @gr.on(
        triggers=[app.load] + [input.change for input in flow.inputs],
        inputs=flow.inputs,
        outputs=[task_box],
        trigger_mode="always_last",
        show_api=False
    )
    def construct_prompt(*input_values):
        return flow.task.format(*input_values)

    app.load(flow.to_json, None, config, api_name="flow_config")


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