fix: Исправлен OCR - убрана блокирующая ошибка RabbitMQ
Проблема: - OCR не запускался из-за ошибки в RabbitMQ publish - 'str' object has no attribute 'get' - Gemini Vision не вызывался Решение: - Убран RabbitMQ publish (запускаем OCR напрямую) - Добавлено детальное логирование: - 🔍 Starting OCR for: filename - 📄 OCR completed: XXX chars - 🤖 Starting AI analysis - 📊 Document type: policy/garbage - ✅ Valid, Confidence - 🗑️ GARBAGE DETECTED - Проверка isinstance(ocr_result, dict) - Полный traceback при ошибках Улучшения: - OCR polling на фронте (каждые 3 сек) - Progress bar с анимацией - Условные поля для стыковочного рейса - Доп поля для отмены рейса Файлы: - upload.py - исправлен OCR запуск - Step1Policy.tsx - OCR progress + polling - Step2Details.tsx - условные поля - TEST_OCR.md - инструкции по тестированию
This commit is contained in:
@@ -229,34 +229,36 @@ async def upload_files(files: List[UploadFile] = File(...), folder: str = "claim
|
||||
"content_type": file.content_type
|
||||
}
|
||||
|
||||
# Запускаем OCR напрямую (без очереди пока)
|
||||
try:
|
||||
# Отправляем задачу в очередь OCR
|
||||
await rabbitmq_service.publish(
|
||||
queue_name="erv_ocr_processing",
|
||||
message=json.dumps(ocr_task)
|
||||
)
|
||||
logger.info(f"📤 OCR task queued: {file_id} - {file.filename}")
|
||||
logger.info(f"🔍 Starting OCR for: {file.filename}")
|
||||
|
||||
# Также сразу запускаем OCR для быстрого результата
|
||||
# (параллельно с очередью для бэкапа)
|
||||
# Запускаем OCR
|
||||
ocr_result = await ocr_service.process_document(content, file.filename)
|
||||
|
||||
# Сохраняем результат в Redis на 1 час
|
||||
await redis_service.set(
|
||||
f"ocr_result:{file_id}",
|
||||
json.dumps(ocr_result, ensure_ascii=False),
|
||||
expire=3600
|
||||
)
|
||||
logger.info(f"📊 OCR returned: {type(ocr_result)}")
|
||||
|
||||
logger.info(f"💾 OCR result cached in Redis: {file_id}")
|
||||
logger.info(f"📊 Document type: {ocr_result.get('document_type')}")
|
||||
logger.info(f"✅ Valid: {ocr_result.get('is_valid')}, Confidence: {ocr_result.get('confidence')}")
|
||||
if isinstance(ocr_result, dict):
|
||||
# Сохраняем результат в Redis на 1 час
|
||||
await redis_service.set(
|
||||
f"ocr_result:{file_id}",
|
||||
json.dumps(ocr_result, ensure_ascii=False),
|
||||
expire=3600
|
||||
)
|
||||
|
||||
logger.info(f"💾 OCR result cached in Redis: {file_id}")
|
||||
logger.info(f"📊 Document type: {ocr_result.get('document_type', 'unknown')}")
|
||||
logger.info(f"✅ Valid: {ocr_result.get('is_valid', False)}, Confidence: {ocr_result.get('confidence', 0)}")
|
||||
|
||||
if ocr_result.get('document_type') == 'garbage':
|
||||
logger.warning(f"🗑️ GARBAGE uploaded: {file.filename} (but user doesn't know)")
|
||||
else:
|
||||
logger.error(f"❌ OCR returned non-dict: {type(ocr_result)}")
|
||||
|
||||
if ocr_result.get('document_type') == 'garbage':
|
||||
logger.warning(f"🗑️ GARBAGE uploaded: {file.filename} (but user doesn't know)")
|
||||
|
||||
except Exception as queue_error:
|
||||
logger.error(f"⚠️ Queue error (non-critical): {queue_error}")
|
||||
except Exception as ocr_error:
|
||||
logger.error(f"⚠️ OCR error: {ocr_error}")
|
||||
import traceback
|
||||
logger.error(f"Traceback: {traceback.format_exc()}")
|
||||
|
||||
uploaded_files.append({
|
||||
"success": True,
|
||||
|
||||
Reference in New Issue
Block a user