Update app.py
Browse files
app.py
CHANGED
|
@@ -379,16 +379,28 @@ def process_audio_file_optimized(file_path, task="transcribe", language="auto",
|
|
| 379 |
def health_check():
|
| 380 |
"""Health check endpoint"""
|
| 381 |
model_status = "loaded" if model_manager.pipe is not None else "not_loaded"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 382 |
return jsonify({
|
| 383 |
"status": "healthy",
|
| 384 |
"model": MODEL_NAME,
|
| 385 |
"device": str(device),
|
| 386 |
"model_status": model_status,
|
| 387 |
"model_timeout_minutes": MODEL_TIMEOUT_MINUTES,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 388 |
"optimization": {
|
| 389 |
-
"fp16": torch.cuda.is_available(),
|
| 390 |
"batch_size": BATCH_SIZE,
|
| 391 |
-
"chunk_length": CHUNK_LENGTH,
|
| 392 |
"max_workers": MAX_WORKERS
|
| 393 |
},
|
| 394 |
"supported_languages": list(SUPPORTED_LANGUAGES.keys())
|
|
@@ -673,8 +685,24 @@ def cleanup_model_on_shutdown(exception):
|
|
| 673 |
model_manager.cleanup_model()
|
| 674 |
|
| 675 |
if __name__ == '__main__':
|
|
|
|
| 676 |
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 677 |
app.run(host='0.0.0.0', port=7860, debug=False, threaded=True)
|
|
|
|
|
|
|
| 678 |
finally:
|
| 679 |
# پاکسازی نهایی
|
|
|
|
| 680 |
model_manager.cleanup_model()
|
|
|
|
| 379 |
def health_check():
|
| 380 |
"""Health check endpoint"""
|
| 381 |
model_status = "loaded" if model_manager.pipe is not None else "not_loaded"
|
| 382 |
+
|
| 383 |
+
# بررسی وضعیت حافظه
|
| 384 |
+
import psutil
|
| 385 |
+
memory_info = psutil.virtual_memory()
|
| 386 |
+
|
| 387 |
return jsonify({
|
| 388 |
"status": "healthy",
|
| 389 |
"model": MODEL_NAME,
|
| 390 |
"device": str(device),
|
| 391 |
"model_status": model_status,
|
| 392 |
"model_timeout_minutes": MODEL_TIMEOUT_MINUTES,
|
| 393 |
+
"limits": {
|
| 394 |
+
"max_file_size_mb": FILE_LIMIT_MB,
|
| 395 |
+
"max_audio_duration_seconds": MAX_AUDIO_DURATION,
|
| 396 |
+
"chunk_length_seconds": CHUNK_LENGTH
|
| 397 |
+
},
|
| 398 |
+
"memory": {
|
| 399 |
+
"available_mb": round(memory_info.available / 1024 / 1024),
|
| 400 |
+
"used_percent": memory_info.percent
|
| 401 |
+
},
|
| 402 |
"optimization": {
|
|
|
|
| 403 |
"batch_size": BATCH_SIZE,
|
|
|
|
| 404 |
"max_workers": MAX_WORKERS
|
| 405 |
},
|
| 406 |
"supported_languages": list(SUPPORTED_LANGUAGES.keys())
|
|
|
|
| 685 |
model_manager.cleanup_model()
|
| 686 |
|
| 687 |
if __name__ == '__main__':
|
| 688 |
+
# نصب psutil در صورت عدم وجود
|
| 689 |
try:
|
| 690 |
+
import psutil
|
| 691 |
+
except ImportError:
|
| 692 |
+
logger.warning("psutil not installed. Memory monitoring disabled.")
|
| 693 |
+
|
| 694 |
+
try:
|
| 695 |
+
# تنظیمات Flask برای فایلهای بزرگ
|
| 696 |
+
app.config['MAX_CONTENT_LENGTH'] = MAX_FILE_SIZE
|
| 697 |
+
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
|
| 698 |
+
|
| 699 |
+
logger.info(f"Starting server with max file size: {FILE_LIMIT_MB}MB")
|
| 700 |
+
logger.info(f"Max audio duration: {MAX_AUDIO_DURATION/60:.1f} minutes")
|
| 701 |
+
|
| 702 |
app.run(host='0.0.0.0', port=7860, debug=False, threaded=True)
|
| 703 |
+
except KeyboardInterrupt:
|
| 704 |
+
logger.info("Server shutdown requested")
|
| 705 |
finally:
|
| 706 |
# پاکسازی نهایی
|
| 707 |
+
logger.info("Cleaning up resources...")
|
| 708 |
model_manager.cleanup_model()
|