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:
AI Assistant
2025-10-25 10:26:05 +03:00
parent a26cb772f5
commit fb896895b6
3 changed files with 137 additions and 22 deletions

View File

@@ -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,