parthib07's picture
Update app.py
58bfc03 verified
"""
AI Healthcare Assistant - Main Application
Entry point that orchestrates UI, agents, and workflow
"""
import streamlit as st
from config import initialize_clients, get_api_keys
from agents import AgentState, create_workflow
from ui import (
apply_custom_css,
render_header,
render_sidebar,
render_input_section,
render_analyze_button,
render_results,
render_footer
)
def main():
"""Main application function"""
st.set_page_config(
page_title="AI Healthcare Assistant",
page_icon="🩺",
layout="wide",
initial_sidebar_state="expanded"
)
# Check for API keys
groq_api_key, tavily_api_key = get_api_keys()
if not groq_api_key or not tavily_api_key:
st.error("⚠️ Please set GROQ_API_KEY and TAVILY_API_KEY in your .env file")
st.info("Create a `.env` file in the project root with:\n```\nGROQ_API_KEY=your_key_here\nTAVILY_API_KEY=your_key_here\n```")
st.stop()
# Initialize API clients
llm, tavily_client, error = initialize_clients()
if error:
st.error(f"Error initializing clients: {error}")
st.stop()
# Apply custom CSS with theme support
theme = st.session_state.get("theme", "light")
apply_custom_css(theme)
# Render header
render_header()
# Render sidebar
render_sidebar()
# Render input section
user_input = render_input_section()
# Render analyze button
analyze_button = render_analyze_button()
# Initialize workflow in session state
if "workflow" not in st.session_state:
st.session_state.workflow = create_workflow(llm, tavily_client)
if "results" not in st.session_state:
st.session_state.results = None
# Process analysis
if analyze_button and user_input:
with st.spinner("🧠 Analyzing symptoms and gathering information..."):
try:
# Initialize state
initial_state: AgentState = {
"user_input": user_input,
"symptom_analysis": "",
"medication_advice": "",
"home_remedies": "",
"diet_lifestyle": "",
"doctor_recommendations": "",
"error": ""
}
# Run workflow
result = st.session_state.workflow.invoke(initial_state)
st.session_state.results = result
except Exception as e:
st.error(f"Error processing request: {str(e)}")
st.session_state.results = None
# Display results
if st.session_state.results:
render_results(st.session_state.results)
# Render footer
render_footer()
if __name__ == "__main__":
main()