- Create parser-service/ with full structure - Add FastAPI app with endpoints (/parse, /parse_qa, /parse_markdown, /parse_chunks) - Add Pydantic schemas (ParsedDocument, ParsedBlock, ParsedChunk, etc.) - Add runtime module with model_loader and inference (with dummy parser) - Add configuration, Dockerfile, requirements.txt - Update TODO-PARSER-RAG.md with completed tasks - Ready for dots.ocr model integration
120 lines
2.9 KiB
Markdown
120 lines
2.9 KiB
Markdown
# PARSER Service
|
|
|
|
Document Ingestion & Structuring Agent using dots.ocr.
|
|
|
|
## Опис
|
|
|
|
PARSER Service — це FastAPI сервіс для розпізнавання та структурування документів (PDF, зображення) через модель `dots.ocr`.
|
|
|
|
## Структура
|
|
|
|
```
|
|
parser-service/
|
|
├── app/
|
|
│ ├── main.py # FastAPI application
|
|
│ ├── api/
|
|
│ │ └── endpoints.py # API endpoints
|
|
│ ├── core/
|
|
│ │ └── config.py # Configuration
|
|
│ ├── runtime/
|
|
│ │ ├── __init__.py
|
|
│ │ ├── model_loader.py # Model loading
|
|
│ │ └── inference.py # Inference functions
|
|
│ └── schemas.py # Pydantic models
|
|
├── requirements.txt
|
|
├── Dockerfile
|
|
└── README.md
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### POST /ocr/parse
|
|
|
|
Parse document (PDF or image).
|
|
|
|
**Request:**
|
|
- `file`: UploadFile (multipart/form-data)
|
|
- `doc_url`: Optional[str] (not yet implemented)
|
|
- `output_mode`: `raw_json` | `markdown` | `qa_pairs` | `chunks`
|
|
- `dao_id`: Optional[str]
|
|
- `doc_id`: Optional[str]
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"document": {...}, // for raw_json mode
|
|
"markdown": "...", // for markdown mode
|
|
"qa_pairs": [...], // for qa_pairs mode
|
|
"chunks": [...], // for chunks mode
|
|
"metadata": {}
|
|
}
|
|
```
|
|
|
|
### POST /ocr/parse_qa
|
|
|
|
Parse document and return Q&A pairs.
|
|
|
|
### POST /ocr/parse_markdown
|
|
|
|
Parse document and return Markdown.
|
|
|
|
### POST /ocr/parse_chunks
|
|
|
|
Parse document and return chunks for RAG.
|
|
|
|
### GET /health
|
|
|
|
Health check endpoint.
|
|
|
|
## Конфігурація
|
|
|
|
Environment variables:
|
|
|
|
- `PARSER_MODEL_NAME`: Model name (default: `rednote-hilab/dots.ocr`)
|
|
- `PARSER_DEVICE`: Device (`cuda`, `cpu`, `mps`)
|
|
- `PARSER_MAX_PAGES`: Max pages to process (default: 100)
|
|
- `PARSER_MAX_RESOLUTION`: Max resolution (default: `4096x4096`)
|
|
- `MAX_FILE_SIZE_MB`: Max file size in MB (default: 50)
|
|
- `TEMP_DIR`: Temporary directory (default: `/tmp/parser`)
|
|
|
|
## Запуск
|
|
|
|
### Development
|
|
|
|
```bash
|
|
cd services/parser-service
|
|
pip install -r requirements.txt
|
|
uvicorn app.main:app --reload --host 0.0.0.0 --port 9400
|
|
```
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
docker-compose up parser-service
|
|
```
|
|
|
|
## Статус реалізації
|
|
|
|
- [x] Базова структура сервісу
|
|
- [x] API endpoints (з mock-даними)
|
|
- [x] Pydantic schemas
|
|
- [x] Configuration
|
|
- [ ] Інтеграція з dots.ocr моделлю
|
|
- [ ] PDF processing
|
|
- [ ] Image processing
|
|
- [ ] Markdown conversion
|
|
- [ ] QA pairs extraction
|
|
|
|
## Наступні кроки
|
|
|
|
1. Інтегрувати dots.ocr модель в `app/runtime/inference.py`
|
|
2. Додати PDF → images конвертацію
|
|
3. Реалізувати реальний parsing замість dummy
|
|
4. Додати тести
|
|
|
|
## Посилання
|
|
|
|
- [PARSER Agent Documentation](../../docs/agents/parser.md)
|
|
- [TODO: PARSER + RAG Implementation](../../TODO-PARSER-RAG.md)
|
|
|