Smart-Notes-backend / app /core /rag_service.py
pluto90's picture
Update app/core/rag_service.py
bc03939 verified
# app/core/rag_service.py
from app.core.embedding_engine import embed_query, COLLECTION_NAME
from qdrant_client.http.models import Filter, FieldCondition, MatchValue
from qdrant_client import QdrantClient
from app.core.config import QDRANT_URL, QDRANT_API_KEY
qdrant_client = QdrantClient(
url=QDRANT_URL,
api_key=QDRANT_API_KEY,
check_compatibility=False
)
def get_rag_context(query, doc_id, top_k=5):
"""Retrieve relevant chunks with BGE embeddings."""
query_vector = embed_query(query)
results = qdrant_client.query_points(
collection_name=COLLECTION_NAME,
query=query_vector,
limit=top_k,
score_threshold=0.25, # ✅ LOWERED from 0.35 — better recall
query_filter=Filter(
must=[FieldCondition(key="doc_id", match=MatchValue(value=doc_id))]
)
)
points = results.points
if not points:
return "", [], []
context = "\n\n---\n\n".join([p.payload["text"] for p in points])
sources = [p.payload.get("chunk_id", i) for i, p in enumerate(points)]
scores = [p.score for p in points]
return context, sources, scores