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()