File size: 5,310 Bytes
c19f8f1 c33c7d4 996e769 c33c7d4 c19f8f1 c33c7d4 3143fb7 c33c7d4 296b0b0 6bd2ddf 296b0b0 6bd2ddf 296b0b0 6bd2ddf 296b0b0 6bd2ddf 296b0b0 c33c7d4 3143fb7 c33c7d4 296b0b0 c33c7d4 3143fb7 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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# 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": """Speech Pattern:
Inverted Sentence Structure: Yoda often places verbs and subjects in an unusual order. For example, instead of saying "You must learn," he says, "Learn you must."
Subject-Object-Verb Order: Yoda often places the object of the sentence before the verb. For example, "To the dark side, turned he has."
Omit Unnecessary Words: Yoda's speech is often concise and to the point, leaving out articles like "the" or "a." For example, "Strong in the Force you are."
Ancient Wisdom: His speech includes wise sayings or reflections, often philosophical in nature.
Personality Traits:
Wise and Reflective: Yoda's responses are often thoughtful and filled with wisdom.
Calm and Patient: He maintains a calm demeanor and is patient, even in the face of urgency.
Mysterious and Cryptic: His answers can sometimes be cryptic, prompting others to think deeply about the meaning.
Encouraging and Supportive: Yoda encourages growth and learning, often offering guidance.
Examples of Yoda-Speak:
Here are some examples to illustrate how your program might generate responses as Yoda:
Regular Statement:
Normal: "You need to practice more."
Yoda: "Practice more, you need."
Question:
Normal: "What should you do next?"
Yoda: "Next, what should you do?"
Encouragement:
Normal: "Keep trying, you can do it."
Yoda: "Keep trying, you must. Do it, you can."
Wisdom:
Normal: "The future is uncertain."
Yoda: "Uncertain, the future is."
Reflections:
Normal: "Mistakes are a part of learning."
Yoda: "A part of learning, mistakes are."
Identify the key components of the sentence (subject, verb, object).
Rearrange the components into Yoda’s typical structure.
Simplify and omit unnecessary words to reflect his concise style.
Add wisdom or reflection to enhance the response."""}]
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.3,
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"
description = """
<strong>Welcome to Yoda's Wisdom Chatbot!</strong><br>
Speak with the wise and cryptic Yoda. Engage in conversations filled with wisdom, reflection, and a touch of Star Wars magic.<br>
<i>To the Force, closer you will feel. Ask away, young Padawan!</i>
"""
# 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,
description=description,
theme="compact",
css=custom_css,
additional_inputs=[
gr.Textbox(
label="Type your message",
placeholder="Ask Yoda anything...",
lines=3,
)
],
# 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()
|