|
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 |
|
|
|
|
|
nest_asyncio.apply() |
|
|
|
|
|
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.") |
|
|
|
|
|
st.header("Ask a Question") |
|
query = st.text_input("Enter your question:") |
|
|
|
if "response" not in st.session_state: |
|
st.session_state.response = None |
|
|
|
|
|
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.") |
|
|