Spaces:
Build error
Build error
| import gradio as gr | |
| elemIDs=list(range(5)) # elemIDs 0-4 | |
| defaultElemIDs=list(range(0,len(elemIDs))) | |
| internal_state=0 | |
| def toggler(visibility=defaultElemIDs): | |
| l=[] | |
| l.append(gr.Textbox("Input 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(state, chat_history, visible_elemIDs): | |
| global internal_state | |
| previous_state = internal_state | |
| internal_state = state | |
| visible_elemIDs= [e for e in visible_elemIDs | |
| if ((str(e) != str(internal_state))|(str(e)=="1"))] # delete some buttons | |
| if(str(state) in [str(e) for e in visible_elemIDs]): # react to Buttons | |
| bot_message = f"I was in state \"{previous_state}\" and am now in state \"{internal_state}\". please click another button." | |
| chat_history.append((state, bot_message)) | |
| else: # react to Text-Input | |
| internal_state=0 | |
| bot_message = f"I was in state \"{previous_state}\" and am now in state \"{internal_state}\" and ready to process \"{state}\". please click another button." | |
| state="0" | |
| chat_history.append((state, bot_message)) | |
| if(len(visible_elemIDs)==0): # if visible_elemIDs has zero length, reset | |
| print("restore visibility to "+str(defaultElemIDs)) | |
| visible_elemIDs=defaultElemIDs | |
| print("respond:\n\nvisible_elemIDs="+str(visible_elemIDs)+"\n\nbot_message="+str(bot_message)) | |
| return state, 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=defaultElemIDs, #list(range(1,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(respond,inputs=[msg,chatbot,visibility], outputs=[msg,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() | |