VeganSquirrel commited on
Commit
dd09ba0
·
verified ·
1 Parent(s): 4007d68

1st update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -1
app.py CHANGED
@@ -1,3 +1,68 @@
1
  import gradio as gr
2
 
3
- gr.load("models/HuggingFaceH4/zephyr-7b-alpha").launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
 
3
+ gr.load("models/HuggingFaceH4/zephyr-7b-alpha").launch()
4
+
5
+ import os
6
+ import numpy as np
7
+ import gradio as gr
8
+ from transformers import AutoModelForCausalLM, AutoTokenizer
9
+ import faiss
10
+
11
+ # Step 1: Load Precomputed Embeddings and Metadata
12
+ def load_embeddings(embeddings_folder='embeddings'):
13
+ embeddings = []
14
+ metadata = []
15
+ for file in os.listdir(embeddings_folder):
16
+ if file.endswith('.npy'):
17
+ embedding = np.load(os.path.join(embeddings_folder, file))
18
+ embeddings.append(embedding)
19
+ # Assuming metadata is stored in a corresponding .txt file
20
+ meta_file = file.replace('.npy', '.txt')
21
+ with open(os.path.join(embeddings_folder, meta_file), 'r') as f:
22
+ metadata.append(f.read().strip())
23
+ return np.array(embeddings), metadata
24
+
25
+ embeddings, metadata = load_embeddings()
26
+
27
+ # Step 2: Set Up FAISS Index
28
+ dimension = embeddings.shape[1]
29
+ index = faiss.IndexFlatL2(dimension)
30
+ index.add(embeddings)
31
+
32
+ # Step 3: Load the Language Model
33
+ model_name = "HuggingFaceH4/zephyr-7b-alpha"
34
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
35
+ model = AutoModelForCausalLM.from_pretrained(model_name)
36
+
37
+ # Step 4: Define the Retrieval Function
38
+ def retrieve_documents(query, top_k=3):
39
+ query_embedding = np.mean([embeddings[i] for i in range(len(metadata)) if query.lower() in metadata[i].lower()], axis=0)
40
+ distances, indices = index.search(np.array([query_embedding]), top_k)
41
+ retrieved_docs = [metadata[idx] for idx in indices[0]]
42
+ return retrieved_docs
43
+
44
+ # Step 5: Define the Response Generation Function
45
+ def generate_response(query):
46
+ retrieved_docs = retrieve_documents(query)
47
+ context = " ".join(retrieved_docs)
48
+ input_text = f"Context: {context}\n\nQuestion: {query}\n\nAnswer:"
49
+ inputs = tokenizer(input_text, return_tensors="pt")
50
+ output = model.generate(**inputs, max_length=512)
51
+ answer = tokenizer.decode(output[0], skip_special_tokens=True)
52
+ return answer
53
+
54
+ # Step 6: Create Gradio Interface
55
+ def gradio_interface(query):
56
+ response = generate_response(query)
57
+ return response
58
+
59
+ iface = gr.Interface(
60
+ fn=gradio_interface,
61
+ inputs=gr.inputs.Textbox(lines=2, placeholder="Enter your query here..."),
62
+ outputs="text",
63
+ title="RAG-based Course Search",
64
+ description="Enter a query to search for relevant courses using Retrieval Augmented Generation."
65
+ )
66
+
67
+ if __name__ == "__main__":
68
+ iface.launch()