Spaces:
Running
Running
import streamlit as st | |
from search_utils import SemanticSearch | |
def main(): | |
st.set_page_config( | |
page_title="Semantic Search Engine", | |
page_icon="π", | |
layout="wide" | |
) | |
# Initialize search system first | |
def init_search_system(): | |
system = SemanticSearch() | |
system.initialize_system() | |
return system | |
# Custom CSS moved outside cached function | |
st.markdown(""" | |
<style> | |
div[data-testid="stExpander"] div[role="button"] p { | |
font-size: 1.2rem; | |
font-weight: bold; | |
} | |
a.source-link { | |
color: #1e88e5 !important; | |
text-decoration: none !important; | |
border-bottom: 1px dotted #1e88e5; | |
} | |
a.source-link:hover { | |
opacity: 0.8; | |
border-bottom-style: solid; | |
} | |
</style> | |
""", unsafe_allow_html=True) | |
search_system = init_search_system() | |
# Main UI components | |
st.title("π Semantic Search Engine") | |
query = st.text_input("Enter your search query:", placeholder="Search documents...") | |
if query: | |
with st.spinner("π Searching through documents..."): | |
results = search_system.search(query, 5) | |
if not results.empty: | |
st.subheader("Top Results") | |
for _, row in results.iterrows(): | |
with st.expander(f"{row['title']} (Similarity: {row['similarity']:.1%})"): | |
st.markdown(f"**Summary**: {row['summary']}") | |
st.markdown(f"<a class='source-link' href='{row['source']}' target='_blank'>View Source</a>", | |
unsafe_allow_html=True) | |
else: | |
st.warning("No matching documents found") | |
# System status sidebar | |
with st.sidebar: | |
st.subheader("System Status") | |
st.metric("Total Documents", f"{search_system.metadata_mgr.total_docs:,}") | |
st.metric("FAISS Shards", len(search_system.index_shards)) | |
st.metric("Metadata Shards", len(search_system.metadata_mgr.shard_map)) | |
# Sidebar controls outside main query block | |
with st.sidebar: | |
if st.button("Clear Cache"): | |
st.cache_resource.clear() | |
st.rerun() | |
if __name__ == "__main__": | |
main() |