ButtonBot / run.py
AFischer1985's picture
Create run.py
26bc02a
raw
history blame
2.88 kB
import gradio as gr
elemIDs=list(range(5)) # elemIDs 0-4
internal_state=0
def toggler(visibility=[]):
if(len(visibility)==0):
print("restore visibility to "+str(list(range(1,len(elemIDs)))))
visibility=list(range(len(elemIDs))) # visibility of all buttons by default (i.e., without textbox)
#visibility=[str(e) for e in visibility]
l=[]
l.append(gr.Textbox("Visible Text", visible=(0 in visibility)))
l.append(gr.Button("Submit", visible=(1 in visibility)))
l.append(gr.Button("Button 2", visible=(2 in visibility)))
l.append(gr.Button("Button 3", visible=(3 in visibility)))
l.append(gr.Button("Button 4", visible=(4 in visibility)))
print("Toggler:\n\nelemIDs="+str(elemIDs)+"\n\nVisibility="+str(visibility)+"\n\nl="+str(l)) #+"\n\ntest4="+str(4 in visibility))
return l
def listener(btn):
r=0
if(btn=="Submit"): r=1
if(btn=="Button 2"): r=2
if(btn=="Button 3"): r=3
if(btn=="Button 4"): r=4
print("Listener:\n\nbtn="+str(btn)+"\n\nr="+str(r))
return gr.Radio([str(e) for e in elemIDs],label="Button clicked",value=str(r))
def respond(message, chat_history, visible_elemIDs):
global internal_state
previous_state = internal_state
internal_state = message
visible_elemIDs= [e for e in visible_elemIDs if str(e) != str(internal_state)] # streiche button zum aktuellen state
bot_message = f"I was in state \"{previous_state}\" and am now in state \"{internal_state}\". please click another button."
chat_history.append((message, bot_message))
print("respond:\n\nvisible_elemIDs="+str(visible_elemIDs)+"\n\nbot_message="+str(bot_message))
return message, chat_history, visible_elemIDs
with gr.Blocks() as demo:
chatbot = gr.Chatbot(value=[[None, f"I'm in state \"{internal_state}\". Please click a button!"]])
msg,btn1,btn2,btn3,btn4 = toggler()
changeableElems=[msg,btn1,btn2,btn3,btn4]
visibility=gr.Dropdown(
elemIDs,
value=[1,2,3,4], #list(range(len(elemIDs))),
multiselect=True,
visible=True, #False,
label="Active Elements") # determine which elements are visible #,visible=False
clicked=gr.Radio([str(e) for e in elemIDs],label="Button clicked",value=0) # determine which Element/Button was clicked last
visibility.change(toggler, inputs=visibility, outputs=changeableElems) # change elemIDs when visibility is changed
chatbot.change(toggler, inputs=visibility, outputs=changeableElems) # change elemIDs when chatbot responds
clicked.change(respond,inputs=[clicked,chatbot,visibility], outputs=[clicked,chatbot,visibility])
btn1.click(listener, inputs=btn1, outputs=clicked)
btn2.click(listener, inputs=btn2, outputs=clicked)
btn3.click(listener, inputs=btn3, outputs=clicked)
btn4.click(listener, inputs=btn4, outputs=clicked)
with gr.Row():
chatbot
gr.Column([btn1,btn2,btn3,btn4])
demo.launch()