File size: 3,564 Bytes
809a13a
 
 
aacf3f8
809a13a
 
aacf3f8
 
809a13a
 
 
b4792a9
 
809a13a
 
 
 
 
 
 
 
 
 
 
 
 
b4792a9
809a13a
 
 
aacf3f8
8a1cfea
 
aacf3f8
 
 
8790e06
 
aacf3f8
 
e7a8d70
aacf3f8
 
 
 
 
8790e06
 
aacf3f8
e7a8d70
aacf3f8
 
 
 
 
 
 
8790e06
60031f6
809a13a
aacf3f8
 
 
 
 
5219cd3
 
 
 
 
 
 
 
 
 
 
d9825df
5219cd3
 
aacf3f8
 
 
 
 
 
5219cd3
aacf3f8
 
 
5219cd3
 
 
 
 
 
aacf3f8
 
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
import gradio as gr
from huggingface_hub import InferenceClient

# Create an InferenceClient to interact with the model
client = InferenceClient("meta-llama/Llama-3.2-3B-Instruct")

# Define the function to generate a response
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

# Custom CSS for styling
css = """
body {
    font-family: 'Arial', sans-serif;
    background-color: #f8f9fa; /* Light background */
    color: #333;
}
.gr-button {
    background-color: #0b2545 !important;
    color: white !important;
    border: none !important;
    border-radius: 25px !important;
    padding: 8px 20px !important;
    font-size: 14px;
    font-weight: bold;
    cursor: pointer;
}
.gr-button:hover {
    background-color: #0a1b35 !important;
}
.search-box {
    border-radius: 20px;
    border: 1px solid #ccc;
    padding: 10px;
    width: 100%;
    font-size: 16px;
    background-color: #ffffff;
}
"""

# Main function to create the interface
with gr.Blocks(css=css) as demo:
    gr.Markdown("<h1 style='text-align: center;'>Health Assistant GPT</h1>")
    gr.Markdown("<h3 style='text-align: center;'>What do you want to know about health and wellness?</h3>")

    # Sidebar
    with gr.Sidebar():
        gr.Markdown("### Settings")
        system_message = 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.",
            label="System message",
            visible=False
        )
        max_tokens = gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens", visible=False)
        temperature = gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature", visible=False)
        top_p = gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)", visible=False)

    # Main content
    with gr.Row():
        with gr.Column(scale=7):
            gr.Markdown("### Ask a health-related question:")
            search_input = gr.Textbox(label="Search Input", placeholder="Type your health-related question here...", lines=1)
            submit_button = gr.Button("Generate Response")
            output = gr.Markdown()

        with gr.Column(scale=3):
            gr.Markdown("### Upload a relevant file (Optional):")
            uploaded_file = gr.File(label="Upload PDF")

    # Button click action to trigger response generation
    submit_button.click(
        fn=respond,
        inputs=[search_input, [], system_message, max_tokens, temperature, top_p],  # Empty history for fresh chat
        outputs=output
    )

demo.launch()