Babu Pallam
Add semantic retriever for vector search
33e1f7d
Raw
History Blame Contribute Delete
1.55 kB
# ============================================================
# FILE: src/retriever.py
# ============================================================
# PURPOSE:
# Combine embedding generation and vector search.
#
# RAG retrieval flow:
#
# user question
# -> query embedding
# -> vector database search
# -> top matching chunks
#
# AI ENGINEER PRODUCTION TIP:
# Always inspect retrieved chunks when debugging RAG quality.
# If retrieval is wrong, the LLM cannot produce a grounded answer.
# ============================================================
from typing import Any, Dict, List
from src.embeddings import EmbeddingModel
from src.vector_store import ChromaVectorStore
class Retriever:
"""
Retrieves relevant chunks for a user question.
"""
def __init__(
self,
embedding_model: EmbeddingModel,
vector_store: ChromaVectorStore,
) -> None:
self.embedding_model = embedding_model
self.vector_store = vector_store
def retrieve(
self,
question: str,
top_k: int,
) -> List[Dict[str, Any]]:
"""
Retrieve top-k relevant chunks.
top_k:
- number of chunks to return
- common values: 3, 4, 5, 8
"""
question = question.strip()
if not question:
raise ValueError("Question cannot be empty.")
query_embedding = self.embedding_model.embed_query(question)
return self.vector_store.query(
query_embedding=query_embedding,
top_k=top_k,
)