Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from streamlit_extras.add_vertical_space import add_vertical_space | |
| from backend.constants.myscale_tables import MYSCALE_TABLES | |
| from backend.constants.variables import CHAINS_RETRIEVERS_MAPPING, RetrieverButtons | |
| from backend.retrievers.self_query import process_self_query | |
| from backend.retrievers.vector_sql_query import process_sql_query | |
| from backend.constants.variables import JUMP_QUERY_ASK, USER_NAME, USER_INFO | |
| def back_to_main(): | |
| if USER_INFO in st.session_state: | |
| del st.session_state[USER_INFO] | |
| if USER_NAME in st.session_state: | |
| del st.session_state[USER_NAME] | |
| if JUMP_QUERY_ASK in st.session_state: | |
| del st.session_state[JUMP_QUERY_ASK] | |
| def _render_table_selector() -> str: | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| selected_table = st.selectbox( | |
| label='Each public knowledge base is stored in a MyScaleDB table, which is read-only.', | |
| options=MYSCALE_TABLES.keys(), | |
| ) | |
| MYSCALE_TABLES[selected_table].hint() | |
| with col2: | |
| add_vertical_space(1) | |
| st.info(f"Here is your selected public knowledge base schema in MyScaleDB", | |
| icon='📚') | |
| MYSCALE_TABLES[selected_table].hint_sql() | |
| return selected_table | |
| def render_retrievers(): | |
| st.button("⬅️ Back", key="back_sql", on_click=back_to_main) | |
| st.subheader('Please choose a public knowledge base to search.') | |
| selected_table = _render_table_selector() | |
| tab_sql, tab_self_query = st.tabs( | |
| tabs=['Vector SQL', 'Self-querying Retriever'] | |
| ) | |
| with tab_sql: | |
| render_tab_sql(selected_table) | |
| with tab_self_query: | |
| render_tab_self_query(selected_table) | |
| def render_tab_sql(selected_table: str): | |
| st.warning( | |
| "When you input a query with filtering conditions, you need to ensure that your filters are applied only to " | |
| "the metadata we provide. This table allows filters to be established on the following metadata fields:", | |
| icon="⚠️") | |
| st.dataframe(st.session_state[CHAINS_RETRIEVERS_MAPPING][selected_table]["metadata_columns"]) | |
| cols = st.columns([8, 3, 3, 2]) | |
| cols[0].text_input("Input your question:", key='query_sql') | |
| with cols[1].container(): | |
| add_vertical_space(2) | |
| st.button("Retrieve from MyScaleDB ➡️", key=RetrieverButtons.vector_sql_query_from_db) | |
| with cols[2].container(): | |
| add_vertical_space(2) | |
| st.button("Retrieve and answer with LLM ➡️", key=RetrieverButtons.vector_sql_query_with_llm) | |
| if st.session_state[RetrieverButtons.vector_sql_query_from_db]: | |
| process_sql_query(selected_table, RetrieverButtons.vector_sql_query_from_db) | |
| if st.session_state[RetrieverButtons.vector_sql_query_with_llm]: | |
| process_sql_query(selected_table, RetrieverButtons.vector_sql_query_with_llm) | |
| def render_tab_self_query(selected_table): | |
| st.warning( | |
| "When you input a query with filtering conditions, you need to ensure that your filters are applied only to " | |
| "the metadata we provide. This table allows filters to be established on the following metadata fields:", | |
| icon="⚠️") | |
| st.dataframe(st.session_state[CHAINS_RETRIEVERS_MAPPING][selected_table]["metadata_columns"]) | |
| cols = st.columns([8, 3, 3, 2]) | |
| cols[0].text_input("Input your question:", key='query_self') | |
| with cols[1].container(): | |
| add_vertical_space(2) | |
| st.button("Retrieve from MyScaleDB ➡️", key='search_self') | |
| with cols[2].container(): | |
| add_vertical_space(2) | |
| st.button("Retrieve and answer with LLM ➡️", key='ask_self') | |
| if st.session_state.search_self: | |
| process_self_query(selected_table, RetrieverButtons.self_query_from_db) | |
| if st.session_state.ask_self: | |
| process_self_query(selected_table, RetrieverButtons.self_query_with_llm) | |