Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from app.data_loader import get_data, load_docs | |
| from app.document_processor import process_documents, save_vector_store_to_supabase | |
| from app.db import supabase | |
| from app.config import Config | |
| import app.vector_store as vs | |
| import app.rag as rag | |
| BUCKET_NAME = Config.BUCKET_NAME | |
| VECTOR_STORE_PREFIX = Config.VECTOR_STORE_PREFIX | |
| def prepare_vector_store_if_needed(history_len: int): | |
| """ | |
| Orchestrates vector store availability. | |
| - If no local history and vector store is outdated: sync data, process, and upload. | |
| - Else: load cached vector store from Supabase. | |
| Returns a vector_store or None. | |
| """ | |
| vector_store = vs.get_cached_vector_store() | |
| if history_len == 0: | |
| if vs.vector_store_is_outdated(): | |
| with st.spinner("Memuat dan memproses dokumen..."): | |
| get_data() | |
| docs = load_docs() | |
| if len(docs) > 0: | |
| reordered_docs = rag.reorder_embedding(docs) | |
| vector_store = process_documents(reordered_docs) | |
| with st.spinner("Mengunggah vector store ke Supabase..."): | |
| success = save_vector_store_to_supabase(vector_store, supabase, BUCKET_NAME, VECTOR_STORE_PREFIX) | |
| if success: | |
| print("Vector store berhasil diunggah ke Supabase!") | |
| else: | |
| print("Gagal mengunggah vector store ke Supabase.") | |
| else: | |
| print("Folder 'data/' kosong. Chatbot tetap bisa digunakan, tetapi tanpa konteks dokumen.") | |
| vector_store = None | |
| else: | |
| with st.spinner("Memuat vector store dari Supabase..."): | |
| vector_store = vs.get_cached_vector_store() | |
| if vector_store: | |
| print("Vector store berhasil dimuat dari Supabase!") | |
| else: | |
| # Jika gagal memuat (mis. karena mismatch versi Pydantic/LangChain pada pickle), | |
| # fallback: bangun ulang dari dokumen dan unggah agar kompatibel dengan runtime saat ini. | |
| print("Gagal memuat vector store dari Supabase. Mencoba membangun ulang...") | |
| get_data() | |
| docs = load_docs() | |
| if len(docs) > 0: | |
| reordered_docs = rag.reorder_embedding(docs) | |
| vector_store = process_documents(reordered_docs) | |
| with st.spinner("Mengunggah vector store ke Supabase..."): | |
| success = save_vector_store_to_supabase(vector_store, supabase, BUCKET_NAME, VECTOR_STORE_PREFIX) | |
| if success: | |
| print("Vector store hasil rebuild berhasil diunggah ke Supabase!") | |
| else: | |
| print("Gagal mengunggah vector store hasil rebuild ke Supabase.") | |
| else: | |
| print("Tidak ada dokumen untuk membangun ulang vector store.") | |
| vector_store = None | |
| else: | |
| vector_store = st.session_state.get("vector_store") or vs.get_cached_vector_store() | |
| return vector_store | |