diff --git a/semantic_router/index/pinecone.py b/semantic_router/index/pinecone.py index dc86004ad71fd33f8171ffe2a7ddc95bad3d7421..27038824dc367dbcb1885013e666d02baf6bce4c 100644 --- a/semantic_router/index/pinecone.py +++ b/semantic_router/index/pinecone.py @@ -332,23 +332,15 @@ class PineconeIndex(BaseIndex): def _get_routes_with_ids(self, route_name: str): clean_route = clean_route_name(route_name) - ids, _ = self._get_all(prefix=f"{clean_route}#") + ids, metadata = self._get_all(prefix=f"{clean_route}#", include_metadata=True) route_tuples = [] - for id in ids: - res_meta = ( - self.index.fetch(ids=[id], namespace=self.namespace) - if self.index - else {} - ) - route_tuples.extend( - [ - { - "id": id, - "route": x["metadata"]["sr_route"], - "utterance": x["metadata"]["sr_utterance"], - } - for x in res_meta["vectors"].values() - ] + for id, data in zip(ids, metadata): + route_tuples.append( + { + "id": id, + "route": data["sr_route"], + "utterance": data["sr_utterance"], + } ) return route_tuples @@ -391,9 +383,14 @@ class PineconeIndex(BaseIndex): # if we need metadata, we fetch it if include_metadata: - res_meta = self.index.fetch(ids=vector_ids, namespace=self.namespace) + for id in vector_ids: + res_meta = ( + self.index.fetch(ids=[id], namespace=self.namespace) + if self.index + else {} + ) + metadata.extend([x["metadata"] for x in res_meta["vectors"].values()]) # extract metadata only - metadata.extend([x["metadata"] for x in res_meta["vectors"].values()]) # Check if there's a next page token; if not, break the loop next_page_token = response_data.get("pagination", {}).get("next")