Jan2000 commited on
Commit
334d809
·
unverified ·
1 Parent(s): 9227b93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +9 -9
app.py CHANGED
@@ -82,7 +82,6 @@ def chat():
82
 
83
  show_thoughts = data.get("show_thoughts", False)
84
 
85
- # بخش پردازش پیام‌ها و فایل DOCX (بدون تغییر باقی می‌ماند)
86
  gemini_messages = []
87
  for msg in data.get("messages", []):
88
  role = "model" if msg.get("role") == "assistant" else msg.get("role")
@@ -95,6 +94,8 @@ def chat():
95
  if part.get("base64Data") and part.get("mimeType"):
96
  mime_type = part["mimeType"]
97
 
 
 
98
  if mime_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
99
  try:
100
  decoded_data = base64.b64decode(part["base64Data"])
@@ -110,8 +111,15 @@ def chat():
110
  logging.error(f"خطا در پردازش فایل DOCX: {e}")
111
  processed_parts.append({"text": "[خطا: امکان پردازش فایل Word وجود نداشت.]"})
112
 
 
 
 
 
 
 
113
  else:
114
  processed_parts.append({"inline_data": {"mime_type": part["mimeType"], "data": part["base64Data"]}})
 
115
 
116
  if processed_parts:
117
  if gemini_messages and gemini_messages[-1]["role"] == role:
@@ -145,10 +153,7 @@ def chat():
145
  "include_thoughts": True
146
  }
147
 
148
- # *** START: MODIFIED - استفاده از Timeout تفکیک شده ***
149
- # timeout اول برای اتصال اولیه، timeout دوم برای فاصله بین دریافت داده‌ها
150
  with requests.post(api_endpoint, json=payload, stream=True, timeout=(STREAM_START_TIMEOUT, STREAM_READ_TIMEOUT)) as response:
151
- # *** END: MODIFIED ***
152
  if response.status_code == 429:
153
  logging.warning(f"کلید شماره {key_index + 1} سهمیه آن تمام شده است. در حال تلاش با کلید بعدی...")
154
  last_error = "Rate limit exceeded"
@@ -157,7 +162,6 @@ def chat():
157
  response.raise_for_status()
158
  logging.info(f"اتصال با کلید شماره {key_index + 1} موفقیت‌آمیز بود. در حال استریم پاسخ...")
159
 
160
- # بخش استریم پاسخ (بدون تغییر)
161
  for line in response.iter_lines():
162
  if line:
163
  decoded_line = line.decode('utf-8')
@@ -182,7 +186,6 @@ def chat():
182
  logging.info(f"استریم با کلید شماره {key_index + 1} به پایان رسید.")
183
  return
184
 
185
- # *** START: MODIFIED - افزودن ReadTimeout به مدیریت خطا ***
186
  except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout) as e:
187
  if isinstance(e, requests.exceptions.ReadTimeout):
188
  logging.warning(f"استریم با کلید شماره {key_index + 1} به دلیل عدم دریافت داده جدید متوقف شد (ReadTimeout). در حال تلاش با کلید بعدی...")
@@ -191,7 +194,6 @@ def chat():
191
  logging.warning(f"مهلت زمانی برای اتصال با کلید شماره {key_index + 1} به پایان رسید (ConnectTimeout). در حال تلاش با کلید بعدی...")
192
  last_error = f"ConnectTimeout after {STREAM_START_TIMEOUT} seconds"
193
  continue
194
- # *** END: MODIFIED ***
195
 
196
  except requests.exceptions.HTTPError as e:
197
  if e.response.status_code == 403:
@@ -219,5 +221,3 @@ if __name__ == '__main__':
219
  if GEMINI_API_KEYS:
220
  logging.info(f"سیستم در حالت توسعه شروع به کار کرد. تعداد {len(GEMINI_API_KEYS)} کلید شناسایی شد.")
