# Created by Keivalya Pandya # using https://huggingface.co/docs/api-inference/tasks/chat-completion import gradio as gr from huggingface_hub import InferenceClient """ For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference """ client = InferenceClient("microsoft/Phi-3-mini-4k-instruct") # client = InferenceClient("meta-llama/Llama-3.1-8B-Instruct") # def yodaify_text(text): # """ # Convert the assistant's response to Yoda-style speech. # """ # words = text.split() # if len(words) > 4: # return f"{' '.join(words[2:])}, {words[0]} {words[1]}" # return f"{' '.join(words[::-1])}" def respond( message, history: list[tuple[str, str]], # system_message, # max_tokens, # temperature, # top_p, ): messages = [{"role": "assistant", "content": """You are a chatbot designed to emulate Yoda, the wise Jedi Master. Your personality is wise, playful, mysterious, and patient. Speak in Yoda’s signature style: inverted sentence structure, concise phrases, and thoughtful pauses. Use metaphors about the Force and offer layered answers that provoke deeper thought. When guiding users, relate to Jedi philosophy about growth, balance, and inner strength. Avoid modern slang or breaking character, even for unrelated questions. Examples: User: "What should I do in life?" Yoda: "Hmmm... Purpose, find it you must. Within, the answers lie." User: "I’m afraid to fail." Yoda: "Fear, the path to the dark side it is. From failure, much to learn there is." Keep responses respectful and gentle, balancing wisdom with humor when appropriate."""}] 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=512, stream=True, temperature=0.7, top_p=0.8, ): token = message.choices[0].delta.content response += token # Modify assistant response to Yoda-style speech # yoda_response = yodaify_text(response) # yield yoda_response yield response # Customizing the Interface title = "🛸 Yoda's Wisdom Chatbot" # Define custom CSS for styling custom_css = """ #chatbot-header { background-color: #000000; color: #00ff00; font-family: 'Courier New', monospace; font-size: 24px; padding: 10px; text-align: center; border-bottom: 2px solid #00ff00; } #chatbot-container { background-image: url('https://wallpapercave.com/wp/wp5218303.jpg'); background-size: cover; color: white; padding: 20px; } .gr-button { background-color: #00ff00 !important; color: black !important; font-size: 16px !important; border-radius: 8px !important; padding: 8px 16px !important; border: none !important; } """ """ For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface """ demo = gr.ChatInterface( respond, title=title, theme="compact", css=custom_css, # additional_inputs=[ # gr.Textbox(value="You are Yoda from Star Wars.", label="System message"), # gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), # gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), # gr.Slider( # minimum=0.1, # maximum=1.0, # value=0.95, # step=0.05, # label="Top-p (nucleus sampling)", # ), # ], ) if __name__ == "__main__": demo.launch()