|
|
|
|
@ -214,7 +214,8 @@ async def process_all_pending_audio(
|
|
|
|
|
200 OK + { |
|
|
|
|
"started_count": 15, |
|
|
|
|
"pending_files": ["file1.wav", "file2.wav", ...], |
|
|
|
|
"total_pending": 50 |
|
|
|
|
"total_pending": 50, |
|
|
|
|
"skipped_duplicates": 2 |
|
|
|
|
} |
|
|
|
|
""" |
|
|
|
|
try: |
|
|
|
|
@ -232,6 +233,7 @@ async def process_all_pending_audio(
|
|
|
|
|
"started_count": 0, |
|
|
|
|
"pending_files": [], |
|
|
|
|
"total_pending": 0, |
|
|
|
|
"skipped_duplicates": 0, |
|
|
|
|
"message": "Нет файлов без AiConclusion" |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -240,6 +242,7 @@ async def process_all_pending_audio(
|
|
|
|
|
# Добавляем задачи в фон |
|
|
|
|
started_count = 0 |
|
|
|
|
pending_files = [] |
|
|
|
|
skipped_duplicates = 0 # Счётчик дубликатов |
|
|
|
|
|
|
|
|
|
for audio in pending_audio: |
|
|
|
|
# Проверяем, что файл существует |
|
|
|
|
@ -248,25 +251,46 @@ async def process_all_pending_audio(
|
|
|
|
|
logger.warning(f"⚠️ Файл не найден на диске: {audio.filename}") |
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
# ПРОВЕРКА НА ДУБЛИКАТЫ: Проверяем, не обрабатывается ли файл уже |
|
|
|
|
import requests |
|
|
|
|
try: |
|
|
|
|
# Проверяем статус через GigaAM API |
|
|
|
|
check_url = f"{os.getenv('GIGAAM_API_URL', 'http://gigaam_api:5001')}/api/call/check-status" |
|
|
|
|
check_response = requests.post( |
|
|
|
|
check_url, |
|
|
|
|
json={"filename": audio.filename}, |
|
|
|
|
timeout=5 |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
if check_response.status_code == 200: |
|
|
|
|
check_data = check_response.json() |
|
|
|
|
if check_data.get('in_queue', False): |
|
|
|
|
logger.info(f"⏭️ Файл уже в очереди GigaAM: {audio.filename}") |
|
|
|
|
skipped_duplicates += 1 |
|
|
|
|
continue |
|
|
|
|
except Exception as e: |
|
|
|
|
# Если проверка упала - всё равно продолжаем |
|
|
|
|
logger.debug(f"Не удалось проверить статус {audio.filename}: {e}") |
|
|
|
|
|
|
|
|
|
# Добавляем в фон (асинхронно) |
|
|
|
|
# В FastAPI используем BackgroundTasks |
|
|
|
|
# Но нужно создавать новую сессию для каждого таска |
|
|
|
|
pending_files.append(audio.filename) |
|
|
|
|
started_count += 1 |
|
|
|
|
|
|
|
|
|
# Запускаем обработку в фоне |
|
|
|
|
# Используем lambda для захвата audio_id |
|
|
|
|
background_tasks.add_task( |
|
|
|
|
process_single_audio, |
|
|
|
|
str(audio.id) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
logger.info(f"✅ Запущено распознавание для {started_count} файлов") |
|
|
|
|
if skipped_duplicates > 0: |
|
|
|
|
logger.info(f"⏭️ Пропущено дубликатов: {skipped_duplicates}") |
|
|
|
|
|
|
|
|
|
return { |
|
|
|
|
"started_count": started_count, |
|
|
|
|
"pending_files": pending_files, |
|
|
|
|
"total_pending": total_pending |
|
|
|
|
"total_pending": total_pending, |
|
|
|
|
"skipped_duplicates": skipped_duplicates |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
except Exception as e: |
|
|
|
|
|