import streamlit as st import logging from src.pipeline import QAPipeline from langchain_community.document_loaders import CSVLoader import os import tempfile import asyncio import nest_asyncio # Apply nest_asyncio nest_asyncio.apply() # Set Streamlit watcher ignore pattern for torch os.environ["STREAMLIT_WATCHER_IGNORE_PATTERNS"] = "*/torch/*" logging.basicConfig( filename="/tmp/app.log", filemode="a", format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO ) logger = logging.getLogger(__name__) pipeline = QAPipeline() st.title("Recipe Q&A") logger.info("App started.") # Query section st.header("Ask a Question") query = st.text_input("Enter your question:") if "response" not in st.session_state: st.session_state.response = None # Get answer if st.button("Get Answer") and query: logger.info(f"Received query: {query}") with st.spinner("Getting answer..."): try: response = asyncio.run(pipeline.answer_query_(query)) st.session_state.response = response logger.info(f"Response: {response.answer}") st.write("**Answer:**") st.write(response.answer) except Exception as e: logger.error(f"Error while getting answer: {e}") st.error("An error occurred while processing your query.") if st.session_state.response: if st.session_state.response.web_search: if st.button("Search the web for this?"): logger.info(f"Initiating web search for query: {query}") with st.spinner("Searching web..."): try: web_response = asyncio.run(pipeline.search_web(query)) if web_response: logger.info(f"Web response: {web_response}") st.write("**Web Search Result:**") st.write(web_response) else: logger.info("No web search results found.") st.write("No web search result found.") except Exception as e: logger.error(f"Error during web search: {e}") st.error("Web search failed.")