File size: 2,817 Bytes
5e433de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import os
from dotenv import load_dotenv
from src.interface import (
    Interface, 
    handle_login,
)
from src import config

# Load environment variables
load_dotenv()

bot = None  # Initially, no bot is created until the user logs in or registers


# Function to handle bot initialization after successful login
def start_bot(userid, password, api_key_input):
    # Run login first and get success
    global bot
    login_status, login_section, chat_section = handle_login(userid, password, api_key_input)
    
    # Initialize the bot after login is successful
    if "successful" in login_status:  # Check for successful login
        bot = Interface()  # Initialize after login success
        return login_status, login_section, chat_section, bot  # Return all sections and bot
    else:
        return login_status, login_section, chat_section, None  # Return failure and no bot

        

def answer(message, history):
    answer_md, tables_display, images_display, retrieved_display = bot.get_answer(message)
    
    # Combine all parts into a single response string for chat
    combined_response = f"{answer_md}\n\n{tables_display}"
    
    # Add images as markdown
    if images_display:
        combined_response += "\n\n" + "\n\n".join(images_display)
    
    return combined_response


# Build Gradio Interface
with gr.Blocks(fill_height=True, fill_width = True) as app:
    # gr.Markdown("# 🧪 MediBot Login & Chat App")

    # Login Section
    with gr.Column(visible=True) as login_section:
        gr.Markdown("## 🔐 Enter Your Groq Cloud API Key")
        gr.Markdown("You can create an API key at [Groq Cloud Console](https://console.groq.com/keys)")
        gr.Markdown("## 🔐 Login or Register")

        userid_input = gr.Textbox(label="UserID")
        password_input = gr.Textbox(label="Password", type="password")
        api_key_input = gr.Textbox(
            label="Groq API Key (only needed for registration)", 
            type="password", 
            placeholder="sk-... (optional)"
        )

        login_btn = gr.Button("Login / Register")
        login_output = gr.Textbox(label="Login Status", interactive=False)

    # Initialize the bot
    # Chat Section (Initially hidden)
    with gr.Column(visible=False) as chat_section:
        gr.ChatInterface(
                        answer,
                        title="🩺 MediBot Chat Interface",
                        examples=["briefly explain me about cancer", "types of skin diseases?"],
                        flagging_options = ['Like', 'Dislike']
                    )


    login_btn.click(
        fn=start_bot,
        inputs=[userid_input, password_input, api_key_input],
        outputs=[login_output, login_section, chat_section]
    )


app.launch(share=True, show_error=True)