Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ╔══════════════════════════════════════════════════════════════╗
- # ║ Naive RAG — শুধু Dense Vector Search (baseline) ║
- # ╚══════════════════════════════════════════════════════════════╝
- def retrieve_naive(question: str, subject: str = "", class_no: str = "",
- k: int = TOP_K, use_metadata_filter: bool = True) -> dict:
- """
- Naive RAG: শুধু BGE-M3 dense search।
- ❌ Multi-query ❌ BM25 ❌ RRF ❌ Reranker
- ✅ শুধু একটা embedding search
- """
- norm_subj = normalize_subject(subject)
- # ── Metadata filter (hybrid-এর মতোই) ─────────────────────
- where_filter = None
- if use_metadata_filter and norm_subj:
- where_filter = {"subject": {"$eq": norm_subj}}
- if class_no:
- where_filter = {
- "$and": [
- {"subject": {"$eq": norm_subj}},
- {"class_no": {"$eq": str(class_no)}},
- ]
- }
- # ── একটাই dense query (multi-query নেই) ──────────────────
- query_prefix = "Represent this sentence for searching relevant passages: "
- q_emb = embed_model.encode(
- [query_prefix + question], normalize_embeddings=True
- ).tolist()
- query_kwargs = {
- "query_embeddings": q_emb,
- "n_results": k, # সরাসরি top-k (candidate pool নেই)
- "include": ["documents", "metadatas", "distances"],
- }
- if where_filter:
- query_kwargs["where"] = where_filter
- try:
- hits = collection.query(**query_kwargs)
- except:
- query_kwargs.pop("where", None)
- hits = collection.query(**query_kwargs)
- docs = hits["documents"][0]
- metas = hits["metadatas"][0]
- if not docs:
- return {"context": "", "sources": [], "num_chunks": 0, "texts": []}
- # ── Context build (char limit) ───────────────────────────
- final_docs, final_metas, total = [], [], 0
- for doc, meta in zip(docs, metas):
- if total + len(doc) > CONTEXT_MAX_CHARS:
- remaining = CONTEXT_MAX_CHARS - total
- if remaining > 200:
- final_docs.append(doc[:remaining] + "...")
- final_metas.append(meta)
- break
- final_docs.append(doc)
- final_metas.append(meta)
- total += len(doc)
- context = "\n\n---\n\n".join(final_docs)
- return {
- "context": context,
- "sources": final_metas,
- "num_chunks": len(final_docs),
- "texts": final_docs, # hit rate calculation-এর জন্য
- }
- print("✅ retrieve_naive() ready — dense search only")
Add Comment
Please, Sign In to add comment