File size: 3,852 Bytes
c19f8f1 c33c7d4 996e769 c33c7d4 c19f8f1 c33c7d4 3143fb7 c33c7d4 82a4d03 6bd2ddf 82a4d03 6bd2ddf 82a4d03 6bd2ddf 82a4d03 6bd2ddf 82a4d03 c33c7d4 3143fb7 c33c7d4 296b0b0 c33c7d4 45fe27d 26c5906 c33c7d4 9bcab22 c19f8f1 c33c7d4 ec97f37 c33c7d4 ec97f37 43f47fe c33c7d4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# 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()
|