логирование ошибок транскрибации для битых файлов

This commit is contained in:
poturaevpetr
2026-03-25 16:21:44 +05:00
parent 5360ea7f9c
commit 94633288c3
4 changed files with 71 additions and 4 deletions
+32
View File
@@ -62,6 +62,11 @@ class AiConclusionResponse(BaseModel):
error: Optional[str] = None
class RecognitionFailedRequest(BaseModel):
filename: str
error: str
class ConclusionByFilenameResponse(BaseModel):
"""Заключение по имени файла"""
filename: str
@@ -154,6 +159,11 @@ async def save_ai_conclusion(request: AiConclusionRequest, db: Session = Depends
db.commit()
logger.info(f"✅ Заключение сохранено для {request.filename}")
# Обновляем статус распознавания у Audio
audio.recognition_status = "completed"
audio.recognition_last_error = None
db.commit()
# Для внешних файлов — отправляем результат клиенту из FileAudioAPI
if (audio.sourse or "").lower() == "external" and request.callback_url:
_send_callback(request.callback_url, audio, conclusion_data)
@@ -207,3 +217,25 @@ async def save_ai_conclusion(request: AiConclusionRequest, db: Session = Depends
status_code=500,
detail=str(e)
)
@ai_conclusion_router.post("/conclusion/failed", response_model=AiConclusionResponse)
async def mark_recognition_failed(request: RecognitionFailedRequest, db: Session = Depends(get_db)):
"""
Помечает распознавание как failed для файла (чтобы auto-restore не пытался бесконечно).
Используется GigaAM_API при невозможности получить результат.
"""
audio = db.query(Audio).filter(Audio.filename == request.filename).first()
if not audio:
raise HTTPException(status_code=404, detail=f"Файл не найден: {request.filename}")
audio.recognition_status = "failed"
audio.recognition_last_error = request.error
db.commit()
return AiConclusionResponse(
success=True,
message="Recognition marked as failed",
audio_id=str(audio.id),
filename=audio.filename
)