Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from streamlit_option_menu import option_menu | |
| from core.search_index import index, search | |
| from interface.components import ( | |
| component_file_input, | |
| component_show_pipeline, | |
| component_show_search_result, | |
| component_text_input, | |
| component_article_url, | |
| ) | |
| def page_landing_page(container): | |
| with container: | |
| st.header("Neural Search V2.1") | |
| st.markdown( | |
| "This is a tool to allow indexing & search content using neural capabilities" | |
| ) | |
| st.markdown( | |
| "It uses the [Haystack](https://haystack.deepset.ai/overview/intro) open-source framework for building search systems" | |
| ) | |
| st.markdown( | |
| "In this second version you can:" | |
| "\n - Index raw text, URLs, CSVs, PDFs, Images and even audio!" | |
| "\n - Use Dense Passage Retrieval, Keyword Search pipeline and DPR Ranker pipelines" | |
| "\n - Search the indexed documents" | |
| "\n - Read your responses out loud using the `audio_output` option!" | |
| ) | |
| st.markdown( | |
| "TODO list:" | |
| "\n - File type classification and converter nodes" | |
| "\n - Build other pipelines" | |
| ) | |
| st.markdown( | |
| "Follow development of the tool [here](https://github.com/ugm2/neural-search-demo)" | |
| "\n\nDeveloped with π by [@ugm2](https://github.com/ugm2)" | |
| ) | |
| def page_search(container): | |
| with container: | |
| st.title("Query me!") | |
| ## SEARCH ## | |
| query = st.text_input("Query") | |
| component_show_pipeline(st.session_state["pipeline"], "search_pipeline") | |
| if st.button("Search"): | |
| with st.spinner("Searching..."): | |
| st.session_state["search_results"] = search( | |
| queries=[query], | |
| pipeline=st.session_state["pipeline"]["search_pipeline"], | |
| ) | |
| if st.session_state["search_results"] is not None: | |
| component_show_search_result( | |
| container=container, results=st.session_state["search_results"][0] | |
| ) | |
| def page_index(container): | |
| with container: | |
| st.title("Index time!") | |
| component_show_pipeline(st.session_state["pipeline"], "index_pipeline") | |
| input_funcs = { | |
| "Raw Text": (component_text_input, "card-text"), | |
| "URL": (component_article_url, "link"), | |
| "File": (component_file_input, "file-text"), | |
| } | |
| selected_input = option_menu( | |
| None, | |
| list(input_funcs.keys()), | |
| icons=[f[1] for f in input_funcs.values()], | |
| menu_icon="list", | |
| default_index=0, | |
| orientation="horizontal", | |
| ) | |
| clear_index = st.sidebar.checkbox("Clear Index", True) | |
| doc_id = st.session_state["doc_id"] | |
| corpus, doc_id = input_funcs[selected_input][0](container, doc_id) | |
| if len(corpus) > 0: | |
| index_results = None | |
| if st.button("Index"): | |
| with st.spinner("Indexing..."): | |
| index_results = index( | |
| documents=corpus, | |
| pipeline=st.session_state["pipeline"]["index_pipeline"], | |
| clear_index=clear_index, | |
| ) | |
| st.session_state["doc_id"] = doc_id | |
| st.success(f"{len(index_results)} documents indexed successfully!") | |