import gradio as gr from dotenv import load_dotenv load_dotenv() from utils_app import ( _new_chat, _score_chosen, _clear_comments, _comment_submitted, _load_interface, _session_id_selected, ) from main_function import _run_graph with gr.Blocks( title="Test Interface", theme='JohnSmith9982/small_and_pretty', ) as demo: user_id = gr.Textbox( visible = False, ) with gr.Row(): session_id = gr.Dropdown( choices = [], value = None, label = "Chats", info = "Scegliere la chat", interactive = True, visible = True, allow_custom_value = False, ) with gr.Row(): new_chat = gr.ClearButton( value="Nuova Chat", variant="primary", ) with gr.Row(): chatbot = gr.Chatbot( show_copy_button=True ) with gr.Row(): with gr.Column(): score = gr.Radio( choices = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"], show_label = True, label = "Voto", visible = True, ) with gr.Column(visible=False) as comment_column: comment = gr.Textbox( label="Commento", info="Spiega il voto che hai dato", interactive=True, ) submit_comment = gr.Button( value="Invia commento", variant="primary", ) close_btn = gr.Button( value="Chiudi", variant="secondary", ) with gr.Row(): input = gr.Textbox( label = "Messaggio", placeholder=None, interactive = True, ) with gr.Row(): logout_button = gr.Button( "Logout", link="/logout" ) input.submit( _clear_comments, outputs = [comment_column, comment], ).then( lambda: ( gr.Textbox( interactive=False, placeholder="Dai un voto alla risposta precedente prima di continuare la conversazione o iniziarne una nuova"), gr.Radio(visible=False), gr.Button(interactive=False) ), outputs = [input, score, new_chat], ).then( lambda x,y : y + [(x, None)], inputs = [input, chatbot], outputs = chatbot ).then( fn = _run_graph, inputs = [session_id, input], outputs = [chatbot], scroll_to_output = True, ).then( lambda: (None, gr.Radio(visible=True, value=None)), outputs = [input, score], ) score.change( _score_chosen, inputs = [session_id, score], outputs = [comment_column, input, new_chat] ) submit_comment.click( _comment_submitted, inputs = [session_id, comment], outputs = None ).then( _clear_comments, inputs = None, outputs = [comment_column, comment], ).then( lambda: (gr.Textbox(interactive=True, placeholder=None), gr.Button(interactive=True), gr.Radio(visible = False)), outputs = [input, new_chat, score], ) new_chat.click( _new_chat, inputs = [user_id], outputs = [chatbot, input, comment_column, comment, score, session_id], ) session_id.change( _session_id_selected, inputs = [session_id], outputs = [chatbot, input, comment_column, comment, score], ) close_btn.click( _clear_comments, inputs = None, outputs = [comment_column, comment, score, input, new_chat], ) demo.load( _load_interface, None, [user_id, session_id] ) if __name__ == "__main__": from utils_app import _get_users demo.queue(default_concurrency_limit=20) demo.launch( inbrowser = True, show_error = True, auth=[(usr["name"], usr["password"]) for usr in _get_users()], share=True, )