File size: 3,747 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
 
 
 
 
d9825df
aacf3f8
d9825df
 
 
 
 
 
 
 
 
 
 
 
 
aacf3f8
 
 
 
 
 
d9825df
aacf3f8
 
 
d9825df
 
 
 
 
 
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
99
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>")

    # Create layout with two columns
    with gr.Row():
        # Sidebar content
        with gr.Column(scale=3):
            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 (question input and response display)
        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()

            # File upload area
            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()