""" 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']}")