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:
72
TEST_OCR.md
Normal file
72
TEST_OCR.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# 🧪 Тестирование OCR + Gemini Vision
|
||||
|
||||
## 📋 Запусти в SSH терминале:
|
||||
|
||||
```bash
|
||||
# 1. Перезапусти backend (обязательно!)
|
||||
cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform/backend
|
||||
source venv/bin/activate
|
||||
pkill -9 -f "uvicorn app.main"
|
||||
python -m uvicorn app.main:app --host 0.0.0.0 --port 8100 &
|
||||
```
|
||||
|
||||
```bash
|
||||
# 2. Открой логи в отдельном окне
|
||||
tail -f /var/www/fastuser/data/www/crm.clientright.ru/erv_platform_backend.log
|
||||
```
|
||||
|
||||
## 🔍 Что смотреть в логах:
|
||||
|
||||
При загрузке файла должно появиться:
|
||||
|
||||
```
|
||||
✅ File uploaded to S3: policies/...
|
||||
🔍 Starting OCR for: filename.pdf
|
||||
📄 OCR completed: 1245 chars
|
||||
🤖 Starting AI analysis with google/gemini-2.0-flash-001
|
||||
✅ AI Analysis complete:
|
||||
Document type: policy
|
||||
Valid policy: true
|
||||
Confidence: 0.95
|
||||
💾 OCR result cached in Redis: file_id
|
||||
```
|
||||
|
||||
Если шляпа:
|
||||
```
|
||||
🗑️ GARBAGE DETECTED: filename.jpg (but user doesn't know)
|
||||
```
|
||||
|
||||
## 🌐 Тест через форму:
|
||||
|
||||
1. Открой: http://147.45.146.17:5173
|
||||
2. Введи: E9999-999999999 (несуществующий)
|
||||
3. Загрузи PDF полиса
|
||||
4. **Смотри:**
|
||||
- На форме: прогресс бар OCR
|
||||
- В Debug панели: события OCR + AI
|
||||
- В логах backend: полная информация
|
||||
|
||||
## 🐛 Если не работает:
|
||||
|
||||
Проверь что backend запущен:
|
||||
```bash
|
||||
curl http://localhost:8100/health
|
||||
ps aux | grep uvicorn | grep 8100
|
||||
```
|
||||
|
||||
Проверь что OCR API доступен:
|
||||
```bash
|
||||
curl http://147.45.146.17:8001/docs
|
||||
```
|
||||
|
||||
## 📊 Проверка Redis:
|
||||
|
||||
```bash
|
||||
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" KEYS "ocr_result:*"
|
||||
```
|
||||
|
||||
Если есть результаты - смотри:
|
||||
```bash
|
||||
redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" GET "ocr_result:file_id"
|
||||
```
|
||||
|
||||
@@ -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,
|
||||
|
||||
41
final_commit.sh
Normal file
41
final_commit.sh
Normal file
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform
|
||||
|
||||
git add -A
|
||||
|
||||
git commit -m "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 - инструкции по тестированию"
|
||||
|
||||
git push origin main
|
||||
|
||||
echo "✅ Final commit pushed!"
|
||||
git log --oneline -3
|
||||
|
||||
Reference in New Issue
Block a user