Update app.py
Browse files
app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
# app.py - نسخه Worker
|
| 2 |
|
| 3 |
import os
|
| 4 |
import sys
|
|
@@ -90,21 +90,9 @@ def parse_audio_mime_type(mime_type: str) -> dict[str, int]:
|
|
| 90 |
return {"bits_per_sample": bits, "rate": rate}
|
| 91 |
|
| 92 |
def smart_text_split(text, max_size=3800):
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
for sentence in sentences:
|
| 97 |
-
if len(current_chunk) + len(sentence) + 1 > max_size:
|
| 98 |
-
if current_chunk: chunks.append(current_chunk.strip())
|
| 99 |
-
current_chunk = sentence
|
| 100 |
-
while len(current_chunk) > max_size:
|
| 101 |
-
split_idx = next((i for i in range(max_size - 1, max_size // 2, -1) if current_chunk[i] in ['،', ',', ';', ':', ' ']), -1)
|
| 102 |
-
part, current_chunk = (current_chunk[:split_idx+1], current_chunk[split_idx+1:]) if split_idx != -1 else (current_chunk[:max_size], current_chunk[max_size:])
|
| 103 |
-
chunks.append(part.strip())
|
| 104 |
-
else: current_chunk += (" " if current_chunk else "") + sentence
|
| 105 |
-
if current_chunk: chunks.append(current_chunk.strip())
|
| 106 |
-
final_chunks = [c for c in chunks if c]
|
| 107 |
-
return final_chunks
|
| 108 |
|
| 109 |
def merge_audio_files_func(file_paths, output_path):
|
| 110 |
if not PYDUB_AVAILABLE: logging.warning("⚠️ pydub برای ادغام در دسترس نیست."); return False
|
|
@@ -208,6 +196,7 @@ def core_generate_audio(text_input, prompt_input, selected_voice, temperature_va
|
|
| 208 |
|
| 209 |
# 2. استفاده از مدل استاندارد
|
| 210 |
else:
|
|
|
|
| 211 |
text_chunks = smart_text_split(text_input, DEFAULT_MAX_CHUNK_SIZE)
|
| 212 |
generated_files = []
|
| 213 |
standard_failed = False
|
|
@@ -226,13 +215,12 @@ def core_generate_audio(text_input, prompt_input, selected_voice, temperature_va
|
|
| 226 |
if fpath: generated_files.append(fpath)
|
| 227 |
else:
|
| 228 |
standard_failed = True
|
| 229 |
-
break # شکست در تولید یکی از چانکها
|
| 230 |
|
| 231 |
# 3. بررسی شکست و Fallback
|
| 232 |
if standard_failed:
|
| 233 |
if fallback_to_live:
|
| 234 |
logging.info(f"[{session_id}] 🔄 مدل استاندارد شکست خورد. سوییچ به مدل لایف (Fallback)...")
|
| 235 |
-
# پاکسازی فایلهای ناقص قبلی
|
| 236 |
generated_files = []
|
| 237 |
# فراخوانی مدل لایف برای کل متن
|
| 238 |
pcm_data = asyncio.run(generate_audio_live_with_retry(text_input, prompt_input, selected_voice, session_id))
|
|
@@ -243,7 +231,7 @@ def core_generate_audio(text_input, prompt_input, selected_voice, temperature_va
|
|
| 243 |
else:
|
| 244 |
raise Exception(f"تولید صدا با مدل استاندارد پس از {retry_limit} تلاش ناموفق بود.")
|
| 245 |
|
| 246 |
-
# اگر استاندارد موفق بود، فایلها را ادغام کن
|
| 247 |
if not generated_files: raise Exception("هیچ فایلی تولید نشد.")
|
| 248 |
|
| 249 |
if len(generated_files) > 1:
|
|
|
|
| 1 |
+
# app.py - نسخه Worker بدون تقسیم متن (No Splitting)
|
| 2 |
|
| 3 |
import os
|
| 4 |
import sys
|
|
|
|
| 90 |
return {"bits_per_sample": bits, "rate": rate}
|
| 91 |
|
| 92 |
def smart_text_split(text, max_size=3800):
|
| 93 |
+
# تغییر مهم: حذف کامل تقسیمبندی متن
|
| 94 |
+
# کل متن به عنوان یک تکه بازگردانده میشود تا هوش مصنوعی یکجا آن را پردازش کند
|
| 95 |
+
return [text]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
|
| 97 |
def merge_audio_files_func(file_paths, output_path):
|
| 98 |
if not PYDUB_AVAILABLE: logging.warning("⚠️ pydub برای ادغام در دسترس نیست."); return False
|
|
|
|
| 196 |
|
| 197 |
# 2. استفاده از مدل استاندارد
|
| 198 |
else:
|
| 199 |
+
# تقسیمبندی هوشمند حذف شده و فقط یک چانک (کل متن) برمیگرداند
|
| 200 |
text_chunks = smart_text_split(text_input, DEFAULT_MAX_CHUNK_SIZE)
|
| 201 |
generated_files = []
|
| 202 |
standard_failed = False
|
|
|
|
| 215 |
if fpath: generated_files.append(fpath)
|
| 216 |
else:
|
| 217 |
standard_failed = True
|
| 218 |
+
break # شکست در تولید یکی از چانکها (در اینجا کل متن)
|
| 219 |
|
| 220 |
# 3. بررسی شکست و Fallback
|
| 221 |
if standard_failed:
|
| 222 |
if fallback_to_live:
|
| 223 |
logging.info(f"[{session_id}] 🔄 مدل استاندارد شکست خورد. سوییچ به مدل لایف (Fallback)...")
|
|
|
|
| 224 |
generated_files = []
|
| 225 |
# فراخوانی مدل لایف برای کل متن
|
| 226 |
pcm_data = asyncio.run(generate_audio_live_with_retry(text_input, prompt_input, selected_voice, session_id))
|
|
|
|
| 231 |
else:
|
| 232 |
raise Exception(f"تولید صدا با مدل استاندارد پس از {retry_limit} تلاش ناموفق بود.")
|
| 233 |
|
| 234 |
+
# اگر استاندارد موفق بود، فایلها را ادغام کن (در اینجا معمولاً فقط یک فایل است)
|
| 235 |
if not generated_files: raise Exception("هیچ فایلی تولید نشد.")
|
| 236 |
|
| 237 |
if len(generated_files) > 1:
|