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 | |