Update main.py
Browse files
main.py
CHANGED
|
@@ -311,6 +311,32 @@ if GEMINI_KEYS_STR2:
|
|
| 311 |
GEMINI_KEYS = list(set([k.strip() for k in _raw_keys if k.strip()]))
|
| 312 |
print(f"✅ تعداد {len(GEMINI_KEYS)} کلید جیمینای با موفقیت شناسایی شد.")
|
| 313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 314 |
HF_TOKENS_STR = os.environ.get("HF_TOKENS", "")
|
| 315 |
HF_TOKENS = [k.strip() for k in HF_TOKENS_STR.split(",") if k.strip()]
|
| 316 |
|
|
@@ -448,9 +474,8 @@ async def process_gemini(client, chat_id, prompt, file_bytes=None, file_name=Non
|
|
| 448 |
history = history[-40:]
|
| 449 |
if history[0]["role"] == "model": history = history[1:]
|
| 450 |
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
keys_to_try = keys_to_try[:20] # انتخاب حداکثر ۲۰ کلید تصادفی برای تست در هر پاسخ
|
| 454 |
final_answer = None
|
| 455 |
|
| 456 |
async with aiohttp.ClientSession() as session:
|
|
@@ -522,9 +547,8 @@ async def process_image(client, chat_id, prompt):
|
|
| 522 |
proc_msg = await send_with_keyboard(client, chat_id, "✨ در حال ترجمه و بهینهسازی پرامپت شما توسط جیمینای...\n(تبدیل به پرامپت حرفهای)", False)
|
| 523 |
enhanced_prompt = prompt
|
| 524 |
if GEMINI_KEYS:
|
| 525 |
-
|
| 526 |
-
|
| 527 |
-
keys_to_try_gemini = keys_to_try_gemini[:20] # انتخاب حداکثر ۲۰ کلید برای ترجمه پرامپت
|
| 528 |
gemini_sys_prompt = f"You are an expert AI image generation prompt engineer. Translate the following user input to English, and enhance it with high-quality, highly detailed, 4k resolution, cinematic lighting, and visually striking descriptive keywords. Return ONLY the final English prompt string.\nUser input: {prompt}"
|
| 529 |
async with aiohttp.ClientSession() as session:
|
| 530 |
for key in keys_to_try_gemini:
|
|
@@ -842,9 +866,8 @@ async def process_stt(client, chat_id, audio_bytes, file_name):
|
|
| 842 |
mime_type, _ = mimetypes.guess_type(file_name)
|
| 843 |
if not mime_type: mime_type = "audio/ogg"
|
| 844 |
|
| 845 |
-
|
| 846 |
-
|
| 847 |
-
keys_to_try = keys_to_try[:20] # انتخاب حداکثر ۲۰ کلید تصادفی
|
| 848 |
transcribed_text = None
|
| 849 |
prompt = "لطفاً این فایل صوتی/تصویری را با دقت کامل گوش بده و صحبتهای داخل آن را کلمه به کلمه به متن تبدیل کن. هیچ توضیح اضافهای نده."
|
| 850 |
|
|
@@ -891,9 +914,8 @@ async def process_file_analysis(client, chat_id, file_bytes, file_name, prompt):
|
|
| 891 |
mime_type, _ = mimetypes.guess_type(file_name)
|
| 892 |
if not mime_type: mime_type = "image/jpeg"
|
| 893 |
|
| 894 |
-
|
| 895 |
-
|
| 896 |
-
keys_to_try = keys_to_try[:20] # انتخاب حداکثر ۲۰ کلید تصادفی
|
| 897 |
final_answer = None
|
| 898 |
|
| 899 |
async with aiohttp.ClientSession() as session:
|
|
|
|
| 311 |
GEMINI_KEYS = list(set([k.strip() for k in _raw_keys if k.strip()]))
|
| 312 |
print(f"✅ تعداد {len(GEMINI_KEYS)} کلید جیمینای با موفقیت شناسایی شد.")
|
| 313 |
|
| 314 |
+
# --- 🚀 سیستم چرخشی پیشرفته (Round-Robin) برای کلیدهای جیمینای ---
|
| 315 |
+
current_gemini_key_index = 0
|
| 316 |
+
gemini_key_lock = threading.Lock()
|
| 317 |
+
|
| 318 |
+
def get_next_gemini_keys(count=100):
|
| 319 |
+
"""
|
| 320 |
+
این تابع تضمین میکند که به ترتیب از کلیدها استفاده شود.
|
| 321 |
+
مثلاً درخواست اول کلیدهای ۱ تا ۱۰۰ را میگیرد.
|
| 322 |
+
درخواست دوم کلیدهای ۱۰۱ تا ۲۰۰ را میگیرد.
|
| 323 |
+
و وقتی به آخر لیست برسد، دوباره از اول شروع میکند.
|
| 324 |
+
"""
|
| 325 |
+
global current_gemini_key_index
|
| 326 |
+
with gemini_key_lock:
|
| 327 |
+
total_keys = len(GEMINI_KEYS)
|
| 328 |
+
if total_keys == 0:
|
| 329 |
+
return []
|
| 330 |
+
|
| 331 |
+
actual_count = min(count, total_keys)
|
| 332 |
+
selected_keys = []
|
| 333 |
+
|
| 334 |
+
for _ in range(actual_count):
|
| 335 |
+
selected_keys.append(GEMINI_KEYS[current_gemini_key_index])
|
| 336 |
+
current_gemini_key_index = (current_gemini_key_index + 1) % total_keys
|
| 337 |
+
|
| 338 |
+
return selected_keys
|
| 339 |
+
|
| 340 |
HF_TOKENS_STR = os.environ.get("HF_TOKENS", "")
|
| 341 |
HF_TOKENS = [k.strip() for k in HF_TOKENS_STR.split(",") if k.strip()]
|
| 342 |
|
|
|
|
| 474 |
history = history[-40:]
|
| 475 |
if history[0]["role"] == "model": history = history[1:]
|
| 476 |
|
| 477 |
+
# دریافت ۱۰۰ کلید به صورت چرخشی
|
| 478 |
+
keys_to_try = get_next_gemini_keys(100)
|
|
|
|
| 479 |
final_answer = None
|
| 480 |
|
| 481 |
async with aiohttp.ClientSession() as session:
|
|
|
|
| 547 |
proc_msg = await send_with_keyboard(client, chat_id, "✨ در حال ترجمه و بهینهسازی پرامپت شما توسط جیمینای...\n(تبدیل به پرامپت حرفهای)", False)
|
| 548 |
enhanced_prompt = prompt
|
| 549 |
if GEMINI_KEYS:
|
| 550 |
+
# دریافت ۱۰۰ کلید به صورت چرخشی
|
| 551 |
+
keys_to_try_gemini = get_next_gemini_keys(100)
|
|
|
|
| 552 |
gemini_sys_prompt = f"You are an expert AI image generation prompt engineer. Translate the following user input to English, and enhance it with high-quality, highly detailed, 4k resolution, cinematic lighting, and visually striking descriptive keywords. Return ONLY the final English prompt string.\nUser input: {prompt}"
|
| 553 |
async with aiohttp.ClientSession() as session:
|
| 554 |
for key in keys_to_try_gemini:
|
|
|
|
| 866 |
mime_type, _ = mimetypes.guess_type(file_name)
|
| 867 |
if not mime_type: mime_type = "audio/ogg"
|
| 868 |
|
| 869 |
+
# دریافت ۱۰۰ کلید به صورت چرخشی
|
| 870 |
+
keys_to_try = get_next_gemini_keys(100)
|
|
|
|
| 871 |
transcribed_text = None
|
| 872 |
prompt = "لطفاً این فایل صوتی/تصویری را با دقت کامل گوش بده و صحبتهای داخل آن را کلمه به کلمه به متن تبدیل کن. هیچ توضیح اضافهای نده."
|
| 873 |
|
|
|
|
| 914 |
mime_type, _ = mimetypes.guess_type(file_name)
|
| 915 |
if not mime_type: mime_type = "image/jpeg"
|
| 916 |
|
| 917 |
+
# دریافت ۱۰۰ کلید به صورت چرخشی
|
| 918 |
+
keys_to_try = get_next_gemini_keys(100)
|
|
|
|
| 919 |
final_answer = None
|
| 920 |
|
| 921 |
async with aiohttp.ClientSession() as session:
|