Ahsan-Asim commited on
Commit
6869969
Β·
1 Parent(s): 52bc6c6

Move binary files to Git LFS properly

Browse files
Files changed (5) hide show
  1. .gitattributes +1 -0
  2. app.py +31 -59
  3. embeddings_file.npy +3 -0
  4. faiss_index_file.index +3 -0
  5. texts.pkl +3 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ *.index filter=lfs diff=lfs merge=lfs -text
app.py CHANGED
@@ -83,65 +83,31 @@ import faiss
83
  import pickle
84
  import numpy as np
85
  import torch
86
- import gdown
87
- from transformers import T5Tokenizer, T5ForConditionalGeneration
88
- # from sentence_transformers import SentenceTransformer
89
-
90
- # Function to download a full folder from Google Drive
91
- def download_folder_from_google_drive(folder_url, output_path):
92
- if not os.path.exists(output_path):
93
- gdown.download_folder(url=folder_url, output=output_path, quiet=False, use_cookies=False)
94
-
95
- # Download individual files
96
- def download_file_from_google_drive(file_id, destination):
97
- if not os.path.exists(destination):
98
- url = f"https://drive.google.com/uc?id={file_id}"
99
- gdown.download(url, destination, quiet=False)
100
-
101
- # Setup models and files
102
- @st.cache_resource
103
- def setup_files():
104
- os.makedirs("models/embedding_model", exist_ok=True)
105
- os.makedirs("models/generator_model", exist_ok=True)
106
- os.makedirs("models/files", exist_ok=True)
107
-
108
- # Download embedding model (folder)
109
- download_folder_from_google_drive(
110
- "https://drive.google.com/drive/folders/1GzPk2ehr7rzOr65Am1Hg3A87FOTNHLAM?usp=sharing",
111
- "models/embedding_model"
112
- )
113
-
114
- # Download generator model (folder)
115
- download_folder_from_google_drive(
116
- "https://drive.google.com/drive/folders/1338KWiBE-6sWsTO2iH7Pgu8eRI7EE7Vr?usp=sharing",
117
- "models/generator_model"
118
- )
119
 
120
- # Download FAISS index, texts.pkl, embeddings.npy
121
- download_file_from_google_drive("11J_VI1buTgnvhoP3z2HM6X5aPzbBO2ed", "models/files/faiss_index_file.index")
122
- download_file_from_google_drive("1RTEwp8xDgxLnRUiy7ClTskFuTu0GtWBT", "models/files/texts.pkl")
123
- download_file_from_google_drive("1N54imsqJIJGeqM3buiRzp1ivK_BtC7rR", "models/files/embeddings.npy")
124
 
125
- # Paths
126
- EMBEDDING_MODEL_PATH = "models/embedding_model"
127
- GENERATOR_MODEL_PATH = "models/generator_model"
128
- FAISS_INDEX_PATH = "models/files/faiss_index_file.index"
129
- TEXTS_PATH = "models/files/texts.pkl"
130
- EMBEDDINGS_PATH = "models/files/embeddings.npy"
131
 
132
- # Load LLM model (Generator model)
133
  @st.cache_resource
134
  def load_llm():
135
- tokenizer = T5Tokenizer.from_pretrained(GENERATOR_MODEL_PATH)
136
- model = T5ForConditionalGeneration.from_pretrained(GENERATOR_MODEL_PATH)
137
  return tokenizer, model
138
 
139
- # Load embedding model
140
  @st.cache_resource
141
  def load_embedding_model():
142
- return SentenceTransformer(EMBEDDING_MODEL_PATH)
 
 
143
 
144
- # Load FAISS index and embeddings
145
  @st.cache_resource
146
  def load_faiss():
147
  faiss_index = faiss.read_index(FAISS_INDEX_PATH)
@@ -150,17 +116,24 @@ def load_faiss():
150
  embeddings = np.load(EMBEDDINGS_PATH, allow_pickle=True)
151
  return faiss_index, data, embeddings
152
 
 
 
 
 
 
 
 
153
  # Search top-k contexts
154
- def search(query, embed_model, index, data, k=5):
155
- query_embedding = embed_model.encode([query]).astype('float32')
156
  _, I = index.search(query_embedding, k)
157
  results = [data[i] for i in I[0] if i != -1]
158
  return results
159
 
160
- # Generate response
161
  def generate_response(context, query, tokenizer, model):
162
  input_text = f"Context: {context}\n\nQuestion: {query}\n\nAnswer:"
163
- inputs = tokenizer.encode(input_text, return_tensors="pt")
164
  outputs = model.generate(inputs, max_length=512, do_sample=True, temperature=0.7)
165
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
166
  return response
