Spaces:
Sleeping
Sleeping
Update streamlit_app.py
Browse files- streamlit_app.py +59 -36
streamlit_app.py
CHANGED
|
@@ -1,70 +1,93 @@
|
|
| 1 |
-
import sys
|
|
|
|
| 2 |
import streamlit as st
|
| 3 |
|
| 4 |
-
# ---- Ensure root
|
| 5 |
-
ROOT_DIR = os.path.abspath(os.path.dirname(__file__))
|
| 6 |
if ROOT_DIR not in sys.path:
|
| 7 |
-
sys.path.
|
| 8 |
|
| 9 |
-
# Local imports
|
| 10 |
-
from main import run_pipeline
|
| 11 |
-
from rag_node import load_pdf, rag_answer
|
| 12 |
-
from weather_node import fetch_weather
|
| 13 |
-
from decision_node import decide_and_execute
|
| 14 |
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
st.title("π€ AI Agent: Weather + PDF Q&A")
|
| 18 |
|
| 19 |
-
# Sidebar
|
| 20 |
-
mode = st.sidebar.radio(
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
-
#
|
| 23 |
if mode == "π¦οΈ Weather":
|
| 24 |
st.header("π¦οΈ Weather Queries")
|
| 25 |
-
|
|
|
|
|
|
|
| 26 |
if st.button("Get Weather"):
|
| 27 |
-
if city:
|
| 28 |
-
|
|
|
|
| 29 |
st.success(result)
|
| 30 |
else:
|
| 31 |
st.warning("Please enter a city name.")
|
| 32 |
|
| 33 |
-
#
|
| 34 |
elif mode == "π PDF Q&A":
|
| 35 |
st.header("π Ask Questions from PDF")
|
| 36 |
|
| 37 |
if "pdf_loaded" not in st.session_state:
|
| 38 |
st.session_state.pdf_loaded = False
|
| 39 |
|
| 40 |
-
uploaded_pdf = st.file_uploader(
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
if uploaded_pdf:
|
| 42 |
os.makedirs("data", exist_ok=True)
|
| 43 |
-
|
|
|
|
|
|
|
| 44 |
f.write(uploaded_pdf.read())
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
| 46 |
st.session_state.pdf_loaded = True
|
| 47 |
-
st.success("β
PDF loaded
|
|
|
|
|
|
|
| 48 |
|
| 49 |
-
query = st.text_input("Ask something from the PDF:")
|
| 50 |
if st.button("Search PDF"):
|
| 51 |
-
if st.session_state.pdf_loaded:
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
else:
|
| 56 |
-
st.warning("Please enter a query.")
|
| 57 |
else:
|
| 58 |
-
st.
|
|
|
|
|
|
|
| 59 |
|
| 60 |
-
#
|
| 61 |
elif mode == "π€ Combined (Auto Detect)":
|
| 62 |
st.header("π€ Combined Mode (Weather + PDF)")
|
| 63 |
-
|
|
|
|
|
|
|
| 64 |
if st.button("Ask Agent"):
|
| 65 |
-
if query:
|
| 66 |
-
with st.spinner("Processing..."):
|
| 67 |
-
answer = run_pipeline(query) # β
goes through pipeline (LangGraph + LangSmith)
|
| 68 |
-
st.success(answer)
|
| 69 |
-
else:
|
| 70 |
st.warning("Please enter a query.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sys
|
| 2 |
+
import os
|
| 3 |
import streamlit as st
|
| 4 |
|
| 5 |
+
# ---- Ensure project root is always in PYTHONPATH ----
|
| 6 |
+
ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
| 7 |
if ROOT_DIR not in sys.path:
|
| 8 |
+
sys.path.insert(0, ROOT_DIR)
|
| 9 |
|
| 10 |
+
# ---- Local imports ----
|
| 11 |
+
from app.main import run_pipeline
|
| 12 |
+
from app.rag_node import load_pdf, rag_answer
|
| 13 |
+
from app.weather_node import fetch_weather
|
|
|
|
| 14 |
|
| 15 |
+
# ---- Page config ----
|
| 16 |
+
st.set_page_config(
|
| 17 |
+
page_title="π€ AI Agent: Weather + PDF Q&A",
|
| 18 |
+
page_icon="π€",
|
| 19 |
+
layout="wide"
|
| 20 |
+
)
|
| 21 |
|
| 22 |
st.title("π€ AI Agent: Weather + PDF Q&A")
|
| 23 |
|
| 24 |
+
# ---- Sidebar ----
|
| 25 |
+
mode = st.sidebar.radio(
|
| 26 |
+
"Choose a mode:",
|
| 27 |
+
["π¦οΈ Weather", "π PDF Q&A", "π€ Combined (Auto Detect)"]
|
| 28 |
+
)
|
| 29 |
|
| 30 |
+
# ===================== WEATHER MODE =====================
|
| 31 |
if mode == "π¦οΈ Weather":
|
| 32 |
st.header("π¦οΈ Weather Queries")
|
| 33 |
+
|
| 34 |
+
city = st.text_input("Enter a city name")
|
| 35 |
+
|
| 36 |
if st.button("Get Weather"):
|
| 37 |
+
if city.strip():
|
| 38 |
+
with st.spinner("Fetching weather..."):
|
| 39 |
+
result = fetch_weather(city.strip())
|
| 40 |
st.success(result)
|
| 41 |
else:
|
| 42 |
st.warning("Please enter a city name.")
|
| 43 |
|
| 44 |
+
# ===================== PDF MODE =====================
|
| 45 |
elif mode == "π PDF Q&A":
|
| 46 |
st.header("π Ask Questions from PDF")
|
| 47 |
|
| 48 |
if "pdf_loaded" not in st.session_state:
|
| 49 |
st.session_state.pdf_loaded = False
|
| 50 |
|
| 51 |
+
uploaded_pdf = st.file_uploader(
|
| 52 |
+
"Upload a PDF",
|
| 53 |
+
type=["pdf"]
|
| 54 |
+
)
|
| 55 |
+
|
| 56 |
if uploaded_pdf:
|
| 57 |
os.makedirs("data", exist_ok=True)
|
| 58 |
+
pdf_path = "data/sample.pdf"
|
| 59 |
+
|
| 60 |
+
with open(pdf_path, "wb") as f:
|
| 61 |
f.write(uploaded_pdf.read())
|
| 62 |
+
|
| 63 |
+
with st.spinner("Indexing PDF into vector database..."):
|
| 64 |
+
load_pdf(pdf_path)
|
| 65 |
+
|
| 66 |
st.session_state.pdf_loaded = True
|
| 67 |
+
st.success("β
PDF loaded and indexed successfully!")
|
| 68 |
+
|
| 69 |
+
query = st.text_input("Ask something from the PDF")
|
| 70 |
|
|
|
|
| 71 |
if st.button("Search PDF"):
|
| 72 |
+
if not st.session_state.pdf_loaded:
|
| 73 |
+
st.warning("Please upload and load a PDF first.")
|
| 74 |
+
elif not query.strip():
|
| 75 |
+
st.warning("Please enter a query.")
|
|
|
|
|
|
|
| 76 |
else:
|
| 77 |
+
with st.spinner("Searching document..."):
|
| 78 |
+
answer = rag_answer(query.strip())
|
| 79 |
+
st.info(answer)
|
| 80 |
|
| 81 |
+
# ===================== COMBINED MODE =====================
|
| 82 |
elif mode == "π€ Combined (Auto Detect)":
|
| 83 |
st.header("π€ Combined Mode (Weather + PDF)")
|
| 84 |
+
|
| 85 |
+
query = st.text_input("Ask me anything")
|
| 86 |
+
|
| 87 |
if st.button("Ask Agent"):
|
| 88 |
+
if not query.strip():
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
st.warning("Please enter a query.")
|
| 90 |
+
else:
|
| 91 |
+
with st.spinner("Agent is thinking..."):
|
| 92 |
+
answer = run_pipeline(query.strip())
|
| 93 |
+
st.success(answer)
|