import gradio as gr from huggingface_hub import InferenceClient # CSS to hide footer and customize button css = """ footer {display:none !important} .output-markdown{display:none !important} .gr-button-primary { z-index: 14; height: 43px; width: 130px; left: 0px; top: 0px; padding: 0px; cursor: pointer !important; background: none rgb(17, 20, 45) !important; border: none !important; text-align: center !important; font-family: Poppins !important; font-size: 14px !important; font-weight: 500 !important; color: rgb(255, 255, 255) !important; line-height: 1 !important; border-radius: 12px !important; transition: box-shadow 200ms ease 0s, background 200ms ease 0s !important; box-shadow: none !important; } .gr-button-primary:hover { z-index: 14; height: 43px; width: 130px; left: 0px; top: 0px; padding: 0px; cursor: pointer !important; background: none rgb(66, 133, 244) !important; border: none !important; text-align: center !important; font-family: Poppins !important; font-size: 14px !important; font-weight: 500 !important; color: rgb(255, 255, 255) !important; line-height: 1 !important; border-radius: 12px !important; transition: box-shadow 200ms ease 0s, background 200ms ease 0s !important; box-shadow: rgb(0 0 0 / 23%) 0px 1px 7px 0px !important; } .hover\:bg-orange-50:hover { --tw-bg-opacity: 1 !important; background-color: rgb(229,225,255) !important; } .to-orange-200 { --tw-gradient-to: rgb(37 56 133 / 37%) !important; } .from-orange-400 { --tw-gradient-from: rgb(17, 20, 45) !important; --tw-gradient-to: rgb(255 150 51 / 0); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; } .group-hover\:from-orange-500 { --tw-gradient-from:rgb(17, 20, 45) !important; --tw-gradient-to: rgb(37 56 133 / 37%); --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; } .group:hover .group-hover\:text-orange-500 { --tw-text-opacity: 1 !important; color:rgb(37 56 133 / var(--tw-text-opacity)) !important; } """ # Initialize the InferenceClient for chatbot client = InferenceClient("HuggingFaceH4/zephyr-7b-alpha") # Define the function for chatbot response def respond( message, history, system_message, max_tokens, temperature, top_p, ): messages = [{"role": "system", "content": system_message}] for val in history: if val[0]: messages.append({"role": "user", "content": val[0]}) if val[1]: messages.append({"role": "assistant", "content": val[1]}) messages.append({"role": "user", "content": message}) response = "" for message in client.chat_completion( messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = message.choices[0].delta.content response += token yield response def send_message(message, history, system_message, max_tokens, temperature, top_p): if message: history.append((message, "")) response = respond( message=message, history=history, system_message=system_message, max_tokens=max_tokens, temperature=temperature, top_p=top_p, ) response_text = "" for r in response: response_text = r history[-1] = (message, response_text) return history, gr.update(value="") # Description for the chatbot description = """ Hello! I'm here to support you emotionally and answer any questions. How are you feeling today?
Developed by Hashir Ehtisham
""" # Motivational tagline for the new tab motivational_tagline = """ Welcome to the Motivational Quotes tab! Let’s ignite your day with some inspiration. What do you need motivation for today?
Developed by Hashir Ehtisham
""" # Emotions Detector tagline for the new tab emotions_detector_tagline = """ Know how your message sounds and how to improve the tone of the message with Emotions Detector.
Developed by Hashir Ehtisham
""" # Jokes tagline for the new tab jokes_tagline = """ Ready for a good laugh? Ask me for a joke to lighten up your mood!
Developed by Hashir Ehtisham
""" # Define the Gradio Blocks interface with gr.Blocks(css=css) as demo: with gr.Tab("Emotional Support Chatbot"): gr.Markdown("# Emotional Support Chatbot") gr.Markdown(description) system_message = gr.Textbox(value="You are a friendly Emotional Support Chatbot.", visible=False) chatbot = gr.Chatbot() msg = gr.Textbox(label="Your message") clear = gr.Button("Clear") with gr.Accordion("Additional Inputs", open=False): max_tokens = gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens") temperature = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature") top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)") def respond_wrapper(message, chat_history, system_message_val, max_tokens_val, temperature_val, top_p_val): chat_history, _ = send_message( message=message, history=chat_history, system_message=system_message_val, max_tokens=max_tokens_val, temperature=temperature_val, top_p=top_p_val, ) return gr.update(value=""), chat_history msg.submit(respond_wrapper, [msg, chatbot, system_message, max_tokens, temperature, top_p], [msg, chatbot]) clear.click(lambda: None, None, chatbot, queue=False) with gr.Tab("Motivational Quotes"): gr.Markdown("# Motivational Quotes") gr.Markdown(motivational_tagline) system_message_motivational = gr.Textbox(value="You are a friendly Motivational Quotes Chatbot.", visible=False) chatbot_motivational = gr.Chatbot() msg_motivational = gr.Textbox(label="Your message") clear_motivational = gr.Button("Clear") with gr.Accordion("Additional Inputs", open=False): max_tokens_motivational = gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens") temperature_motivational = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature") top_p_motivational = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)") def respond_wrapper_motivational(message, chat_history, system_message_val, max_tokens_val, temperature_val, top_p_val): chat_history, _ = send_message( message=message, history=chat_history, system_message=system_message_val, max_tokens=max_tokens_val, temperature=temperature_val, top_p=top_p_val, ) return gr.update(value=""), chat_history msg_motivational.submit(respond_wrapper_motivational, [msg_motivational, chatbot_motivational, system_message_motivational, max_tokens_motivational, temperature_motivational, top_p_motivational], [msg_motivational, chatbot_motivational]) clear_motivational.click(lambda: None, None, chatbot_motivational, queue=False) with gr.Tab("Emotions Detector"): gr.Markdown("# Emotions Detector") gr.Markdown(emotions_detector_tagline) system_message_emotions = gr.Textbox(value="You are an Emotions Detector Chatbot. Analyze the tone of the message (happy, sad, angry, neutral) and answer back.", visible=False) chatbot_emotions = gr.Chatbot() msg_emotions = gr.Textbox(label="Your message") clear_emotions = gr.Button("Clear") with gr.Accordion("Additional Inputs", open=False): max_tokens_emotions = gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens") temperature_emotions = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature") top_p_emotions = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)") def respond_wrapper_emotions(message, chat_history, system_message_val, max_tokens_val, temperature_val, top_p_val): chat_history, _ = send_message( message=message, history=chat_history, system_message=system_message_val, max_tokens=max_tokens_val, temperature=temperature_val, top_p=top_p_val, ) return gr.update(value=""), chat_history msg_emotions.submit(respond_wrapper_emotions, [msg_emotions, chatbot_emotions, system_message_emotions, max_tokens_emotions, temperature_emotions, top_p_emotions], [msg_emotions, chatbot_emotions]) clear_emotions.click(lambda: None, None, chatbot_emotions, queue=False) with gr.Tab("Jokes for You"): gr.Markdown("# Jokes for You") gr.Markdown(jokes_tagline) system_message_jokes = gr.Textbox(value="You are a friendly Jokes Chatbot. Provide a joke when asked.", visible=False) chatbot_jokes = gr.Chatbot() msg_jokes = gr.Textbox(label="Your message") clear_jokes = gr.Button("Clear") with gr.Accordion("Examples", open=False): gr.Examples( examples=[ ["Tell me a joke"], ["Make me laugh"], ["Say something funny"], ], inputs=msg_jokes, ) with gr.Accordion("Additional Inputs", open=False): max_tokens_jokes = gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens") temperature_jokes = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature") top_p_jokes = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)") def respond_wrapper_jokes(message, chat_history, system_message_val, max_tokens_val, temperature_val, top_p_val): chat_history, _ = send_message( message=message, history=chat_history, system_message=system_message_val, max_tokens=max_tokens_val, temperature=temperature_val, top_p=top_p_val, ) return gr.update(value=""), chat_history msg_jokes.submit(respond_wrapper_jokes, [msg_jokes, chatbot_jokes, system_message_jokes, max_tokens_jokes, temperature_jokes, top_p_jokes], [msg_jokes, chatbot_jokes]) clear_jokes.click(lambda: None, None, chatbot_jokes, queue=False) # Launch the Gradio interface demo.launch()