Pouria Aghaomidi commited on
Commit
163b706
·
1 Parent(s): 0c5ef1f
Files changed (2) hide show
  1. app.py +51 -2
  2. requirements.txt +12 -0
app.py CHANGED
@@ -1,11 +1,60 @@
1
  import os
2
- import pandas as pd
3
  import gradio as gr
4
- from persian_rag import PersianRAG
 
 
5
 
6
  os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
7
 
8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  # Function to load CSV and initialize PersianRAG
10
  def init_rag(knowledge_file, embedding_model, llm_model, device, retrieved_docs):
11
  knowledge = pd.read_csv(knowledge_file)
 
1
  import os
2
+ import torch
3
  import gradio as gr
4
+ import pandas as pd
5
+ from sentence_transformers import SentenceTransformer, util
6
+ from transformers import GenerationConfig, AutoModelForCausalLM, AutoTokenizer
7
 
8
  os.environ["GRADIO_ANALYTICS_ENABLED"] = "False"
9
 
10
 
11
+ class PersianRAG:
12
+ def __init__(self, knowledge, embedding_model='LABSE', llm_model="MehdiHosseiniMoghadam/AVA-Mistral-7B-V2",
13
+ device='cuda', retrieved_docs=3):
14
+ self.device = device
15
+ self.retrieved_docs = retrieved_docs
16
+ self.answer_df = (knowledge['Answer'])
17
+
18
+ self.embedder = SentenceTransformer(embedding_model)
19
+ self.question_embeddings = self.embedder.encode((knowledge['Question']), show_progress_bar=True,
20
+ convert_to_tensor=True)
21
+
22
+ self.model = AutoModelForCausalLM.from_pretrained(llm_model, torch_dtype=torch.float16, device_map="auto")
23
+ self.tokenizer = AutoTokenizer.from_pretrained(llm_model)
24
+ self.generation_config = GenerationConfig(
25
+ do_sample=True,
26
+ top_k=1,
27
+ temperature=0.99,
28
+ max_new_tokens=900,
29
+ pad_token_id=self.tokenizer.eos_token_id
30
+ )
31
+
32
+ def rag(self, query):
33
+ ans = {}
34
+ question_embedding = self.embedder.encode(query, convert_to_tensor=True)
35
+ hits = util.semantic_search(question_embedding, self.question_embeddings)
36
+ hits = hits[0]
37
+
38
+ for hit in hits[0:self.retrieved_docs]:
39
+ ans[hit['corpus_id']] = self.answer_df[hit['corpus_id']]
40
+ ans = pd.DataFrame(list(ans.items()), columns=['id', 'res'])
41
+
42
+ prompt = f'''
43
+ با توجه به شرایط زیر به این سوال پاسخ دهید:
44
+ {query},
45
+
46
+ متن نوشته:
47
+ {ans['res'][0]} - {ans['res'][1]} - {ans['res'][2]}
48
+ '''
49
+
50
+ prompt = f"### Human:{prompt}\n### Assistant:"
51
+
52
+ inputs = self.tokenizer(prompt, return_tensors="pt").to(self.device)
53
+ outputs = self.model.generate(**inputs, generation_config=self.generation_config)
54
+
55
+ return self.tokenizer.decode(outputs[0], skip_special_tokens=True)
56
+
57
+
58
  # Function to load CSV and initialize PersianRAG
59
  def init_rag(knowledge_file, embedding_model, llm_model, device, retrieved_docs):
60
  knowledge = pd.read_csv(knowledge_file)
requirements.txt ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ sentence-transformers
2
+ metapub
3
+ openpyxl
4
+ accelerate
5
+ transformers
6
+ accelerate
7
+ bitsandbytes
8
+ trl
9
+ py7zr
10
+ optimum
11
+ git+https://github.com/huggingface/peft
12
+ # pip install auto-gptq --extra-index-url https://huggingface.github.io/autogptq-index/whl/cu118