Update 4 files
- /rag/rag_server.py - /bots/rag_client.py - /bots/workers/indexing_worker.py - /bots/handlers/file_handler.py
This commit is contained in:
@@ -10,8 +10,13 @@ HTTP-клиент для взаимодействия с RAG-сервером.
|
||||
ИСТОРИЯ НЕ ПЕРЕДАЁТСЯ – сервер получает её из БД.
|
||||
|
||||
Улучшена обработка сетевых ошибок с повторными попытками.
|
||||
|
||||
ДОБАВЛЕНО:
|
||||
- Метод vision() для распознавания текста на изображениях
|
||||
- Метод transcribe() для транскрибации аудио
|
||||
"""
|
||||
|
||||
import os
|
||||
import logging
|
||||
from typing import Optional, Dict, List, Any
|
||||
import aiohttp
|
||||
@@ -281,4 +286,68 @@ class RAGClient:
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка в RAGClient.index_document: {e}", exc_info=True)
|
||||
return {"doc_id": None, "chunk_count": 0, "error": str(e)}
|
||||
return {"doc_id": None, "chunk_count": 0, "error": str(e)}
|
||||
|
||||
# ==========================================================
|
||||
# НОВЫЕ МЕТОДЫ: OCR и транскрибация
|
||||
# ==========================================================
|
||||
|
||||
async def vision(self, file_path: str) -> Dict[str, Any]:
|
||||
"""
|
||||
Отправляет изображение на RAG-сервер для распознавания текста (OCR).
|
||||
|
||||
Аргументы:
|
||||
file_path: путь к файлу изображения
|
||||
|
||||
Возвращает:
|
||||
Dict с ключами: text (str), status (str), error (опционально)
|
||||
"""
|
||||
if not os.path.exists(file_path):
|
||||
return {"text": "", "status": "file_not_found", "error": "Файл не найден"}
|
||||
|
||||
session = await self._get_session()
|
||||
url = f"{self.server_url}/rag/vision"
|
||||
|
||||
try:
|
||||
with open(file_path, 'rb') as f:
|
||||
files = {'file': (os.path.basename(file_path), f, 'image/jpeg')}
|
||||
async with session.post(url, data=files) as resp:
|
||||
if resp.status == 200:
|
||||
return await resp.json()
|
||||
else:
|
||||
error_text = await resp.text()
|
||||
logger.error(f"OCR ошибка: {resp.status} - {error_text[:200]}")
|
||||
return {"text": "", "status": "error", "error": error_text}
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка вызова OCR: {e}", exc_info=True)
|
||||
return {"text": "", "status": "error", "error": str(e)}
|
||||
|
||||
async def transcribe(self, file_path: str) -> Dict[str, Any]:
|
||||
"""
|
||||
Отправляет аудиофайл на RAG-сервер для транскрибации (SaluteSpeech).
|
||||
|
||||
Аргументы:
|
||||
file_path: путь к аудиофайлу
|
||||
|
||||
Возвращает:
|
||||
Dict с ключами: text (str), status (str), error (опционально)
|
||||
"""
|
||||
if not os.path.exists(file_path):
|
||||
return {"text": "", "status": "file_not_found", "error": "Файл не найден"}
|
||||
|
||||
session = await self._get_session()
|
||||
url = f"{self.server_url}/rag/transcribe"
|
||||
|
||||
try:
|
||||
with open(file_path, 'rb') as f:
|
||||
files = {'file': (os.path.basename(file_path), f, 'audio/ogg')}
|
||||
async with session.post(url, data=files) as resp:
|
||||
if resp.status == 200:
|
||||
return await resp.json()
|
||||
else:
|
||||
error_text = await resp.text()
|
||||
logger.error(f"Транскрибация ошибка: {resp.status} - {error_text[:200]}")
|
||||
return {"text": "", "status": "error", "error": error_text}
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка вызова транскрибации: {e}", exc_info=True)
|
||||
return {"text": "", "status": "error", "error": str(e)}
|
||||
Reference in New Issue
Block a user