M17idd commited on
Commit
ab566ee
·
verified ·
1 Parent(s): 5fc8461

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -22
app.py CHANGED
@@ -13,6 +13,7 @@ from typing import List
13
  from pydantic import Field
14
  from sentence_transformers import SentenceTransformer
15
  import numpy as np
 
16
 
17
  # ----------------- تنظیمات صفحه -----------------
18
  st.set_page_config(page_title="چت‌ بات توانا", page_icon="🪖", layout="wide")
@@ -95,11 +96,6 @@ st.markdown("""
95
  </div>
96
  """, unsafe_allow_html=True)
97
 
98
- # ----------------- بارگذاری مدل FarsiBERT -----------------
99
- # model_name = "HooshvareLab/bert-fa-zwnj-base"
100
- # tokenizer = AutoTokenizer.from_pretrained(model_name)
101
- # model = AutoModel.from_pretrained(model_name)
102
-
103
  # ----------------- لود PDF و ساخت ایندکس -----------------
104
 
105
  @st.cache_resource
@@ -109,7 +105,7 @@ def build_pdf_index():
109
  pages = loader.load()
110
 
111
  splitter = RecursiveCharacterTextSplitter(
112
- chunk_size=500,
113
  chunk_overlap=50
114
  )
115
 
@@ -119,7 +115,7 @@ def build_pdf_index():
119
 
120
  documents = [LangchainDocument(page_content=t) for t in texts]
121
 
122
- sentence_model = SentenceTransformer("aubmindlab/bert-base-arabert")
123
 
124
  progress_bar = st.progress(0)
125
  total_docs = len(documents)
@@ -140,12 +136,13 @@ def build_pdf_index():
140
  progress_bar.empty()
141
  embeddings = np.array(embeddings)
142
 
143
- return documents, embeddings
 
 
144
 
145
- # ----------------- تعریف LLM از Groq -----------------
146
- # groq_api_key = "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"
147
 
148
- # به جای OpenAI اینو بذار:
149
  llm = ChatOpenAI(
150
  base_url="https://api.together.xyz/v1",
151
  api_key='0291f33aee03412a47fa5d8e562e515182dcc5d9aac5a7fb5eefdd1759005979',
@@ -156,24 +153,22 @@ llm = ChatOpenAI(
156
  class SimpleRetriever(BaseRetriever):
157
  documents: List[Document] = Field(...)
158
  embeddings: List[np.ndarray] = Field(...)
 
159
 
160
  def _get_relevant_documents(self, query: str) -> List[Document]:
161
- # استفاده از sentence_model برای تبدیل query به بردار
162
- sentence_model = SentenceTransformer("aubmindlab/bert-base-arabert")
163
  query_embedding = sentence_model.encode(query, convert_to_numpy=True)
164
 
165
- # محاسبه شباهت‌های برداری برای تمام اسناد
166
- similarities = np.dot(self.embeddings, query_embedding)
167
-
168
- # ترتیب‌دهی اسناد بر اساس شباهت‌ها
169
- ranked_docs = np.argsort(similarities)[::-1]
170
 
171
- # برگشتن به ۵ سند برتر
172
- return [self.documents[i] for i in ranked_docs[:5]]
173
 
174
  # ----------------- ساخت Index -----------------
175
- documents, embeddings = build_pdf_index()
176
- retriever = SimpleRetriever(documents=documents, embeddings=embeddings)
177
 
178
  # ----------------- ساخت Chain -----------------
179
  chain = RetrievalQA.from_chain_type(
 
13
  from pydantic import Field
14
  from sentence_transformers import SentenceTransformer
15
  import numpy as np
16
+ import faiss
17
 
18
  # ----------------- تنظیمات صفحه -----------------
19
  st.set_page_config(page_title="چت‌ بات توانا", page_icon="🪖", layout="wide")
 
96
  </div>
97
  """, unsafe_allow_html=True)
98
 
 
 
 
 
 
99
  # ----------------- لود PDF و ساخت ایندکس -----------------
100
 
101
  @st.cache_resource
 
105
  pages = loader.load()
106
 
107
  splitter = RecursiveCharacterTextSplitter(
108
+ chunk_size=128,
109
  chunk_overlap=50
110
  )
111
 
 
115
 
116
  documents = [LangchainDocument(page_content=t) for t in texts]
117
 
118
+ sentence_model = SentenceTransformer('HooshvareLab/bert-fa-zwnj-base')
119
 
120
  progress_bar = st.progress(0)
121
  total_docs = len(documents)
 
136
  progress_bar.empty()
137
  embeddings = np.array(embeddings)
138
 
139
+ # ساخت ایندکس با استفاده از FAISS برای جستجو سریعتر
140
+ index = faiss.IndexFlatL2(embeddings.shape[1]) # استفاده از L2 distance
141
+ index.add(embeddings) # اضافه کردن بردارها به ایندکس FAISS
142
 
143
+ return documents, embeddings, index
 
144
 
145
+ # ----------------- تعریف LLM از Groq -----------------
146
  llm = ChatOpenAI(
147
  base_url="https://api.together.xyz/v1",
148
  api_key='0291f33aee03412a47fa5d8e562e515182dcc5d9aac5a7fb5eefdd1759005979',
 
153
  class SimpleRetriever(BaseRetriever):
154
  documents: List[Document] = Field(...)
155
  embeddings: List[np.ndarray] = Field(...)
156
+ index: faiss.Index
157
 
158
  def _get_relevant_documents(self, query: str) -> List[Document]:
159
+ # تبدیل پرسش به بردار
160
+ sentence_model = SentenceTransformer('HooshvareLab/bert-fa-zwnj-base')
161
  query_embedding = sentence_model.encode(query, convert_to_numpy=True)
162
 
163
+ # جستجو در ایندکس FAISS
164
+ _, indices = self.index.search(np.expand_dims(query_embedding, axis=0), 5) # پیدا کردن 5 سند مشابه
 
 
 
165
 
166
+ # بازگشت به 5 سند مرتبط‌ترین
167
+ return [self.documents[i] for i in indices[0]]
168
 
169
  # ----------------- ساخت Index -----------------
170
+ documents, embeddings, index = build_pdf_index()
171
+ retriever = SimpleRetriever(documents=documents, embeddings=embeddings, index=index)
172
 
173
  # ----------------- ساخت Chain -----------------
174
  chain = RetrievalQA.from_chain_type(