Spaces:
Sleeping
Sleeping
File size: 3,280 Bytes
0bde17f 35e3544 7593537 35e3544 ad4f7fb 6153edf 7593537 25005d0 6153edf 35e3544 ad4f7fb 35e3544 99102a9 35e3544 664007d 35e3544 6153edf 99102a9 25005d0 e8586c9 c555455 25005d0 c555455 35e3544 664007d 35e3544 ad65e68 25005d0 e8586c9 ad4f7fb ad65e68 e8586c9 ad65e68 99102a9 e8586c9 99102a9 | 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import streamlit as st
import pandas as pd
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
from langchain_community.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.schema import Document
from sentence_transformers import SentenceTransformer
from langchain_community.document_loaders import DirectoryLoader, TextLoader
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
embedding_model_name = "sentence-transformers/all-MiniLM-L6-v2"
docs = []
db = None
extracted_text = None
# ------------------------------
# Load Model for pretraining
# ------------------------------
@st.cache_resource
def load_model():
# model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
return pipeline("text-generation", model=model, tokenizer=tokenizer)
@st.cache_resource
def extract_text():
uploaded_data_path = "./ramayan"
loader = DirectoryLoader(
path=uploaded_data_path,
glob="**/*.txt",
loader_cls=TextLoader,
recursive=True
)
documents = loader.load()
return "\n".join([doc.page_content for doc in documents])
def build_faiss(_docs):
embeddings = HuggingFaceEmbeddings(model_name=embedding_model_name)
return FAISS.from_documents(_docs, embeddings)
with st.spinner("π Loading Model..."):
generator = load_model()
with st.spinner("π Loading Knowldge Base..."):
extracted_text = extract_text()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = [Document(page_content=chunk) for chunk in splitter.split_text(extracted_text)]
db = build_faiss(docs)
st.success("β
Knowledge Base ready! From :- Ramayan")
# ------------------------------
# Title
# ------------------------------
st.title("π RAG For Ramayan")
st.markdown("This app uses a local LLM model to answer questions about Ramayan using RAG (Retrieval Augmented Generation).")
with st.form(key='my_form'):
query = st.text_input("π¬ Ask a question about Ramayan(Required)", placeholder="Rishyasring's Departure")
max_new_tokens_model = st.slider("Max New Tokens (Optional):", min_value=50, max_value=500, value=150, step=25)
temperature_model = st.slider("Temperature (Optional):", min_value=0.0, max_value=0.9, value=0.5, step=0.1)
submit_button = st.form_submit_button("Submit")
if submit_button:
if query and db and extracted_text and len(docs) > 0:
retriever = db.as_retriever(search_kwargs={"k": 3})
retrieved_docs = retriever.get_relevant_documents(query)
context = "\n".join([doc.page_content for doc in retrieved_docs])
with st.spinner("π€ Generating answer..."):
result = generator(
f"Context:\n{context}\n\nQuestion: {query}\nAnswer:",
max_new_tokens=max_new_tokens_model,
temperature=temperature_model,
top_p=0.9
)
generated = result[0]["generated_text"]
answer_only = generated.split("Answer:")[-1].strip()
st.write("π Answer:", answer_only) |