Doc-Weather-Bot / app.py
AmritSbisht's picture
Update app.py
947cedb verified
import streamlit as st
from typing import Dict, Any, List
import tempfile
import os
from graph.workflow import LangGraphWorkflow
from utils.document_loader import DocumentLoader
from models.vector_store import VectorStore
from dotenv import load_dotenv
load_dotenv()
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
OPENWEATHERMAP_API_KEY = os.getenv("OPENWEATHERMAP_API_KEY")
LANGSMITH_TRACING= True
LANGSMITH_ENDPOINT= os.getenv("LANGSMITH_ENDPOINT")
LANGSMITH_API_KEY= os.getenv("LANGSMITH_API_KEY")
LANGSMITH_PROJECT= os.getenv("LANGSMITH_PROJECT")
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
db_url = os.getenv("db_url")
db_api = os.getenv("db_api")
def main():
st.title("Doc weather Bot")
# Initialize components
doc_loader = DocumentLoader()
vector_store = VectorStore()
workflow = LangGraphWorkflow()
# Sidebar - Document Upload
st.sidebar.header("Upload Documents")
uploaded_file = st.sidebar.file_uploader("Upload a PDF document", type="pdf")
if uploaded_file:
with st.spinner("Processing document..."):
# Save the uploaded file
pdf_path = doc_loader.save_uploaded_pdf(uploaded_file)
if pdf_path:
# Load and process the document
documents = doc_loader.load_pdf(pdf_path)
if documents:
# Add documents to vector store
success = vector_store.add_documents(documents)
if success:
st.sidebar.success(f"Document '{uploaded_file.name}' processed and indexed successfully!")
else:
st.sidebar.error("Failed to index the document.")
else:
st.sidebar.error("Failed to process the document.")
# Available documents
st.sidebar.header("Available Documents")
documents = doc_loader.get_available_documents()
if documents:
st.sidebar.write(", ".join(documents))
else:
st.sidebar.write("No documents available")
# Chat interface
st.header("Chat Interface")
# Initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
# Display chat history
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.write(message["content"])
# User input
user_query = st.chat_input("Ask about weather or document information")
if user_query:
# Add user message to chat history
st.session_state.messages.append({"role": "user", "content": user_query})
# Display user message
with st.chat_message("user"):
st.write(user_query)
# Process query
with st.spinner("Thinking..."):
result = workflow.invoke(user_query)
# Add assistant message to chat history
st.session_state.messages.append({"role": "assistant", "content": result["response"]})
# Display assistant message
with st.chat_message("assistant"):
st.write(result["response"])
# Additional debug info in expander
with st.expander("Debug Information"):
st.write(f"Action: {result['action']}")
if result['action'] == 'weather' and result['city']:
st.write(f"City: {result['city']}")
if result['action'] == 'document' and result['context']:
st.write("Retrieved Context:")
for i, ctx in enumerate(result['context']):
st.write(f"Document {i+1}:")
st.write(ctx['page_content'])
st.write("Evaluation Metrics:")
st.write(result['evaluation'])
if __name__ == "__main__":
main()