Wikipedia_RAG / app.py
Kalyani8's picture
Update app.py
6535a83 verified
from datasets import load_dataset
import numpy as np
import gradio as gr
import chromadb
from transformers import AutoModel, AutoTokenizer, pipeline
import torch
import chromadb
import os
import requests
API_URL = "https://api-inference.huggingface.co/models/meta-llama/Llama-2-7b-hf"
headers = {"Authorization": f"Bearer {os.getenv('HF_Token')}"}
def query_llama(prompt):
payload = {"inputs": prompt}
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
prompt = "Explain machine learning in simple terms."
response = query_llama(prompt)
print(response)
'''
# Initialize ChromaDB client
chroma_client = chromadb.PersistentClient(path="./chroma_db") # Stores data persistently
collection = chroma_client.get_or_create_collection(name="wikipedia_docs")
# Load the BAAI embedding model
model_name = "BAAI/bge-base-en"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
def get_embedding(text):
"""Generate embeddings using BAAI/bge-base-en."""
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
outputs = model(**inputs)
return outputs.last_hidden_state[:, 0, :].numpy().tolist() # Take CLS token embedding
# Load LLaMA Model (Meta LLaMA 2)
#llama_pipe = pipeline("text-generation", model=AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-chat-hf"))
# Load a small subset (10,000 rows)
#dataset = load_dataset("wiki40b", "en", split="train[:1000]")
# Extract only text
#docs = [d["text"] for d in dataset]
docs = ["Machine learning is a field of AI...", "Neural networks are inspired by the brain..."]
#print("Loaded dataset with", len(docs), "documents.")
# ✅ Step 2: Embed and Store in ChromaDB
for i, doc in enumerate(docs):
embedding = get_embedding(doc)
collection.add(ids=[str(i)], embeddings=[embedding], documents=[doc])
print("Stored embeddings in ChromaDB!")
# Store embeddings in ChromaDB
#for i, (doc, embedding) in enumerate(zip(docs, embeddings)):
# collection.add(
# ids=[str(i)], # Unique ID for each doc
# embeddings=[embedding.tolist()], # Convert numpy array to list
# documents=[doc]
# )
# Search function using ChromaDB
#def search_wikipedia(query, top_k=3):
# query_embedding = embed_model.encode([query]).tolist()
# results = collection.query(
# query_embeddings=query_embedding,
# n_results=top_k
#return "\n\n".join(results["documents"][0]) # Return top results
# return results["documents"][0] # Return top results
# Function to search ChromaDB & generate response
def query_llama(user_input):
query_embedding = get_embedding(user_input)
results = collection.query(query_embeddings=[query_embedding], n_results=3)
if not results["documents"]:
return "No relevant documents found."
context = " ".join(results["documents"][0])
prompt = f"Using this context, answer the question: {user_input}\nContext: {context}"
response = llama_pipe(prompt, max_length=200)
return f"**LLaMA Response:** {response[0]['generated_text']}\n\n**Retrieved Docs:** {context}"
# Gradio Interface
iface = gr.Interface(
fn=query_llama,
inputs="text",
outputs="text",
title="Wikipedia Search RAG",
description="Enter a query and retrieve relevant Wikipedia passages."
)
iface.launch()
'''