Spaces:
Sleeping
Sleeping
File size: 3,245 Bytes
daa81fb a638271 daa81fb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
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
|