Enabley RAG
Deploy Enabley Smart Search β€” semantic RAG for Hebrew training content
8205dab
Raw History Blame Contribute Delete
1.57 kB
"""
app.py β€” Streamlit search interface for Enabley RAG.
Run: streamlit run app.py
"""
import streamlit as st
from rag import RAGIndex
st.set_page_config(page_title="πŸ” Enabley Smart Search", layout="wide")
st.title("πŸ” Enabley Smart Search")
st.caption("Semantic search over training course content β€” Hebrew / English / Russian")
@st.cache_resource
def load_index():
rag = RAGIndex()
rag.load()
return rag
try:
rag = load_index()
st.success(f"Index loaded: {rag.index.ntotal} chunks indexed")
except Exception as e:
st.error(f"No index found. Run `python rag.py build` first.\n\nError: {e}")
st.stop()
query = st.text_input(
"Search query / Χ©ΧΧ™ΧœΧͺΧͺ Χ—Χ™Χ€Χ•Χ©",
placeholder="e.g. מΧͺΧ™ Χ Χ’ΧžΧ¨ הרישום? / what documents do I need?",
)
top_k = st.slider("Number of results", 1, 10, 5)
if query:
results = rag.search(query, top_k=top_k)
st.markdown(f"### Results for: *{query}*")
for i, r in enumerate(results, 1):
score = r["score"]
source = r.get("source", "unknown")
text = r["text"]
# Color-code relevance
if score > 0.85:
badge = "🟒"
elif score > 0.70:
badge = "🟑"
else:
badge = "πŸ”΄"
with st.expander(f"{badge} Result {i} β€” score: {score:.3f} β€” [{source}]", expanded=(i <= 3)):
st.markdown(text)
if "slide" in r:
st.caption(f"πŸ“„ Slide {r['slide']}")
if "page" in r:
st.caption(f"πŸ“„ Page {r['page']}")