|
|
|
import asyncio, streamlit as st, pandas as pd |
|
from mcp.orchestrator import orchestrate_search |
|
|
|
st.set_page_config(layout="wide", page_title="MedGenesis AI") |
|
if "res" not in st.session_state: st.session_state.res = None |
|
|
|
st.title("🧬 MedGenesis AI") |
|
llm = st.radio("LLM engine", ["openai","gemini"], horizontal=True) |
|
q = st.text_input("Enter biomedical question") |
|
if st.button("Run Search") and q: |
|
with st.spinner("Fetching data…"): |
|
st.session_state.res = asyncio.run(orchestrate_search(q, llm=llm)) |
|
|
|
res = st.session_state.res |
|
if res: |
|
st.subheader("🔬 Papers") |
|
for p in res["papers"]: |
|
st.markdown(f"**[{p['title']}]({p['link']})** – {p['authors']}") |
|
st.write(p["summary"]) |
|
st.subheader("💡 AI Summary") |
|
st.info(res["ai_summary"]) |
|
|
|
tabs = st.tabs(["Graph","Variants","Trials"]) |
|
with tabs[0]: |
|
from mcp.knowledge_graph import build_agraph |
|
nodes, edges, cfg = build_agraph(res) |
|
from streamlit_agraph import agraph |
|
agraph(nodes, edges, cfg) |
|
with tabs[1]: |
|
if res["variants"]: |
|
st.json(res["variants"]) |
|
else: |
|
st.warning("No variants found. Try TP53 or BRCA1.") |
|
with tabs[2]: |
|
if res["trials"]: |
|
st.json(res["trials"]) |
|
else: |
|
st.warning("No trials. Try a disease e.g. ‘Breast Neoplasms’ or a drug.") |
|
else: |
|
st.info("Enter a query and press Run Search.") |
|
|