Spaces:
Sleeping
Sleeping
| import voyageai | |
| from typing import List | |
| import logging | |
| import os | |
| from pinecone import Pinecone | |
| pinecone_api_key = os.getenv("PINECONE_API_KEY") | |
| class SearchEngine: | |
| """Handles similarity search""" | |
| def __init__(self, voyage_client: voyageai.Client): | |
| self.vo = voyage_client | |
| self.logger = logging.getLogger(__name__) | |
| self.pc = Pinecone(api_key=pinecone_api_key) | |
| self.index = self.pc.Index("nhs-conditions") | |
| def similarity_search(self, query_text: str, namespace: str, top_k: int = 5) -> List[dict]: | |
| """Perform similarity search using Pinecone""" | |
| try: | |
| # Embed the query using the same model | |
| query_embedding = self.vo.contextualized_embed( | |
| inputs=[[query_text]], | |
| model="voyage-context-3", | |
| input_type="query", | |
| output_dimension=2048 | |
| ).results[0].embeddings[0] | |
| # Search Pinecone | |
| results = self.index.query( | |
| vector=query_embedding, | |
| top_k=top_k, | |
| namespace=namespace, | |
| include_metadata=True | |
| ) | |
| matches = results['matches'] | |
| self.logger.info(f"Pinecone search found {len(matches)} results") | |
| return matches | |
| except Exception as e: | |
| self.logger.error(f"Error in Pinecone similarity search: {e}") | |
| return [] | |