mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-04 10:10:36 +00:00
fix: improve KVStore initialization checks in vector store adapters
This commit is contained in:
parent
8dfbe16041
commit
1f35219bb2
3 changed files with 38 additions and 2 deletions
|
|
@ -223,7 +223,8 @@ class FaissVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProtoco
|
||||||
return HealthResponse(status=HealthStatus.ERROR, message=f"Health check failed: {str(e)}")
|
return HealthResponse(status=HealthStatus.ERROR, message=f"Health check failed: {str(e)}")
|
||||||
|
|
||||||
async def register_vector_store(self, vector_store: VectorStore) -> None:
|
async def register_vector_store(self, vector_store: VectorStore) -> None:
|
||||||
assert self.kvstore is not None
|
if self.kvstore is None:
|
||||||
|
raise RuntimeError("KVStore not initialized. Call initialize() before registering vector stores.")
|
||||||
|
|
||||||
key = f"{VECTOR_DBS_PREFIX}{vector_store.identifier}"
|
key = f"{VECTOR_DBS_PREFIX}{vector_store.identifier}"
|
||||||
await self.kvstore.set(key=key, value=vector_store.model_dump_json())
|
await self.kvstore.set(key=key, value=vector_store.model_dump_json())
|
||||||
|
|
@ -239,7 +240,8 @@ class FaissVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProtoco
|
||||||
return [i.vector_store for i in self.cache.values()]
|
return [i.vector_store for i in self.cache.values()]
|
||||||
|
|
||||||
async def unregister_vector_store(self, vector_store_id: str) -> None:
|
async def unregister_vector_store(self, vector_store_id: str) -> None:
|
||||||
assert self.kvstore is not None
|
if self.kvstore is None:
|
||||||
|
raise RuntimeError("KVStore not initialized. Call initialize() before unregistering vector stores.")
|
||||||
|
|
||||||
if vector_store_id not in self.cache:
|
if vector_store_id not in self.cache:
|
||||||
return
|
return
|
||||||
|
|
@ -248,6 +250,27 @@ class FaissVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProtoco
|
||||||
del self.cache[vector_store_id]
|
del self.cache[vector_store_id]
|
||||||
await self.kvstore.delete(f"{VECTOR_DBS_PREFIX}{vector_store_id}")
|
await self.kvstore.delete(f"{VECTOR_DBS_PREFIX}{vector_store_id}")
|
||||||
|
|
||||||
|
async def _get_and_cache_vector_store_index(self, vector_store_id: str) -> VectorStoreWithIndex | None:
|
||||||
|
if vector_store_id in self.cache:
|
||||||
|
return self.cache[vector_store_id]
|
||||||
|
|
||||||
|
if self.kvstore is None:
|
||||||
|
raise RuntimeError("KVStore not initialized. Call initialize() before using vector stores.")
|
||||||
|
|
||||||
|
key = f"{VECTOR_DBS_PREFIX}{vector_store_id}"
|
||||||
|
vector_store_data = await self.kvstore.get(key)
|
||||||
|
if not vector_store_data:
|
||||||
|
raise VectorStoreNotFoundError(vector_store_id)
|
||||||
|
|
||||||
|
vector_store = VectorStore.model_validate_json(vector_store_data)
|
||||||
|
index = VectorStoreWithIndex(
|
||||||
|
vector_store=vector_store,
|
||||||
|
index=await FaissIndex.create(vector_store.embedding_dimension, self.kvstore, vector_store.identifier),
|
||||||
|
inference_api=self.inference_api,
|
||||||
|
)
|
||||||
|
self.cache[vector_store_id] = index
|
||||||
|
return index
|
||||||
|
|
||||||
async def insert_chunks(self, vector_store_id: str, chunks: list[Chunk], ttl_seconds: int | None = None) -> None:
|
async def insert_chunks(self, vector_store_id: str, chunks: list[Chunk], ttl_seconds: int | None = None) -> None:
|
||||||
index = self.cache.get(vector_store_id)
|
index = self.cache.get(vector_store_id)
|
||||||
if index is None:
|
if index is None:
|
||||||
|
|
|
||||||
|
|
@ -412,6 +412,14 @@ class SQLiteVecVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresPro
|
||||||
return [v.vector_store for v in self.cache.values()]
|
return [v.vector_store for v in self.cache.values()]
|
||||||
|
|
||||||
async def register_vector_store(self, vector_store: VectorStore) -> None:
|
async def register_vector_store(self, vector_store: VectorStore) -> None:
|
||||||
|
if self.kvstore is None:
|
||||||
|
raise RuntimeError("KVStore not initialized. Call initialize() before registering vector stores.")
|
||||||
|
|
||||||
|
# Save to kvstore for persistence
|
||||||
|
key = f"{VECTOR_DBS_PREFIX}{vector_store.identifier}"
|
||||||
|
await self.kvstore.set(key=key, value=vector_store.model_dump_json())
|
||||||
|
|
||||||
|
# Create and cache the index
|
||||||
index = await SQLiteVecIndex.create(
|
index = await SQLiteVecIndex.create(
|
||||||
vector_store.embedding_dimension, self.config.db_path, vector_store.identifier
|
vector_store.embedding_dimension, self.config.db_path, vector_store.identifier
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -395,6 +395,11 @@ class PGVectorVectorIOAdapter(OpenAIVectorStoreMixin, VectorIO, VectorStoresProt
|
||||||
# Persist vector DB metadata in the KV store
|
# Persist vector DB metadata in the KV store
|
||||||
if self.kvstore is None:
|
if self.kvstore is None:
|
||||||
raise RuntimeError("KVStore not initialized. Call initialize() before registering vector stores.")
|
raise RuntimeError("KVStore not initialized. Call initialize() before registering vector stores.")
|
||||||
|
|
||||||
|
# Save to kvstore for persistence
|
||||||
|
key = f"{VECTOR_DBS_PREFIX}{vector_store.identifier}"
|
||||||
|
await self.kvstore.set(key=key, value=vector_store.model_dump_json())
|
||||||
|
|
||||||
# Upsert model metadata in Postgres
|
# Upsert model metadata in Postgres
|
||||||
upsert_models(self.conn, [(vector_store.identifier, vector_store)])
|
upsert_models(self.conn, [(vector_store.identifier, vector_store)])
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue