Spaces:
Runtime error
Runtime error
import streamlit as st | |
import requests | |
import pandas as pd | |
import time | |
# --- Page Configuration --- | |
st.set_page_config( | |
page_title="MediDoc Organizer", | |
page_icon="🩺", | |
layout="wide" | |
) | |
# --- Backend API URL --- | |
BACKEND_URL = "http://127.0.0.1:8000" | |
# --- Helper Functions --- | |
def check_backend_connection(): | |
"""Check if backend is running""" | |
try: | |
response = requests.get(f"{BACKEND_URL}/health", timeout=5) | |
return response.status_code == 200 | |
except: | |
return False | |
# --- Main Application --- | |
st.title("🩺 MediDoc Organizer") | |
st.write("Your intelligent assistant for organizing and understanding medical reports.") | |
# --- Check Backend Connection --- | |
if not check_backend_connection(): | |
st.error("Backend server is not running. Please start the FastAPI server first.") | |
st.code("python main.py") | |
st.stop() | |
# --- Sidebar --- | |
st.sidebar.title("User Profile") | |
user_name = st.sidebar.text_input("Enter your name", value="Arnav Bansal") | |
st.sidebar.write(f"Welcome, **{user_name}**!") | |
# --- Main Tabs --- | |
tab1, tab2, tab3 = st.tabs(["Upload Documents", "View Documents", "Search History"]) | |
# --- Tab 1: Upload Documents --- | |
with tab1: | |
st.header("Upload Your Medical Documents") | |
st.write("Upload PDF files and images of your medical documents for automatic processing.") | |
uploaded_files = st.file_uploader( | |
"Choose your medical documents", | |
type=['pdf', 'png', 'jpg', 'jpeg'], | |
accept_multiple_files=True | |
) | |
if st.button("Upload and Process"): | |
if uploaded_files: | |
for uploaded_file in uploaded_files: | |
with st.spinner(f"Processing {uploaded_file.name}..."): | |
files = {'file': (uploaded_file.name, uploaded_file.getvalue(), uploaded_file.type)} | |
try: | |
response = requests.post(f"{BACKEND_URL}/upload/", files=files, timeout=60) | |
if response.status_code == 200: | |
result = response.json() | |
st.success(f"Successfully processed {uploaded_file.name}") | |
# Show extracted information | |
info = result.get('info', {}) | |
st.write(f"**Category:** {info.get('category', 'N/A')}") | |
st.write(f"**Date:** {info.get('document_date', 'N/A')}") | |
st.write(f"**Doctor:** {info.get('doctor_name', 'N/A')}") | |
st.write(f"**Hospital:** {info.get('hospital_name', 'N/A')}") | |
st.write(f"**Summary:** {info.get('summary', 'N/A')}") | |
st.write("---") | |
else: | |
st.error(f"Error processing {uploaded_file.name}: {response.text}") | |
except Exception as e: | |
st.error(f"Error processing {uploaded_file.name}: {str(e)}") | |
else: | |
st.warning("Please select files to upload.") | |
# --- Tab 2: View Documents --- | |
with tab2: | |
st.header("Your Medical Documents") | |
try: | |
response = requests.get(f"{BACKEND_URL}/documents/", timeout=10) | |
if response.status_code == 200: | |
data = response.json() | |
documents = data.get("documents", []) | |
if documents: | |
st.write(f"Found {len(documents)} documents") | |
# Create a simple table | |
for doc in documents: | |
st.write("**File:**", doc.get('filename', 'Unknown')) | |
st.write("**Category:**", doc.get('category', 'N/A')) | |
st.write("**Date:**", doc.get('document_date', 'N/A')) | |
st.write("**Doctor:**", doc.get('doctor_name', 'N/A')) | |
st.write("**Hospital:**", doc.get('hospital_name', 'N/A')) | |
st.write("**Summary:**", doc.get('summary', 'N/A')) | |
st.write("---") | |
else: | |
st.info("No documents uploaded yet.") | |
else: | |
st.error("Could not retrieve documents from the backend.") | |
except Exception as e: | |
st.error(f"Connection error: {str(e)}") | |
# --- Tab 3: Search History --- | |
with tab3: | |
st.header("Search Your Medical History") | |
st.write("Ask questions about your medical history in natural language.") | |
# Example queries | |
st.write("**Example questions:**") | |
st.write("- What was the result of my latest blood test?") | |
st.write("- Show me all prescriptions from Dr. Smith") | |
st.write("- What medications am I currently taking?") | |
search_query = st.text_input("Enter your question:") | |
if st.button("Search"): | |
if search_query.strip(): | |
with st.spinner("Searching through your medical records..."): | |
try: | |
response = requests.get( | |
f"{BACKEND_URL}/search/", | |
params={"query": search_query}, | |
timeout=30 | |
) | |
if response.status_code == 200: | |
results = response.json() | |
st.write("### Search Results") | |
# Display the answer | |
if results.get("answer"): | |
st.write("**Answer:**") | |
st.write(results['answer']) | |
# Display sources | |
sources = results.get("sources", []) | |
if sources: | |
st.write("**Sources:**") | |
for source in sources: | |
st.write(f"- {source['filename']}") | |
if 'summary' in source: | |
st.write(f" Summary: {source['summary']}") | |
else: | |
st.warning("Could not find an answer. Try rephrasing your question.") | |
else: | |
st.error(f"Search failed: {response.text}") | |
except Exception as e: | |
st.error(f"Search error: {str(e)}") | |
else: | |
st.warning("Please enter a search query.") | |
# --- Footer --- | |
st.write("---") | |
st.write("MediDoc Organizer - Built for better healthcare management") |