Spaces:
Running
Running
| from typing import List,Dict,Any,Tuple | |
| from .EmbeddingManager import EmbeddingManager | |
| from .VectorStore import VectorStore | |
| import numpy as np | |
| class RAGRetriever: | |
| def __init__(self,vector_store: VectorStore, embedding_manager:EmbeddingManager): | |
| self.vector_store= vector_store | |
| self.embedding_manager= embedding_manager | |
| def retrieve(self,query: str, top_k: int=10, score_threshold: float= 0.5) -> List[Dict[str,Any]]: | |
| print(f"retrieving documents for query: {query}") | |
| print(f"Top_k: {top_k} score_threshold: {score_threshold}") | |
| query_embedding= self.embedding_manager.generate_embeddings([query])[0] | |
| # 1D array representing just 1 query | |
| # search in vector store | |
| try: | |
| results= self.vector_store.collection.query( | |
| query_embeddings= [query_embedding.tolist()], | |
| # this expects batch of queries | |
| n_results= top_k | |
| ) | |
| retrieved_docs= [] | |
| if results['documents'] and results['documents'][0]: | |
| documents= results['documents'][0] | |
| metadatas= results['metadatas'][0] | |
| distances= results['distances'][0] | |
| ids= results['ids'][0] | |
| metadatas= results['metadatas'][0] | |
| for i, (doc_id,document,metadata,distance) in enumerate(zip(ids,documents,metadatas,distances)): | |
| # convert distance to similarity score (chromadb uses cosine distance) | |
| print(distance) | |
| similarity_score= float(1.0-distance) | |
| source_file = metadata.get('source', metadata.get('source_file', 'Unknown Source')) | |
| print(source_file) | |
| if similarity_score>=score_threshold: | |
| retrieved_docs.append({ | |
| 'id': doc_id, | |
| 'content': document, | |
| 'metadata': metadata, | |
| 'similarity_score': similarity_score, | |
| 'distance': distance, | |
| 'rank': i+1 | |
| }) | |
| print(f"Retrieved {len(retrieved_docs)} document after filtering") | |
| else: | |
| print("No documents found") | |
| return retrieved_docs | |
| except Exception as e: | |
| print(f"erorr in retrieving documents for query: {query}") | |
| return [] | |