MedQA / app.py
mgbam's picture
Update app.py
864b488 verified
raw
history blame
3.27 kB
import streamlit as st
# 1) Ensure DB tables exist
from models.db import init_db
init_db()
# β€”β€”β€”β€”β€” First-Run Signup Flow β€”β€”β€”β€”β€”
from repositories.user_repo import UserRepo
from config.settings import settings
repo = UserRepo(settings.database_url)
if not repo.get_all_users():
st.title("πŸš€ Welcome to Quantum Healthcare AI")
st.warning("No users exist yet. Please create the first admin account:")
new_user = st.text_input("Username")
new_name = st.text_input("Full name")
new_pw = st.text_input("Password", type="password")
if st.button("Create Admin User"):
if new_user and new_name and new_pw:
repo.add_user(new_user, new_name, new_pw)
st.success(f"Admin `{new_user}` created! Please refresh to log in.")
else:
st.error("All fields are required.")
# Stop here until admin is created
st.stop()
# β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
# 2) Authentication (after at least one user exists)
from services.auth import authenticator, require_login
username = require_login()
# 3) Core AI + Clinical NLP + Quantum
from agent.gemini_agent import chat_with_gemini
from clinical_nlp.umls_bioportal import lookup_umls, lookup_bioportal
from quantum.optimizer import optimize_treatment
from repositories.chat_repo import ChatRepo
# 4) Monitoring & Logging
from services.logger import logger
from services.metrics import CHAT_COUNT, OPTIMIZE_COUNT
# === UI Setup ===
st.set_page_config(page_title="Quantum Health AI", layout="wide")
st.image("assets/logo.png", width=64)
st.title(f"Welcome, {username}!")
tab1, tab2 = st.tabs(["🩺 Consult", "πŸ“Š Reports"])
with tab1:
query = st.text_area("Describe symptoms or ask a medical question:", height=100)
if st.button("Ask Gemini"):
CHAT_COUNT.inc()
with st.spinner("Consulting AI..."):
response = chat_with_gemini(username, query)
logger.info(f"[Chat] user={username} prompt={query}")
st.markdown(f"**AI Response:** {response}")
ChatRepo().save(user=username, prompt=query, response=response)
with st.expander("πŸ”Ž UMLS Concept Lookup"):
st.write(lookup_umls(query) or "No UMLS concepts found.")
with st.expander("πŸ”¬ BioPortal Concept Lookup"):
st.write(lookup_bioportal(query) or "No BioPortal matches found.")
if st.button("Quantum Optimize Care Plan"):
OPTIMIZE_COUNT.inc()
with st.spinner("Running quantum-inspired optimizer..."):
plan = optimize_treatment(query)
logger.info(f"[Optimize] user={username} plan={plan}")
st.markdown("### 🧬 Optimized Treatment Plan")
st.json(plan)
with tab2:
st.header("Generate PDF Report of Recent Chats")
if st.button("Download Last 5 Chats"):
recent = ChatRepo().get_recent(user=username, limit=5)
from services.pdf_report import generate_pdf
pdf_path = generate_pdf({"Recent Chats": recent})
with open(pdf_path, "rb") as f:
st.download_button("Download PDF", f, file_name=pdf_path)
st.markdown("---")
st.caption("Powered by Gemini LLM β€’ UMLS/BioPortal β€’ Quantum-inspired optimization")