File size: 1,382 Bytes
381b00d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from transformers import pipeline
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np

# Dummy knowledge base - replace with real embeddings in production
knowledge_base = [
    {"text": "Aspirin is used to reduce fever and relieve mild to moderate pain.", "embedding": None},
    {"text": "Hypertension is a condition in which the blood pressure in the arteries is elevated.", "embedding": None},
    {"text": "Diabetes is a chronic condition that affects how the body processes blood sugar.", "embedding": None},
]

def load_rag_pipeline():
    embedder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
    for entry in knowledge_base:
        entry["embedding"] = embedder.encode(entry["text"])
    index = faiss.IndexFlatL2(len(knowledge_base[0]["embedding"]))
    index.add(np.array([entry["embedding"] for entry in knowledge_base]))
    return {"embedder": embedder, "index": index, "texts": [entry["text"] for entry in knowledge_base]}

def ask_question(pipe, query):
    query_vec = pipe["embedder"].encode(query)
    D, I = pipe["index"].search(np.array([query_vec]), k=1)
    context = pipe["texts"][I[0][0]]
    generator = pipeline("text2text-generation", model="facebook/bart-large")
    answer = generator(f"question: {query} context: {context}", max_length=100, do_sample=False)
    return answer[0]['generated_text']