|
import streamlit as st |
|
from pubmed_rag import search_pubmed, fetch_pubmed_abstracts, summarize_text |
|
from image_pipeline import analyze_medical_image |
|
from models import query_openai_text |
|
from config import OPENAI_DEFAULT_MODEL |
|
|
|
st.set_page_config(page_title="Advanced Medical AI", layout="wide") |
|
|
|
def main(): |
|
st.title("Advanced Medical AI") |
|
st.sidebar.title("Features") |
|
task = st.sidebar.selectbox("Choose a task:", ["PubMed Q&A", "Medical Image Analysis"]) |
|
|
|
if task == "PubMed Q&A": |
|
|
|
st.subheader("PubMed Question Answering") |
|
query = st.text_input("Enter your medical question:", "What are the latest treatments for diabetes?") |
|
max_results = st.slider("Number of PubMed articles to retrieve:", 1, 10, 5) |
|
|
|
if st.button("Run Query"): |
|
with st.spinner("Searching PubMed..."): |
|
|
|
pmids = search_pubmed(query, max_results) |
|
if not pmids: |
|
st.error("No results found. Try another query.") |
|
return |
|
|
|
with st.spinner("Fetching and summarizing abstracts..."): |
|
|
|
abstracts = fetch_pubmed_abstracts(pmids) |
|
|
|
summaries = {pmid: summarize_text(abstract) for pmid, abstract in abstracts.items()} |
|
|
|
st.subheader("PubMed Summaries") |
|
for pmid, summary in summaries.items(): |
|
st.write(f"**PMID {pmid}**: {summary}") |
|
|
|
with st.spinner("Querying OpenAI model..."): |
|
|
|
system_message = "You are a medical assistant with access to summarized PubMed abstracts." |
|
user_message = f"Summarized articles: {summaries}\n\nQuestion: {query}" |
|
answer = query_openai_text(system_message, user_message, OPENAI_DEFAULT_MODEL) |
|
st.subheader("AI-Powered Answer") |
|
st.write(answer) |
|
|
|
elif task == "Medical Image Analysis": |
|
|
|
st.subheader("Medical Image Analysis") |
|
uploaded_file = st.file_uploader("Upload a medical image (PNG/JPG):", type=["png", "jpg", "jpeg"]) |
|
if uploaded_file: |
|
st.image(uploaded_file, caption="Uploaded Image", use_column_width=True) |
|
with st.spinner("Analyzing image..."): |
|
|
|
result = analyze_medical_image(uploaded_file) |
|
st.subheader("Diagnostic Insight") |
|
st.write(result) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|