File size: 3,231 Bytes
809a13a
 
 
b4792a9
 
 
809a13a
 
 
 
 
 
 
 
 
 
 
 
 
 
b4792a9
 
809a13a
 
 
 
 
 
 
 
 
 
 
 
 
 
b4792a9
809a13a
 
 
 
b4792a9
 
8a1cfea
 
e7a8d70
 
8790e06
 
 
e7a8d70
 
 
 
 
8790e06
 
 
e7a8d70
 
 
 
 
8790e06
60031f6
809a13a
b4792a9
 
 
 
 
 
6a83ddf
 
 
 
 
 
b4792a9
 
 
 
 
 
 
 
 
 
 
 
 
60031f6
809a13a
b4792a9
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
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("meta-llama/Llama-3.2-3B-Instruct")


def respond(
    message,
    history: list[tuple[str, str]],
    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


# CSS for styling the interface
css = """
body {
    background-color: #06688E; /* Dark background */
    color: white; /* Text color for better visibility */
}

.gr-button {
    background-color: #42B3CE !important; /* White button color */
    color: black !important; /* Black text for contrast */
    border: none !important;
    padding: 8px 16px !important;
    border-radius: 5px !important;
}

.gr-button:hover {
    background-color: #e0e0e0 !important; /* Slightly lighter button on hover */
}

.gr-slider-container {
    color: white !important; /* Slider labels in white */
}
"""

"""
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface
"""
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="You are a virtual health assistant designed to provide accurate and reliable information related to health, wellness, and medical topics. Your primary goal is to assist users with their health-related queries, offer general guidance, and suggest when to consult a licensed medical professional.

If a user asks a question that is unrelated to health, wellness, or medical topics, respond politely but firmly with:
'I'm sorry, I can't help with that because I am a virtual health assistant designed to assist with health-related needs. Please let me know if you have any health-related questions.'

Never provide advice or information outside the health domain. Remain professional, empathetic, and clear in all responses. Always prioritize user safety and encourage professional medical consultation for critical or complex health concerns..", label="System message", visible=False),
        gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens", visible=False),
        gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature", visible=False),
        gr.Slider(
            minimum=0.1,
            maximum=1.0,
            value=0.95,
            step=0.05,
            label="Top-p (nucleus sampling)",visible=False
        ),
    ],
    css=css,  # Pass the custom CSS here
)


if __name__ == "__main__":
    demo.launch(share=True)