# import gradio as gr # import requests # theme=gr.themes.Default(primary_hue="cyan", secondary_hue="violet") # with gr.Blocks(theme=theme) as demo: # chatbot = gr.Chatbot() # msg = gr.Textbox(placeholder="Say Hi! to wake me up", show_label=False) # clear = gr.ClearButton([msg, chatbot]) # def interact_with_rasa(user_input, chat_history): # rasa_url = "https://clairify.ai/webhooks/rest/webhook" # payload = {"sender": "user", "message": user_input} # response = requests.post(rasa_url, json=payload) # if response.status_code == 200: # rasa_response = response.json() # if rasa_response and len(rasa_response) > 0: # bot_responses = [msg.get("text", "") for msg in rasa_response] # chat_history.append((user_input, bot_responses[0])) # for response in bot_responses[1:]: # chat_history.append((None, response)) # else: # bot_responses = ["Error: Empty response from Rasa server."] # else: # bot_responses = ["Error: Unable to connect to Rasa server."] # return "", chat_history # msg.submit(interact_with_rasa, [msg, chatbot], [msg, chatbot]) # if __name__ == "__main__": # demo.launch() # import gradio as gr # import asyncio # from rasa_socketio_client import RasaSocketIOClient # import logging # from custom_logging import IMPORTANT_LEVEL_NUM # # Enable logging for the whole app # logging.basicConfig(level=IMPORTANT_LEVEL_NUM) # logger = logging.getLogger(__name__) # rasa_io_url = "https://clairify.ai/socket.io" # rasa_client = RasaSocketIOClient(rasa_io_url) # theme = gr.themes.Default(primary_hue="cyan", secondary_hue="violet") # async def interact_with_rasa(user_input, chat_history): # if not rasa_client.sio.connected: # await rasa_client.connect() # payload = {"message": user_input} # rasa_response = await rasa_client.send_message(payload) # # if rasa_response: # # bot_utterances = [] # # for key, value in rasa_response.items(): # # bot_utterance = value.get("text", "") # Accessing the "text" key of each value # # bot_utterances.append(bot_utterance) # # if bot_utterances: # # chat_history.append((user_input, bot_utterances[0])) # # for utterance in bot_utterances[1:]: # # chat_history.append((None, utterance)) # # else: # # chat_history.append((user_input, "Error: Empty response from Rasa server.")) # chat_history.append((user_input, rasa_response["text"])) # return "", chat_history # with gr.Blocks(theme=theme) as demo: # chatbot = gr.Chatbot() # msg = gr.Textbox(placeholder="Say Hi! to wake me up", show_label=False) # clear = gr.ClearButton([msg, chatbot]) # msg.submit(interact_with_rasa, inputs=[msg, chatbot], outputs=[msg, chatbot]) # if __name__ == "__main__": # asyncio.run(demo.launch()) import gradio as gr import asyncio from rasa_socketio_client import RasaSocketIOClient from custom_logging import get_logger logger = get_logger(__name__) rasa_io_url = "https://clairify.ai/socket.io" theme = gr.themes.Default(primary_hue="cyan", secondary_hue="violet") with gr.Blocks(theme=theme) as demo: rasa_client = RasaSocketIOClient(rasa_io_url) async def interact_with_rasa(user_input, chat_history): logger.important(f"User input received: {user_input}") if not rasa_client.sio.connected: logger.important("Rasa client not connected, attempting to connect...") await rasa_client.connect() logger.important(f"Sending payload to Rasa: {user_input}") message_count = 0 async for message in rasa_client.send_message(user_input): logger.important(f"Processing messages: {message}") if message_count == 0: message_count+=1 new_entry = (user_input, message.get('text', '')) else: new_entry = (None, message.get('text', '')) chat_history.append(new_entry) yield "", chat_history async def handle_clear_button(): await rasa_client.disconnect() return "", None async def handle_submit_button(): await rasa_client.disconnect() return "", None chatbot = gr.Chatbot(label="Conversation") msg = gr.Textbox(placeholder="Say Hi! to wake me up", show_label=False) clear = gr.Button("Clear") # submit_button = gr.Button("Submit") # submit_button=gr.Button(interact_with_rasa, inputs=[msg, chatbot], outputs=[msg, chatbot],value="Submit") clear.click(handle_clear_button, inputs=[], outputs=[msg, chatbot]) msg.submit(interact_with_rasa, inputs=[msg, chatbot], outputs=[msg, chatbot]) if __name__ == "__main__": logger.important("Launching Gradio demo...") asyncio.run(demo.launch())