221
  app.run(debug=True, host='0.0.0.0', port=os.environ.get("PORT", 7860))
222
-
223
- # --- END OF FILE app.py ---
 
82
 
83
  show_thoughts = data.get("show_thoughts", False)
84
 
 
85
  gemini_messages = []
86
  for msg in data.get("messages", []):
87
  role = "model" if msg.get("role") == "assistant" else msg.get("role")
 
94
  if part.get("base64Data") and part.get("mimeType"):
95
  mime_type = part["mimeType"]
96
 
97
+ # *** START: MODIFIED - منطق جدید برای تفکیک فایل‌ها ***
98
+ # 1. فایل Word را به متن تبدیل می‌کنیم (چون Gemini مستقیماً آن را قبول نمی‌کند)
99
  if mime_type == "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
100
  try:
101
  decoded_data = base64.b64decode(part["base64Data"])
 
111
  logging.error(f"خطا در پردازش فایل DOCX: {e}")
112
  processed_parts.append({"text": "[خطا: امکان پردازش فایل Word وجود نداشت.]"})
113
 
114
+ # 2. فایل PDF را مستقیماً ارسال می‌کنیم (چون Gemini آن را تحلیل می‌کند)
115
+ elif mime_type == "application/pdf":
116
+ logging.info("فایل PDF برای تحلیل مستقیم به Gemini ارسال می‌شود.")
117
+ processed_parts.append({"inline_data": {"mime_type": part["mimeType"], "data": part["base64Data"]}})
118
+
119
+ # 3. سایر فایل‌ها (مثل تصاویر) را نیز مستقیماً ارسال می‌کنیم
120
  else:
121
  processed_parts.append({"inline_data": {"mime_type": part["mimeType"], "data": part["base64Data"]}})
122
+ # *** END: MODIFIED ***
123
 
124
  if processed_parts:
125
  if gemini_messages and gemini_messages[-1]["role"] == role:
 
153
  "include_thoughts": True
154
  }
155
 
 
 
156
  with requests.post(api_endpoint, json=payload, stream=True, timeout=(STREAM_START_TIMEOUT, STREAM_READ_TIMEOUT)) as response:
 
157
  if response.status_code == 429:
158
  logging.warning(f"کلید شماره {key_index + 1} سهمیه آن تمام شده است. در حال تلاش با کلید بعدی...")
159
  last_error = "Rate limit exceeded"
 
162
  response.raise_for_status()
163
  logging.info(f"اتصال با کلید شماره {key_index + 1} موفقیت‌آمیز بود. در حال استریم پاسخ...")
164
 
 
165
  for line in response.iter_lines():
166
  if line:
167
  decoded_line = line.decode('utf-8')
 
186
  logging.info(f"استریم با کلید شماره {key_index + 1} به پایان رسید.")
187
  return
188
 
 
189
  except (requests.exceptions.Timeout, requests.exceptions.ReadTimeout) as e:
190
  if isinstance(e, requests.exceptions.ReadTimeout):
191
  logging.warning(f"استریم با کلید شماره {key_index + 1} به دلیل عدم دریافت داده جدید متوقف شد (ReadTimeout). در حال تلاش با کلید بعدی...")
 
194
  logging.warning(f"مهلت زمانی برای اتصال با کلید شماره {key_index + 1} به پایان رسید (ConnectTimeout). در حال تلاش با کلید بعدی...")
195
  last_error = f"ConnectTimeout after {STREAM_START_TIMEOUT} seconds"
196
  continue
 
197
 
198
  except requests.exceptions.HTTPError as e:
199
  if e.response.status_code == 403:
 
221
  if GEMINI_API_KEYS:
222
  logging.info(f"سیستم در حالت توسعه شروع به کار کرد. تعداد {len(GEMINI_API_KEYS)} کلید شناسایی شد.")
223
  app.run(debug=True, host='0.0.0.0', port=os.environ.get("PORT", 7860))