@@ -177,19 +150,18 @@ def main():
177
  """
178
  )
179
 
180
- # Download + Load everything
181
- setup_files()
182
- tokenizer, llm_model = load_llm()
183
- embed_model = load_embedding_model()
184
  faiss_index, data, embeddings = load_faiss()
185
 
186
  query = st.text_input("πŸ’¬ Your Question:")
187
 
188
  if query:
189
  with st.spinner("πŸ” Retrieving and Generating..."):
190
- contexts = search(query, embed_model, faiss_index, data)
191
  combined_context = " ".join(contexts)
192
- response = generate_response(combined_context, query, tokenizer, llm_model)
193
 
194
  st.success("βœ… Answer Ready!")
195
  st.subheader("πŸ“„ Response:")
 
83
  import pickle
84
  import numpy as np
85
  import torch
86
+ from transformers import AutoTokenizer, AutoModel, T5Tokenizer, T5ForConditionalGeneration
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
+ # Paths (everything is local now)
89
+ FAISS_INDEX_PATH = "faiss_index_file.index"
90
+ TEXTS_PATH = "texts.pkl"
91
+ EMBEDDINGS_PATH = "embeddings.npy"
92
 
93
+ EMBEDDING_MODEL_NAME = "Ah1111/Embedding_Model"
94
+ GENERATOR_MODEL_NAME = "Ah1111/Generator_Model"
 
 
 
 
95
 
96
+ # Load generator model (T5)
97
  @st.cache_resource
98
  def load_llm():
99
+ tokenizer = T5Tokenizer.from_pretrained(GENERATOR_MODEL_NAME)
100
+ model = T5ForConditionalGeneration.from_pretrained(GENERATOR_MODEL_NAME)
101
  return tokenizer, model
102
 
103
+ # Load embedding model (custom Hugging Face model)
104
  @st.cache_resource
105
  def load_embedding_model():
106
+ tokenizer = AutoTokenizer.from_pretrained(EMBEDDING_MODEL_NAME)
107
+ model = AutoModel.from_pretrained(EMBEDDING_MODEL_NAME)
108
+ return tokenizer, model
109
 
110
+ # Load FAISS index and texts
111
  @st.cache_resource
112
  def load_faiss():
113
  faiss_index = faiss.read_index(FAISS_INDEX_PATH)
 
116
  embeddings = np.load(EMBEDDINGS_PATH, allow_pickle=True)
117
  return faiss_index, data, embeddings
118
 
119
+ # Function to encode query using the embedding model
120
+ def encode_query(query, tokenizer, model):
121
+ inputs = tokenizer(query, return_tensors="pt", truncation=True, padding=True)
122
+ with torch.no_grad():
123
+ embeddings = model(**inputs).last_hidden_state.mean(dim=1)
124
+ return embeddings.cpu().numpy()
125
+
126
  # Search top-k contexts
127
+ def search(query, tokenizer, model, index, data, k=5):
128
+ query_embedding = encode_query(query, tokenizer, model).astype('float32')
129
  _, I = index.search(query_embedding, k)
130
  results = [data[i] for i in I[0] if i != -1]
131
  return results
132
 
133
+ # Generate response using generator model
134
  def generate_response(context, query, tokenizer, model):
135
  input_text = f"Context: {context}\n\nQuestion: {query}\n\nAnswer:"
136
+ inputs = tokenizer.encode(input_text, return_tensors="pt", truncation=True)
137
  outputs = model.generate(inputs, max_length=512, do_sample=True, temperature=0.7)
138
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
139
  return response
 
150
  """
151
  )
152
 
153
+ # Load models and files
154
+ embed_tokenizer, embed_model = load_embedding_model()
155
+ gen_tokenizer, gen_model = load_llm()
 
156
  faiss_index, data, embeddings = load_faiss()
157
 
158
  query = st.text_input("πŸ’¬ Your Question:")
159
 
160
  if query:
161
  with st.spinner("πŸ” Retrieving and Generating..."):
162
+ contexts = search(query, embed_tokenizer, embed_model, faiss_index, data)
163
  combined_context = " ".join(contexts)
164
+ response = generate_response(combined_context, query, gen_tokenizer, gen_model)
165
 
166
  st.success("βœ… Answer Ready!")
167
  st.subheader("πŸ“„ Response:")
embeddings_file.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2a139ec8e59563899d337ae2728894067f6ddd85c605b2ac93d6e4183d047979
3
+ size 3038336
faiss_index_file.index ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:62ca8fec53b892d868c44273411851a30427ea16e106efb4224fcff3e343d52b
3
+ size 3038253
texts.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d046912f1311f941915f5f03b84bd502c15be19a6f7058ba82a5ebe9b44ff392
3
+ size 2823783