ama-autism / app.py
wakeupmh's picture
refactor: structure
3af593c
raw
history blame
2.72 kB
import streamlit as st
import logging
from services.research_fetcher import ResearchFetcher
from services.model_handler import ModelHandler
from utils.text_processor import TextProcessor
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
class AutismResearchApp:
def __init__(self):
"""Initialize the application components"""
self.research_fetcher = ResearchFetcher()
self.model_handler = ModelHandler()
self.text_processor = TextProcessor()
self._setup_streamlit()
def _setup_streamlit(self):
"""Setup Streamlit UI components"""
st.title("🧩 AMA Autism")
st.write("""
Ask questions about autism and get research-based answers from scientific papers.
For best results, be specific in your questions.
""")
def _fetch_research(self, query: str):
"""Fetch research papers for the given query"""
papers = self.research_fetcher.fetch_all_papers(query)
if not papers:
st.warning("No relevant research papers found. Please try a different search term.")
return None
return papers
def _generate_answer(self, query: str, papers):
"""Generate answer based on research papers"""
context = "\n".join(
self.text_processor.format_paper(paper.title, paper.abstract)
for paper in papers[:3]
)
return self.model_handler.generate_answer(query, context)
def _display_sources(self, papers):
"""Display source papers in an expander"""
with st.expander("📚 View source papers"):
for paper in papers:
st.markdown(f"- [{paper.title}]({paper.url}) ({paper.published})")
def run(self):
"""Run the main application loop"""
query = st.text_input("What would you like to know about autism? ✨")
if query:
with st.status("Researching your question...") as status:
# Fetch papers
papers = self._fetch_research(query)
if not papers:
return
# Generate and display answer
st.write("Analyzing research papers...")
answer = self._generate_answer(query, papers)
status.write("I've got it!")
# Display results
self._display_sources(papers)
st.success("Research analysis complete!")
st.markdown(answer)
def main():
app = AutismResearchApp()
app.run()
if __name__ == "__main__":
main()