Update app.py
Browse files
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 |
-
|
223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
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=
|
249 |
)
|
250 |
|
251 |
# تبدیل متون به اسناد (documents)
|
252 |
from langchain.docstore.document import Document
|
253 |
-
documents = [Document(page_content=text) for text in
|
254 |
|
255 |
return index_creator.from_documents(documents)
|
256 |
|
257 |
# مسیر فایل CSV
|
258 |
csv_file_path = 'output (1).csv'
|
259 |
|
260 |
-
|
261 |
-
|
262 |
-
|
|
|
|
|
|
|
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",
|