diff --git a/semantic_router/index/base.py b/semantic_router/index/base.py index 24fd337b237d7939898b6088ffd3d5159c9d0f34..4893987a78335f2dda3039c9929b2c8503d108d7 100644 --- a/semantic_router/index/base.py +++ b/semantic_router/index/base.py @@ -47,6 +47,9 @@ class BaseIndex(BaseModel): schema and additional metadata. :rtype: List[Tuple] """ + if self.index is None: + logger.warning("Index is None, could not retrieve utterances.") + return [] _, metadata = self._get_all(include_metadata=True) route_tuples = parse_route_info(metadata=metadata) return [Utterance.from_tuple(x) for x in route_tuples] @@ -212,6 +215,9 @@ class BaseIndex(BaseModel): schema and additional metadata. :rtype: List[Tuple] """ + if self.index is None: + logger.warning("Index is None, could not retrieve route info.") + return [] _, metadata = await self._async_get_all(include_metadata=True) route_info = parse_route_info(metadata=metadata) return route_info # type: ignore diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py index 5b2cdcd811676d67edf244b44e9066c912e5b5ec..11e33885595a6f050d300b161e0d3049ac2e1d3f 100644 --- a/semantic_router/index/pinecone.py +++ b/semantic_router/index/pinecone.py @@ -492,6 +492,7 @@ class PineconeIndex(BaseIndex): def delete_index(self): self.client.delete_index(self.index_name) + self.index = None # __ASYNC CLIENT METHODS__ async def _async_query( diff --git a/tests/unit/test_layer.py b/tests/unit/test_layer.py index 1cb35be8ee7804efac44982d395b34068439af80..67102f7c213ea78e5258440603ea692f86e2e125 100644 --- a/tests/unit/test_layer.py +++ b/tests/unit/test_layer.py @@ -232,24 +232,26 @@ class TestIndexEncoders: route_layer_none = RouteLayer(encoder=None) assert route_layer_none.score_threshold == openai_encoder.score_threshold + +@pytest.mark.parametrize("index_cls", get_test_indexes()) +class TestRouteLayer: def test_initialization_dynamic_route( - self, encoder_cls, dynamic_routes, index_cls + self, dynamic_routes, index_cls ): index = init_index(index_cls) - encoder = encoder_cls() route_layer = RouteLayer( - encoder=encoder, routes=dynamic_routes, index=index, - auto_sync="local" if index_cls is PineconeIndex else None, + encoder=openai_encoder, routes=dynamic_routes, index=index, + auto_sync="local", ) - assert route_layer.score_threshold == encoder.score_threshold - + assert route_layer.score_threshold == openai_encoder.score_threshold -@pytest.mark.parametrize("index_cls", get_test_indexes()) -class TestRouteLayer: def test_delete_index(self, openai_encoder, routes, index_cls): # TODO merge .delete_index() and .delete_all() and get working index = init_index(index_cls) - route_layer = RouteLayer(encoder=openai_encoder, routes=routes, index=index) + route_layer = RouteLayer( + encoder=openai_encoder, routes=routes, index=index, + auto_sync="local", + ) if index_cls is PineconeIndex: time.sleep(PINECONE_SLEEP) # allow for index to be populated route_layer.index.delete_index()