Spaces:
Sleeping
Sleeping
Commit
Β·
54174be
1
Parent(s):
ce293a6
load vectorstore once
Browse files
src/legisqa_local/app.py
CHANGED
|
@@ -3,6 +3,7 @@
|
|
| 3 |
import logging
|
| 4 |
import streamlit as st
|
| 5 |
from legisqa_local.config.settings import STREAMLIT_CONFIG, setup_environment, setup_chromadb
|
|
|
|
| 6 |
from legisqa_local.components.sidebar import render_sidebar
|
| 7 |
from legisqa_local.tabs.rag_tab import RAGTab
|
| 8 |
from legisqa_local.tabs.rag_sbs_tab import RAGSideBySideTab
|
|
@@ -35,6 +36,11 @@ def main():
|
|
| 35 |
setup_chromadb()
|
| 36 |
logger.info("β
ChromaDB setup complete")
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
# Main content
|
| 39 |
st.title(":classical_building: LegisQA :classical_building:")
|
| 40 |
st.header("Query Congressional Bills")
|
|
|
|
| 3 |
import logging
|
| 4 |
import streamlit as st
|
| 5 |
from legisqa_local.config.settings import STREAMLIT_CONFIG, setup_environment, setup_chromadb
|
| 6 |
+
from legisqa_local.core.vectorstore import initialize_vectorstore
|
| 7 |
from legisqa_local.components.sidebar import render_sidebar
|
| 8 |
from legisqa_local.tabs.rag_tab import RAGTab
|
| 9 |
from legisqa_local.tabs.rag_sbs_tab import RAGSideBySideTab
|
|
|
|
| 36 |
setup_chromadb()
|
| 37 |
logger.info("β
ChromaDB setup complete")
|
| 38 |
|
| 39 |
+
# Initialize vectorstore (load once and cache)
|
| 40 |
+
logger.info("π Initializing vectorstore...")
|
| 41 |
+
initialize_vectorstore()
|
| 42 |
+
logger.info("β
Vectorstore initialization complete")
|
| 43 |
+
|
| 44 |
# Main content
|
| 45 |
st.title(":classical_building: LegisQA :classical_building:")
|
| 46 |
st.header("Query Congressional Bills")
|
src/legisqa_local/core/vectorstore.py
CHANGED
|
@@ -1,12 +1,22 @@
|
|
| 1 |
"""Vector store operations for LegisQA"""
|
| 2 |
|
|
|
|
|
|
|
| 3 |
from langchain_chroma import Chroma
|
| 4 |
from legisqa_local.core.embeddings import load_embeddings
|
| 5 |
from legisqa_local.config.settings import get_chroma_config
|
| 6 |
|
|
|
|
|
|
|
| 7 |
|
| 8 |
def load_vectorstore():
|
| 9 |
-
"""Load and return the ChromaDB vectorstore"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
config = get_chroma_config()
|
| 11 |
emb_fn = load_embeddings()
|
| 12 |
|
|
@@ -15,9 +25,34 @@ def load_vectorstore():
|
|
| 15 |
collection_name=config["collection_name"],
|
| 16 |
embedding_function=emb_fn,
|
| 17 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
return vectorstore
|
| 19 |
|
| 20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
def get_vectorstore_filter(ret_config: dict) -> dict:
|
| 22 |
"""Get filter dict for ChromaDB queries"""
|
| 23 |
where_clause = {}
|
|
|
|
| 1 |
"""Vector store operations for LegisQA"""
|
| 2 |
|
| 3 |
+
import logging
|
| 4 |
+
import streamlit as st
|
| 5 |
from langchain_chroma import Chroma
|
| 6 |
from legisqa_local.core.embeddings import load_embeddings
|
| 7 |
from legisqa_local.config.settings import get_chroma_config
|
| 8 |
|
| 9 |
+
logger = logging.getLogger(__name__)
|
| 10 |
+
|
| 11 |
|
| 12 |
def load_vectorstore():
|
| 13 |
+
"""Load and return the ChromaDB vectorstore (cached in session state)"""
|
| 14 |
+
# Check if vectorstore is already loaded in session state
|
| 15 |
+
if hasattr(st, 'session_state') and hasattr(st.session_state, 'vectorstore'):
|
| 16 |
+
logger.debug("Using cached vectorstore from session state")
|
| 17 |
+
return st.session_state.vectorstore
|
| 18 |
+
|
| 19 |
+
logger.info("π Loading ChromaDB vectorstore...")
|
| 20 |
config = get_chroma_config()
|
| 21 |
emb_fn = load_embeddings()
|
| 22 |
|
|
|
|
| 25 |
collection_name=config["collection_name"],
|
| 26 |
embedding_function=emb_fn,
|
| 27 |
)
|
| 28 |
+
|
| 29 |
+
# Cache in session state for future use
|
| 30 |
+
if hasattr(st, 'session_state'):
|
| 31 |
+
st.session_state.vectorstore = vectorstore
|
| 32 |
+
logger.info("β
Vectorstore loaded and cached in session state")
|
| 33 |
+
else:
|
| 34 |
+
logger.info("β
Vectorstore loaded (session state not available)")
|
| 35 |
+
|
| 36 |
return vectorstore
|
| 37 |
|
| 38 |
|
| 39 |
+
def initialize_vectorstore():
|
| 40 |
+
"""Initialize the vectorstore at application startup"""
|
| 41 |
+
logger.info("π Initializing vectorstore at startup...")
|
| 42 |
+
vectorstore = load_vectorstore()
|
| 43 |
+
|
| 44 |
+
# Test the vectorstore with a simple query to ensure it's working
|
| 45 |
+
try:
|
| 46 |
+
# Get collection info for verification
|
| 47 |
+
collection = vectorstore._collection
|
| 48 |
+
count = collection.count()
|
| 49 |
+
logger.info(f"β
Vectorstore initialized successfully - {count} documents available")
|
| 50 |
+
return vectorstore
|
| 51 |
+
except Exception as e:
|
| 52 |
+
logger.error(f"β Error testing vectorstore: {e}")
|
| 53 |
+
raise
|
| 54 |
+
|
| 55 |
+
|
| 56 |
def get_vectorstore_filter(ret_config: dict) -> dict:
|
| 57 |
"""Get filter dict for ChromaDB queries"""
|
| 58 |
where_clause = {}
|