ramysaidagieb commited on
Commit
a3e5847
·
verified ·
1 Parent(s): 4f78a11

Update rag_pipeline.py

Browse files
Files changed (1) hide show
  1. rag_pipeline.py +27 -24
rag_pipeline.py CHANGED
@@ -1,53 +1,56 @@
1
  import time
2
- from transformers import AutoTokenizer, AutoModelForCausalLM
3
  import numpy as np
 
4
 
5
  class RAGPipeline:
6
- def __init__(self):
7
- print("[RAG] Initializing tokenizer and model...")
 
8
  self.tokenizer = AutoTokenizer.from_pretrained("aubmindlab/aragpt2-mega", trust_remote_code=True)
9
  self.generator = AutoModelForCausalLM.from_pretrained("aubmindlab/aragpt2-mega", trust_remote_code=True)
10
  self.chunk_embeddings = []
11
  self.index = []
12
- print("[RAG] Initialization done.")
13
 
14
  def build_index(self, chunks):
15
- start_time = time.time()
16
- print(f"[RAG] Building index for {len(chunks)} chunks...")
17
  self.chunk_embeddings = []
18
  self.index = []
19
 
20
  for i, chunk in enumerate(chunks):
21
- # هنا يمكن إضافة embedding حقيقي عبر نموذج أو طريقة أخرى
22
  embedding = self._dummy_embedding(chunk)
23
  self.chunk_embeddings.append(embedding)
24
  self.index.append(chunk)
25
- if i % 10 == 0:
26
- print(f"[RAG] Processed {i+1}/{len(chunks)} chunks.")
27
 
28
  self.chunk_embeddings = np.array(self.chunk_embeddings)
29
- dim = self.chunk_embeddings.shape[1]
30
- print(f"[RAG] Index built with dimension {dim}. Took {time.time()-start_time:.2f} seconds.")
 
31
  return "Index built successfully."
32
 
33
  def _dummy_embedding(self, text):
34
- # مؤقتاً فقط: تمثيل نصي عشوائي كـ embedding
35
  return np.random.rand(768)
36
 
37
- def generate_answer(self, question, passages):
38
- start_time = time.time()
39
- print(f"[RAG] Generating answer for question: {question}")
 
 
 
 
 
 
 
40
 
41
- # دمج المقتطفات مع السؤال لصياغة سؤال موجه للنموذج
42
- prompt = question + "\n\nمراجع:\n" + "\n".join(passages)
43
 
44
- output = self.generator.generate(
45
- self.tokenizer(prompt, return_tensors="pt").input_ids,
46
- max_new_tokens=150,
47
- do_sample=True,
48
- )
49
  response = self.tokenizer.decode(output[0], skip_special_tokens=True)
50
 
51
- elapsed = time.time() - start_time
52
- print(f"[RAG] Answer generated in {elapsed:.2f} seconds.")
53
  return response, passages
 
1
  import time
 
2
  import numpy as np
3
+ from transformers import AutoTokenizer, AutoModelForCausalLM
4
 
5
  class RAGPipeline:
6
+ def __init__(self, logger):
7
+ self.logger = logger
8
+ self.logger("[RAG] Initializing tokenizer and model...")
9
  self.tokenizer = AutoTokenizer.from_pretrained("aubmindlab/aragpt2-mega", trust_remote_code=True)
10
  self.generator = AutoModelForCausalLM.from_pretrained("aubmindlab/aragpt2-mega", trust_remote_code=True)
11
  self.chunk_embeddings = []
12
  self.index = []
13
+ self.logger("[RAG] Initialization done.")
14
 
15
  def build_index(self, chunks):
16
+ start = time.time()
17
+ self.logger(f"[RAG] Building index for {len(chunks)} chunks...")
18
  self.chunk_embeddings = []
19
  self.index = []
20
 
21
  for i, chunk in enumerate(chunks):
 
22
  embedding = self._dummy_embedding(chunk)
23
  self.chunk_embeddings.append(embedding)
24
  self.index.append(chunk)
25
+ if (i+1) % 10 == 0 or (i+1) == len(chunks):
26
+ self.logger(f"[RAG] Processed {i+1}/{len(chunks)} chunks.")
27
 
28
  self.chunk_embeddings = np.array(self.chunk_embeddings)
29
+ dim = self.chunk_embeddings.shape[1] if len(self.chunk_embeddings) > 0 else 0
30
+ elapsed = time.time() - start
31
+ self.logger(f"[RAG] Index built with dimension {dim} in {elapsed:.2f}s.")
32
  return "Index built successfully."
33
 
34
  def _dummy_embedding(self, text):
 
35
  return np.random.rand(768)
36
 
37
+ def generate_answer(self, question, top_k=3):
38
+ start = time.time()
39
+ self.logger(f"[RAG] Generating answer for question:\n{question}")
40
+
41
+ if len(self.index) == 0:
42
+ self.logger("[RAG] Warning: index is empty, please build index first.")
43
+ return "لم يتم بناء الفهرس بعد.", []
44
+
45
+ # بحث مبسط لأقرب النصوص (dummy - عشوائي)
46
+ passages = self.index[:top_k]
47
 
48
+ prompt = question + "\n\nالمراجع:\n" + "\n".join(passages)
 
49
 
50
+ inputs = self.tokenizer(prompt, return_tensors="pt")
51
+ output = self.generator.generate(inputs.input_ids, max_new_tokens=150, do_sample=True)
 
 
 
52
  response = self.tokenizer.decode(output[0], skip_special_tokens=True)
53
 
54
+ elapsed = time.time() - start
55
+ self.logger(f"[RAG] Answer generated in {elapsed:.2f}s.")
56
  return response, passages