# Confluence Parser

Сервис для обработки документов и индексации их в векторной базе данных Milvus.

## Содержание
- [Обзор](#обзор)
- [Функционал](#функционал)
- [Установка](#установка)
- [Использование](#использование)
- [API Endpoints](#api-endpoints)
- [Конфигурация](#конфигурация)

## Обзор

Document Parser API предоставляет инструменты для обработки документов в Markdown формате и индексации в векторной базе данных Milvus. Сервис автоматически разбивает документы на чанки, получает эмбеддинги через внешний API и сохраняет их для последующего семантического поиска.

Проект реализован как REST API с использованием фреймворка FastAPI, что обеспечивает высокую производительность и удобство использования.

## Функционал

- **Разбивка на чанки** - умное деление текста на фрагменты с настраиваемым размером и перекрытием
- **Получение эмбеддингов** - интеграция с внешним API для создания векторных представлений текста
- **Индексация в Milvus** - сохранение обработанных документов в векторной базе данных
- **Upsert логика** - автоматическое обновление существующих документов при повторной обработке
- **Батчевая обработка** - оптимизированная обработка больших текстов по частям
- **Обработка ошибок** - устойчивость к сбоям с повторными попытками и логированием

## Установка

### Ручная установка

#### Сборка образа

```bash
make build
```

#### Запуск контейнера

```bash
make run
```

После выполнения сервис будет доступен по адресу http://localhost:8101

## Использование

После запуска сервиса доступна документация по адресу:
- **Swagger UI**: http://localhost:8101/docs

### Пример запроса

```bash
curl -X POST "http://localhost:8101/process_text" \
  -H "accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Документация API",
    "type": "page",
    "link": "https://example.com/api-docs",
    "id_external": "doc_12345",
    "project_id": "my_project",
    "content": "API Documentation This is the main documentation..."
  }'
```

### Пример ответа

```json
{
  "success": true,
  "message": "Документ успешно обработан и сохранен",
  "chunks_created": 5
}
```

## API Endpoints

### Обработка документа

**URL**: `/process_text`
**Метод**: POST

**Параметры запроса**:
- `title` (обязательный) - Название документа
- `type` (обязательный) - Тип документа (file или page)
- `link` (обязательный) - Ссылка на источник документа
- `id_external` (обязательный) - Внешний идентификатор документа
- `project_id` (обязательный) - Идентификатор проекта для группировки документов
- `content` (обязательный) - Текст документа

**Ответ**:
- `success` - Статус обработки (true/false)
- `message` - Информативное сообщение о результате
- `chunks_created` - Количество созданных текстовых чанков

## Конфигурация

Настройки сервиса задаются в файле `config.yaml`:

```yaml
text_processing:
  vector_dim: 1024  # Размерность векторов эмбеддингов
  chunk_size: 1000  # Размер текстового чанка
  chunk_overlap: 150  # Перекрытие между чанками
  batch_size: 20  # Размер батча для обработки эмбеддингов
```

Для работы также требуются следующие переменные окружения:
- `URL_EMBEDDER` - URL сервиса для получения эмбеддингов
- `MILVUS_HOST` - Хост Milvus
- `MILVUS_PORT` - Порт Milvus
- `DATABASE_NAME` - Имя базы данных в Milvus
---

Если у вас возникнут вопросы или потребуется помощь, не стесняйтесь обращаться!