import streamlit as st import weaviate_utils import tapas_utils def display_initial_buttons(): if "upload_flow" not in st.session_state: st.session_state.upload_flow = False if "query_flow" not in st.session_state: st.session_state.query_flow = False if st.button("Upload new CSV"): st.session_state.upload_flow = True st.session_state.query_flow = False if st.button("Query existing data"): st.session_state.query_flow = True st.session_state.upload_flow = False def display_class_dropdown(client): if st.session_state.upload_flow: existing_classes = [cls["class"] for cls in client.schema.get()["classes"]] class_options = existing_classes + ["New Class"] return st.selectbox("Select a class or create a new one:", class_options, key="class_selector_upload") elif st.session_state.query_flow: existing_classes = [cls["class"] for cls in client.schema.get()["classes"]] class_options = existing_classes + ["Query all data"] return st.selectbox("Select a class or query all data:", class_options, key="class_selector_query") def handle_new_class_selection(client, selected_class): if selected_class == "New Class": class_name = st.text_input("Enter the new class name:") class_description = st.text_input("Enter a description for the class:") if class_name and class_description: if st.button("Create Vector DB Class"): # Call function to create new class schema in Weaviate weaviate_utils.create_new_class_schema(client, class_name, class_description) def csv_upload_and_ingestion(client, selected_class): csv_file = st.file_uploader("Upload a CSV file", type=["csv"], key="csv_uploader") if csv_file: if st.button("Confirm CSV upload"): # Call function to ingest CSV data into Weaviate weaviate_utils.ingest_data_to_weaviate(client, csv_file, selected_class) def display_query_input(): question = st.text_input("Enter your question:") if question: if st.button("Submit Query"): # Call function to query TAPAS with selected data and entered question # (This function needs to be implemented) query_tapas_with_weaviate_data(st.session_state.data_source, question) def query_tapas_with_weaviate_data(client, selected_class, question, tokenizer, model): # 1. Perform hybrid search data = weaviate_utils.hybrid_search_weaviate(client, selected_class, question) # 2. Convert the data to TAPAS format table = weaviate_utils.convert_to_tapas_format(data) # 3. Call TAPAS with the table and the question answers = tapas_utils.ask_llm_chunk(tokenizer, model, table, [question]) # Display the answers for answer in answers: st.write(f"Answer: {answer}")