GenAI / app.py
aman1762's picture
Update app.py
7dd0ba0 verified
import streamlit as st
import os
from ingest import load_repo, ingest_repo, extract_zip
from vectorstore import create_vectorstore
from rag_chain import build_rag_chain
st.set_page_config(page_title="Codebase RAG Assistant")
st.title("🧠 Codebase RAG Assistant")
if "qa_chain" not in st.session_state:
st.session_state.qa_chain = None
st.subheader("Input Source")
repo_url = st.text_input("GitHub Repository URL (optional)")
uploaded_zip = st.file_uploader("Or upload ZIP file", type=["zip"])
if st.button("Index Codebase"):
try:
with st.spinner("Processing codebase..."):
if uploaded_zip:
repo_path = extract_zip(uploaded_zip)
docs = ingest_repo(repo_path)
elif repo_url:
if "/blob/" in repo_url:
st.error("Please provide a repository URL, not a file URL.")
st.stop()
repo_path = load_repo(repo_url)
docs = ingest_repo(repo_path)
else:
st.warning("Provide GitHub repo URL or upload ZIP.")
st.stop()
if not docs:
st.error(
"No supported source files found.\n\n"
"Supported: .py, .js, .java, .cpp, .txt, .ipynb"
)
st.stop()
vectorstore = create_vectorstore(docs)
st.session_state.qa_chain = build_rag_chain(
vectorstore,
os.getenv("GROQ_API_KEY")
)
st.success("Indexing completed!")
except Exception as e:
st.error(str(e))
question = st.text_input("Ask a question about the codebase")
if st.button("Ask"):
if st.session_state.qa_chain is None:
st.warning("Index a codebase first.")
elif not question.strip():
st.warning("Enter a question.")
else:
with st.spinner("Thinking..."):
answer = st.session_state.qa_chain.invoke(question)
st.markdown("### Answer")
st.write(answer)