File size: 1,082 Bytes
0393f6f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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