File size: 4,215 Bytes
1e9d8aa
3454584
 
 
 
 
1e9d8aa
3454584
 
1e9d8aa
3454584
1e9d8aa
 
3454584
 
 
 
aad31df
3454584
 
 
 
 
 
 
bcac0d3
 
3454584
1e9d8aa
3454584
 
 
 
 
 
 
 
 
 
 
 
1e9d8aa
3454584
faaca54
3454584
 
1e9d8aa
3454584
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1e9d8aa
3454584
 
 
 
 
 
 
 
 
 
 
5d81b4c
3454584
 
 
 
 
 
 
 
 
 
1e9d8aa
3454584
 
 
1e9d8aa
3454584
1e9d8aa
 
 
3454584
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
"""
Gradio UI entry‑point for the WellBe+ Assistant.

This file focuses *exclusively* on building and launching the UI. Business
logic remains in ``wellbe_agent.py`` so that the web interface stays lean and
maintainable.
"""
from __future__ import annotations
import gradio as gr

from wellbe_agent import answer_sync


DESCRIPTION_MD = (
    "# **WellBe+ Assistant**\n\n"
    "WellBe+ AI Agent is a multi‑context assistant built with the Agents SDK framework "
    "from OpenAI. It orchestrates **three secure MCP servers**: a public drug‑knowledge FDA "
    "service, PubMed and WHOOP biometric feed.\n\n"
    "Ask how medications, habits or workouts influence your sleep and recovery – the agent "
    "combines **medical knowledge** with your **personal Whoop data** to craft evidence‑backed "
    "answers.\n\n"
    "### Example questions\n"
    "- *What are the adverse effects of Tamoxifen?*\n"
    "- *I started taking Prozac three months ago. Have you noticed any trends in my sleep quality? Also, what are its most common side effects?*\n\n"
    "### MCP Servers in use\n"
    "- [Whoop](https://huggingface.co/spaces/Agents-MCP-Hackathon/whoop-mcp-server)\n"
    "- [Healthcare MCP with PubMed, FDA and other APIs](https://huggingface.co/spaces/Agents-MCP-Hackathon/healthcare-mcp-public)\n"
)

video_embed = """
<div style="text-align: center;">
    <h3>How to Use WellBe+ Assistant</h3>
    <iframe width="560" height="315"
        src="https://www.youtube.com/embed/iP4L3cLgD84"
        title="Our Demo on YouTube"
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
        allowfullscreen>
    </iframe>
</div>
"""

logo_html = """
    <img src="https://raw.githubusercontent.com/Alea4jacta6est/drug-interaction-checker-agent/main/docs/images/logo.png" 
        alt="WellBe+" width="80">
    """

def build_interface() -> gr.Blocks:
    """Construct and return the Gradio interface for the WellBe+ Assistant."""
    with gr.Blocks(title="WellBe+ Assistant") as app:
        gr.HTML(logo_html)
        with gr.Row():
            with gr.Column(scale=2):
                gr.Markdown(DESCRIPTION_MD)
            with gr.Column(scale=1):
                gr.HTML(video_embed)
        with gr.Row():
            # -----------------------------------------------------------------
            # Left column – credential inputs
            # -----------------------------------------------------------------
            with gr.Column(scale=1):
                gr.Markdown("### Credentials")
                openai_key_box = gr.Textbox(
                    label="OpenAI API Key",
                    type="password",
                    placeholder="sk‑…",
                )
                whoop_email_box = gr.Textbox(label="Whoop e‑mail")
                whoop_pass_box = gr.Textbox(label="Whoop password", type="password")

            # -----------------------------------------------------------------
            # Right column – chat interface
            # -----------------------------------------------------------------
            with gr.Column(scale=2):
                gr.Markdown("### Chat")
                question_box = gr.Textbox(
                    label="Question",
                    lines=3,
                    placeholder="e.g. How has my sleep changed since starting Prozac last month?",
                )
                answer_box = gr.Textbox(label="Assistant", lines=8, interactive=False)
                ask_btn = gr.Button("Explore Insights", variant="primary")
                ask_btn.click(
                    fn=answer_sync,
                    inputs=[
                        question_box,
                        openai_key_box,
                        whoop_email_box,
                        whoop_pass_box,
                    ],
                    outputs=answer_box,
                )

        gr.Markdown(
            "---\nBuilt by [Natalia B.](https://www.linkedin.com/in/natalia-bobkova/), [Victoria L.](https://www.linkedin.com/in/victoria-latynina/)"
        )

    return app


if __name__ == "__main__":
    build_interface().launch()