Spaces:
Sleeping
Sleeping
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() |