Spaces:
Sleeping
Sleeping
| import os | |
| import time | |
| from uuid import uuid4 | |
| import gradio as gr | |
| from langchain.chat_models import ChatOpenAI | |
| from langchain.schema import AIMessage, HumanMessage | |
| from utils import prompts | |
| from utils import functional as F | |
| # Define all functions | |
| def start_chatbot(input_username, input_password, input_questions, id_interview): | |
| if input_username == "" or input_password == "" or input_questions == "": | |
| return ( | |
| (gr.update(),) * 2 | |
| + (gr.update(value="Invalid username. Please try again."),) | |
| + (gr.update(value="Invalid password. Please try again."),) | |
| + (gr.update(value="Invalid questions. Please try again."),) | |
| + (gr.update(),) * 5 | |
| ) | |
| print(os.environ) | |
| if ( | |
| f"AIRIS_DEMO_ACCOUNT_{input_username}" not in os.environ | |
| or os.environ[f"AIRIS_DEMO_ACCOUNT_{input_username}"] != input_password | |
| ): | |
| return ( | |
| (gr.update(),) * 2 | |
| + (gr.update(value="Invalid username. Please try again."),) | |
| + (gr.update(value="Invalid password. Please try again."),) | |
| + (gr.update(),) * 6 | |
| ) | |
| chat_openai = ChatOpenAI( | |
| model_name="gpt-3.5-turbo", | |
| temperature=0.3, | |
| ) | |
| return ( | |
| input_questions, | |
| chat_openai, | |
| gr.update(visible=False), | |
| gr.update(visible=False), | |
| gr.update(visible=False), | |
| gr.update(visible=False), | |
| gr.update( | |
| visible=True, | |
| value=[ | |
| [None, F.get_first_message(chat_openai, input_questions, id_interview)], | |
| ], | |
| ), | |
| gr.update(visible=True), | |
| gr.update(visible=True), | |
| gr.update(visible=True), | |
| ) | |
| def bot(chat_openai, questions, id_interview, history): | |
| history_messages = F.get_initial_messages(questions, id_interview) | |
| for message in history: | |
| if message[0] is not None: | |
| history_messages.append( | |
| HumanMessage(content=F.remove_html_tags(message[0]).strip()) | |
| ) | |
| if message[1] is not None: | |
| history_messages.append( | |
| AIMessage(content=F.remove_html_tags(message[1]).strip()) | |
| ) | |
| if prompts.END_CHATBOT_PROMPTS in F.remove_html_tags( | |
| history[-2][1] | |
| ) or prompts.END_QUESTION_PROMPTS in F.remove_html_tags(history[-2][1]): | |
| bot_message = prompts.END_CHATBOT_PROMPTS | |
| elif not history[-1][0]: | |
| bot_message = prompts.EMPTY_INPUT_MESSAGE | |
| else: | |
| bot_message = F.get_bot_message(chat_openai, history_messages) | |
| if not bot_message == prompts.END_CHATBOT_PROMPTS: | |
| check_if_end_of_message = id_interview in bot_message | |
| if check_if_end_of_message: | |
| bot_message = bot_message.replace(f'ID Interview: "{id_interview}"', "") | |
| bot_message = ( | |
| "\n".join(bot_message.split("\n")[:-1]) | |
| + "\n" | |
| + prompts.END_QUESTION_PROMPTS | |
| ) | |
| history[-1][1] = "" | |
| for character in bot_message: | |
| history[-1][1] += character | |
| time.sleep(0.005) | |
| yield history | |
| with gr.Blocks(title="AIRIS (AI Regenerative Interview Survey)") as demo: | |
| # Define all states | |
| questions = gr.State(value=None) | |
| chat_openai = gr.State(value=None) | |
| id_interview = gr.State(value=str(uuid4().hex)) | |
| # Define all components | |
| gr.Markdown( | |
| """ | |
| # AIRIS (AI Regenerative Interview Survey) | |
| AIRIS (AI Regenerative Interview Survey) is an advanced application that utilizes artificial intelligence to streamline interviews and surveys. It generates intelligent questions, analyzes real-time responses, and continuously improves based on past interviews. With data analysis tools, it provides valuable insights, making interviews more efficient and insightful. | |
| """ # noqa: E501 | |
| ) | |
| input_username = gr.Textbox( | |
| label="Username", | |
| placeholder="Input your Username here...", | |
| ).style(container=True) | |
| input_password = gr.Textbox( | |
| label="Password", | |
| placeholder="Input your Password here...", | |
| type="password", | |
| ).style(container=True) | |
| input_questions = gr.TextArea( | |
| label="Questions", placeholder="Input your questions here.." | |
| ).style(container=True) | |
| input_submit = gr.Button("Submit") | |
| chatbot_display = gr.Chatbot(label="History Messages", visible=False).style( | |
| height=600 | |
| ) | |
| message_input = gr.TextArea( | |
| label="Your Message", | |
| placeholder="Type your message here...", | |
| lines=2, | |
| visible=False, | |
| ).style(container=True) | |
| send_message = gr.Button("Send", visible=False) | |
| reset_message = gr.Button("Reset Chat", visible=False).style( | |
| full_width=False, size="sm" | |
| ) | |
| # Define all 'components' interactions | |
| send_message.click( | |
| fn=lambda user_message, history: ("", history + [[user_message, None]]), | |
| inputs=[message_input, chatbot_display], | |
| outputs=[message_input, chatbot_display], | |
| ).then( | |
| fn=bot, | |
| inputs=[chat_openai, questions, id_interview, chatbot_display], | |
| outputs=chatbot_display, | |
| ) | |
| reset_message.click( | |
| fn=lambda chat_openai, questions, id_interview: gr.update( | |
| value=[ | |
| [None, F.get_first_message(chat_openai, questions, id_interview)], | |
| ] | |
| ), | |
| inputs=[chat_openai, questions], | |
| outputs=chatbot_display, | |
| ) | |
| input_submit.click( | |
| fn=start_chatbot, | |
| inputs=[input_username, input_password, input_questions, id_interview], | |
| outputs=[ | |
| questions, | |
| chat_openai, | |
| input_username, | |
| input_password, | |
| input_questions, | |
| input_submit, | |
| chatbot_display, | |
| message_input, | |
| send_message, | |
| reset_message, | |
| ], | |
| ) | |
| demo.queue().launch() | |