M17idd commited on
Commit
b3e983d
·
1 Parent(s): eadb87b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +33 -9
app.py CHANGED
@@ -219,8 +219,14 @@ class TogetherEmbeddings(Embeddings):
219
  self.client = Together(api_key=api_key)
220
 
221
  def embed_documents(self, texts: List[str]) -> List[List[float]]:
222
- response = self.client.embeddings.create(model=self.model_name, input=texts)
223
- return [item.embedding for item in response.data]
 
 
 
 
 
 
224
 
225
  def embed_query(self, text: str) -> List[float]:
226
  return self.embed_documents([text])[0]
@@ -232,10 +238,23 @@ def get_csv_index(csv_file):
232
  df = pd.read_csv(csv_file)
233
 
234
  # تبدیل DataFrame به لیست از متون
235
- # فرض می‌کنیم همه ستون‌ها را می‌خواهیم یا یک ستون خاص
236
- # اگر فقط یک ستون دارید، نام آن را جایگزین کنید
237
  texts = df.iloc[:, 0].astype(str).tolist() # ستون اول را می‌گیرد
238
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
239
  # ایجاد embeddings
240
  embeddings = TogetherEmbeddings(
241
  model_name="togethercomputer/m2-bert-80M-8k-retrieval",
@@ -245,22 +264,27 @@ def get_csv_index(csv_file):
245
  # استفاده از VectorstoreIndexCreator برای ساخت ایندکس
246
  index_creator = VectorstoreIndexCreator(
247
  embedding=embeddings,
248
- text_splitter=RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=0)
249
  )
250
 
251
  # تبدیل متون به اسناد (documents)
252
  from langchain.docstore.document import Document
253
- documents = [Document(page_content=text) for text in texts]
254
 
255
  return index_creator.from_documents(documents)
256
 
257
  # مسیر فایل CSV
258
  csv_file_path = 'output (1).csv'
259
 
260
- # ساخت ایندکس
261
- csv_index = get_csv_index(csv_file_path)
262
- st.success("ایندکس فایل CSV با موفقیت ساخته شد!")
 
 
 
263
 
 
 
264
  #------------------------------------------
265
  llm = ChatOpenAI(
266
  base_url="https://api.together.xyz/v1",
 
219
  self.client = Together(api_key=api_key)
220
 
221
  def embed_documents(self, texts: List[str]) -> List[List[float]]:
222
+ # تقسیم متن‌ها به دسته‌های کوچک‌تر برای جلوگیری از خطای 413
223
+ batch_size = 100 # این مقدار را می‌توانید تنظیم کنید
224
+ embeddings = []
225
+ for i in range(0, len(texts), batch_size):
226
+ batch = texts[i:i + batch_size]
227
+ response = self.client.embeddings.create(model=self.model_name, input=batch)
228
+ embeddings.extend([item.embedding for item in response.data])
229
+ return embeddings
230
 
231
  def embed_query(self, text: str) -> List[float]:
232
  return self.embed_documents([text])[0]
 
238
  df = pd.read_csv(csv_file)
239
 
240
  # تبدیل DataFrame به لیست از متون
 
 
241
  texts = df.iloc[:, 0].astype(str).tolist() # ستون اول را می‌گیرد
242
 
243
+ # فیلتر کردن متن‌های خالی
244
+ texts = [text for text in texts if text.strip()]
245
+
246
+ # تقسیم متن‌های طولانی به بخش‌های کوچکتر
247
+ text_splitter = RecursiveCharacterTextSplitter(
248
+ chunk_size=300,
249
+ chunk_overlap=50,
250
+ length_function=len,
251
+ separators=["\n\n", "\n", " ", ""]
252
+ )
253
+
254
+ split_texts = []
255
+ for text in texts:
256
+ split_texts.extend(text_splitter.split_text(text))
257
+
258
  # ایجاد embeddings
259
  embeddings = TogetherEmbeddings(
260
  model_name="togethercomputer/m2-bert-80M-8k-retrieval",
 
264
  # استفاده از VectorstoreIndexCreator برای ساخت ایندکس
265
  index_creator = VectorstoreIndexCreator(
266
  embedding=embeddings,
267
+ text_splitter=text_splitter
268
  )
269
 
270
  # تبدیل متون به اسناد (documents)
271
  from langchain.docstore.document import Document
272
+ documents = [Document(page_content=text) for text in split_texts]
273
 
274
  return index_creator.from_documents(documents)
275
 
276
  # مسیر فایل CSV
277
  csv_file_path = 'output (1).csv'
278
 
279
+ try:
280
+ # ساخت ایندکس
281
+ csv_index = get_csv_index(csv_file_path)
282
+ st.success("ایندکس فایل CSV با موفقیت ساخته شد!")
283
+ except Exception as e:
284
+ st.error(f"خطا در ساخت ایندکس: {str(e)}")
285
 
286
+
287
+
288
  #------------------------------------------
289
  llm = ChatOpenAI(
290
  base_url="https://api.together.xyz/v1",