Spaces:
Sleeping
Sleeping
| # rag_utils.py | |
| from sentence_transformers import SentenceTransformer | |
| from transformers import pipeline | |
| import numpy as np, faiss | |
| class RAG: | |
| def __init__(self): | |
| self.emb = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2") | |
| self.summarizer = pipeline("summarization", model="facebook/bart-large-cnn") | |
| def _embed(self, texts): return self.emb.encode(texts, normalize_embeddings=True) | |
| def summarize(self, docs, k=5): | |
| texts = [d["content"] for d in docs] | |
| embs = self._embed(texts) | |
| index = faiss.IndexFlatIP(embs.shape[1]); index.add(embs.astype("float32")) | |
| # Use the average vector of titles as a cheap query | |
| q = self._embed([" ".join([d["title"] for d in docs[:k]])])[0].astype("float32").reshape(1,-1) | |
| _, idx = index.search(q, min(k, len(docs))) | |
| picked = [docs[i] for i in idx[0]] | |
| context = "\n\n".join(p["content"][:2000] for p in picked)[:6000] | |
| out = self.summarizer(context, max_length=220, min_length=120, do_sample=False)[0]["summary_text"] | |
| return out, picked | |