diff --git a/autoLoader/loader/loader.py b/autoLoader/loader/loader.py index d8a6ea3..cc74b4a 100644 --- a/autoLoader/loader/loader.py +++ b/autoLoader/loader/loader.py @@ -9,7 +9,7 @@ local_path = os.path.join(os.getcwd(), FILESAPTH) class Loader(): def __init__(self): self.call_types = ['in'] - pass + self.loaded_files = [] # Список загруженных файлов def filter_call(self, filename: str): if filename.split("-")[0] in self.call_types: @@ -30,6 +30,61 @@ class Loader(): return True + def send_to_recognition(self, limit: int = None): + """ + Отправляет загруженные файлы на распознавание + + Args: + limit: Максимальное количество файлов для отправки + """ + if not self.loaded_files: + print("⏭️ Нет файлов для отправки на распознавание") + return + + from autoLoader.loader import RecognitionChecker + + print(f"\n🎤 Отправка {len(self.loaded_files)} файлов на распознавание...") + + checker = RecognitionChecker() + + # Проверяем доступность API + if not checker.check_api_availability(): + print("❌ GigaAM API недоступен. Пропускаем распознавание.") + return + + # Проверяем БД + if not checker.check_database(): + print("❌ База данных не готова. Пропускаем распознавание.") + return + + # Получаем файлы без заключения + files_without_conclusion = checker.get_files_without_conclusion(limit=limit) + + if not files_without_conclusion: + print("✅ Все файлы уже имеют заключения") + return + + # Отправляем только что загруженные файлы + sent_count = 0 + for audio in self.loaded_files: + # Проверяем, есть ли у файла заключение + with get_db_session() as db: + from autoLoader.database import AiConclusion + existing_conclusion = db.query(AiConclusion).filter( + AiConclusion.audio_id == audio.id + ).first() + + if existing_conclusion: + print(f"⏭️ Файл {audio.filename} уже имеет заключение") + continue + + # Отправляем на распознавание + success = checker.send_to_recognition(audio) + if success: + sent_count += 1 + + print(f"✅ Отправлено {sent_count} из {len(self.loaded_files)} файлов на распознавание") + def load(self): # Проверяем БД перед началом работы if not self.check_database(): @@ -85,7 +140,10 @@ class Loader(): audio.file_size = file_size db.add(audio) - # commit произойдёт автоматически при выходе из контекста + db.flush() # Чтобы получить audio.id + + # Сохраняем в список для последующей отправки + self.loaded_files.append(audio) print(f"✅ Файл {file} сохранён в БД") @@ -104,3 +162,7 @@ class Loader(): sftp_client.close() ssh_client.close() + # После загрузки всех файлов отправляем на распознавание + print(f"\n📊 Загружено файлов: {len(self.loaded_files)}") + self.send_to_recognition() +