Marker
Сервис разметчика (Marker) - это система для подготовки обучающей выборки. Marker позволяет пользователям размечать данные документов и проверять корректность разметки других пользователей, после чего на основе результатов разметки сгенерировать модели машинного обучения с помощью соответствующего ML-сервиса.
Архитектурные решения Marker
Записи об архитектурных решениях, реализованных в продукте Marker.
Статусная модель
- Status: accepted
- Story: CON-959 Переход на задачи Marker
- Task: CON-1401 Изменение статусной модели (бэк)
Context
Цель: изменения статусной модели задач, которые периодически происходят, должны выполняться безболезненно для разработки. В идеале, переходы по статусам должны настраиваться пользователем (по аналогии с таск-трекерами).
Considered Options
- В исходной реализации статусы и их переходы были захардкожены на фронте и на бэке. Гибко настраивать статусную модель при таком подходе невозможно - на каждое изменение нужно привлекать разработчиков.
- Обобщенный механизм обработки статусов в Маркере. Описание статусной модели скомпоновать в Json, реализовать обработку и хранение статусов с БД Маркера. По сути, данный функционал уже реализован в сервисе sed-route.
- Использовать для хранения статусов сервис маршрутов (sed-route). Описание статусной модели скомпоновать в Json, и переносить эти данные в sed-route с помощью миграции.
Decision
Используем для хранения статусной модели сервис маршрутов (sed-route). Он представляет собой справочник для маршрутов, на основе которого удобно реализовать бизнес-логику перемещения по статусам, благодаря заложенной в сервис возможности фильтрации, в т. ч. и по произвольным полям в data.
Positive Consequences
- Экономия на написании логики хранения статусной модели
- Сервис маршрутов либок и удобен для реализации бизнес-логики
- Статусную модель гибко настраивается через Json
- Есть библиотека для создания маршрутов через UI (на перспективу)
Negative Consequences
- Дополнительный сервис
- Зависимость от платформы Standart
- В Standart-е не собирают образы с тэгов, приходится использовать dev-образы (из плюсов - сервис достаточно стабилен и редко дорабатывается)
marker-service: сервис разметчика
Сервис разбит на несколько модулей, в виде sbt проектов:
domain, в котором содержатся все доменные модели и их различные представления.commands, в котором содержатся все? что связано с командами, их описанием и обработчиками.storage, содержит сервисы для сохранения и чтения их разных хранилищ доменных моделей.service, содержит сервисы бизнес логики, которые определяют правила взаимодействия компонентов между собой.boot, содержит зависимости и описание для сборки и запуска сервиса.
Информация по добавлению команд можно прочитать в описании шаблона
Конфигурирование сервиса разметчика
Требования к запуску сервиса разметчика
Запуск сервиса осуществляется локально через sbt, на стенде в docker на jvm.
Для корректной минимальной работы сервиса требуется обязательное подключение к PostgreSQL, Kafka, Consul. Для настройки подключения к ним нужно заполнить обязательные переменные окружения из раздела ниже.
Для нормальной работы сервису дополнительно требуется окружение Verdi: CommandStatus и ApiGateway. В этом случае нужно уделить внимание настройкам, связанным с ServiceDiscovery и CommandDiscovery.
Список переменных окружения сервиса разметчика
Все доступные переменные окружения для настройки сервиса разметчика.
| Переменная | Тип | Обязательная | Значение по умолчанию | Описание |
|---|---|---|---|---|
| MARKER_HTTP_HOST | string | нет | "0.0.0.0" | Хост, на котором слушает HTTP-сервер |
| MARKER_HTTP_PORT | int | нет | 8192 | Порт, на котором слушает HTTP-сервер |
| MARKER_KAFKA_SERVERS | string | да | "localhost:9092" | Адрес Kafka |
| MARKER_KAFKA_TOPIC | string | нет | "marker_commands" | Название кафка-топика для получения команд. Сервис получает кафка-команды по нему, но и также сам публикует это название в CommandDiscovery. |
| MARKER_KAFKA_CONSUMER_GROUP | string | нет | "marker_consumer_group" | Имя consumer-группы для чтения из кафка-топика команд. Не должна меняться и не должна быть пустой, иначе сервис перечитает свои команды при перезапуске. |
| MARKER_KAFKA_COMMANDEVENT_TOPIC | string | да | "commandevents" | Название кафка-топика для отправки сообщений со статусами выполняемых команд. ОБЯЗАТЕЛЬНО должно соответствовать названию этого топика в сервисе статуса команд. |
| MARKER_KAFKA_ENTITY_OBJECT_EVENT_TOPIC | string | нет | "entityObjectEvent" | Название кафка-топика, с событиями об объектах в модели данных |
| MARKER_KAFKA_PARTITIONS | int | да | 10 | Количество партиций в топике команд. |
| MARKER_ENTITY_OBJECT_EVENT_KAFKA_PARTITIONS | int | нет | 10 | Количество партиций в топике с событиями об объектах в модели данных |
| MARKER_KAFKA_CONSUMER_RESTART_MIN_BACKOFF | duration string | да | 1 second | Минимальная задержка перед перезапуском. |
| MARKER_KAFKA_CONSUMER_RESTART_MAX_BACKOFF | duration string | да | 30 seconds | Максимально возможная задержка перед перезапуском. |
| MARKER_KAFKA_CONSUMER_RESTART_RANDOM_FACTOR | double | да | 0.2 | Величина дополнительной случайной задержки: 0.0 - без случайно задержки, 1.0 - до 100% задрежки. |
| MARKER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS | int | да | 5 | Максимальное количество перезапусков в заданный период времени. |
| MARKER_KAFKA_CONSUMER_RESTART_MAX_RESTARTS_WITHIN | duration string | да | 5 minutes | Период времени для ограничения перезапусков. |
| MARKER_KAFKA_AUTH_USER | string | да | "" | Название учетной записи Kafka. Если название не указано, то настройки авторизации не будут применены. |
| MARKER_KAFKA_AUTH_PASSWORD | string | да | "" | Пароль учетной записи Kafka. |
| MARKER_KAFKA_AUTH_PRINCIPAL | string | нет | "" | Principal учетной записи Kafka в Kerberos(в случае соединения с kafka через Kerberos). |
| MARKER_KAFKA_AUTH_KEYTAB_PATH | string | нет | "" | Путь до keytab-файла(в случае соединения с kafka через Kerberos). |
| MARKER_KAFKA_AUTH_TRUSTSTORE_LOCATION | string | да | "" | Путь до хранилища сертификатов (Java key store). Если путь не указан, то сертификат применятся не будет. |
| MARKER_KAFKA_AUTH_TRUSTSTORE_PASSWORD | string | да | "" | Пароль к харнилищу сертификатов. |
| MARKER_KAFKA_AUTH_MODE | string | нет | "static" | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| MARKER_KAFKA_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации |
| MARKER_KAFKA_AUTH_CACHE_SIZE | int | нет | Максимальный размер кеша для Kafka producer (количество активных соединений). | |
| MARKER_KAFKA_AUTH_CACHE_TTL | duration string | нет | Время жизни Kafka producer в кеше. | |
| MARKER_CONSUL_ADDR | url string | да | "http://localhost:8500" | Адрес Сonsul. |
| MARKER_CONSUL_AUTH_USER | string | да | "" | Название учетной записи Сonsul. Если название не указано, то настройки авторизации не будут применены. |
| MARKER_CONSUL_AUTH_PASSWORD | string | да | "" | Пароль учетной записи Сonsul. |
| MARKER_TRACE_DURATION | boolean | нет | false | Признак необходимости трассировки выполнения команд |
| MARKER_DISCOVERABLE_ID | string | нет | "another_marker_instance" | ID сервиса в ServiceDiscovery |
| MARKER_DISCOVERABLE_NAME | string | нет | "marker" | Имя сервиса в ServiceDiscovery |
| MARKER_DISCOVERABLE_HOST | string | да | "localhost" | Хост, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. Указанный адрес должен быть виден другим сервисам. Пример: имя kubernetes/docker_swarm service |
| MARKER_DISCOVERABLE_PORT | int | нет | Порт, публикуемый в ServiceDiscovery. По нему на данный сервис будут обращаться другие через HTTP. По умолчанию указывается порт, который слушает HTTP-сервер. | |
| MARKER_DISCOVERABLE_LIVETIME | duration string | нет | 2 minutes | Период после последней отправки health check, в течение которого ServiceDiscovery считает данный сервис живым. |
| MARKER_DISCOVERABLE_HEALTHPASS | string | нет | 1 minute | Периодичность отправки health check в ServiceDiscovery |
| MARKER_AKKA_HTTP_CLIENT_MAXCON | int | нет | 512 | Максимальное число одновременных исходящих HTTP-соединений |
| MARKER_AKKA_HTTP_CLIENT_MAXREQ | int | нет | 1024 | Максимальное число одновременных исходящих HTTP-запросов |
| MARKER_AKKA_HTTP_HOST_CONN_POOL_IDLE_TIMEOUT | duration string | нет | 10 minutes | Максимальное время жизни пула соединений (с каким-либо сервисом) при отсутствии исходящих соединений |
| MARKER_AKKA_HTTP_HOST_CONN_POOL_CLIENT_IDLE_TIMEOUT | duration string | нет | 10 minutes | Позволяет отдельно настроить максимальное время на исходящий http-запрос, использующий пул соединений (т.е. для синхронной отправки синхронной команды) |
| MARKER_AKKA_HTTP_CLIENT_IDLE_TIMEOUT | duration string | нет | 10 minutes | Максимальное время на исходящий http-запрос (в какой-либо сервис) |
| MARKER_AKKA_HTTP_SERVER_MAXCON | int | нет | 1024 | Максимальное число одновременных входящих HTTP-соединений |
| MARKER_AKKA_HTTP_SERVER_IDLE_TIMEOUT | duration string | нет | 11 minutes | Максимальное время жизни входящего http-соединения |
| MARKER_AKKA_HTTP_SERVER_REQUEST_TIMEOUT | duration string | нет | 10 minutes | Максимальное время обработки входящего http-запроса. Должно быть не больше предыдущего значения, иначе входящее соединение оборвется по таймауту времени жизни запроса |
| MARKER_INTERNALCMD_ALLOW | bool | нет | true | Можно ли сервису отправлять внутрисистемные команды |
| MARKER_HEALTH_TIMEOUT | duration string | нет | 5 seconds | Максимальное время ожидания ответа health check |
| MARKER_SENDERLIB_COMMANDS_CACHE_UPDATEPERIOD | duration string | нет | 10 minutes | Время кэширования данных по командам из CommandDiscovery |
| MARKER_SENDERLIB_SERVICES_CACHE_UPDATEPERIOD | duration string | нет | 30 seconds | Время кэширования данных по сервисам из ServiceDiscovery |
| MARKER_DB_HOST | string | да | Хост БД | |
| MARKER_DB_PORT | int | да | Порт БД | |
| MARKER_DB_NAME | string | да | Имя базы в БД | |
| MARKER_DB_URL | jdbc url string | нет | JDBC-url для соединения с БД. По умолчанию собирается из других обязательных переменных. Можно указать только его, если не хочется отдельно указывать хост/порт/имя базы. | |
| MARKER_DB_USER | string | да | Пользователь БД | |
| MARKER_DB_PASSWORD | string | да | Пароль пользователя БД | |
| MARKER_FS_URI | url string | нет | http://localhost:9000 | Адрес для подключения к Minio |
| MARKER_FS_ACCESS_KEY_ID | string | нет | "minioadmin" | Ключ доступа к хранилищу файлов Minio (aka пользователь) |
| MARKER_FS_SECRET_ACCESS_KEY | string | нет | "minioadmin" | Секретный код доступа к хранилищу файлов Minio (aka пароль) |
| MARKER_FS_UPLOAD_PARALLELISM | int | нет | 4 | Максимально возможный параллелизм при загрузке файлов в хранилище |
| MARKER_FS_AUTH_MODE | string | нет | static | Режим аутентификации: static - одна учетная запись на все запросы, mapping - учетная запись зависит от запроса |
| MARKER_FS_AUTH_CONFIG | string | нет | "" | Настройки для аутентификации: если AuthMode = mapping, то необходим JSON с маппингом учетных записей |
| MARKER_FS_CACHE_SIZE | int | нет | 1 | Максимальный размер кеша клиентов для хранилища файлов (количество активных соединений). |
| MARKER_FS_CACHE_TTL | duration string | нет | Время жизни клиента в кеше | |
| MARKER_TEMP_BUCKET | string | нет | "temp" | Название бакета в Minio, в котором сохраняются временные файлы |
| MARKER_LABELING_BUCKET | string | нет | "labeling" | Название бакета в Minio, в котором сохраняются файлы экспорта разметки |
| MARKER_ENTITY_OBJECTS_BUCKET | string | нет | "datamodel" | Название бакета в Minio, в котором сохраняются файлы документов |
| MARKER_PROJECT_INSTRUCTION_BUCKET | string | нет | "instruction" | Название бакета в Minio, в котором хранятся файлы инструкций |
| MARKER_FS_MODELS_BUCKET | string | нет | "models" | Название бакета в Minio, в котором сохраняются файлы моделей |
| MARKER_FS_METRICS_BUCKET | string | нет | "metrics" | Название бакета в Minio, в котором сохраняются файлы метрик |
| MARKER_ADDITIONAL_FIELDS_PDF_VIEW | string | нет | "extractedText" | Ключ, под которым сервис индексации сохраняет результаты извлечения json из pdf |
| MARKER_FEATURES_MODE | string | нет | "default" | Режим работы: default - без обучения, learning - с обучением моделей |
| MARKER_SERVICE_NAME | string | нет | "marker" | Читаемое имя сервиса |
| MARKER_SERVICE_DESCRIPTION | string | нет | "Сервис разметчика" | Читаемое описание сервиса |
| MARKER_CUSTOM_CHANGE_MIGRATIONS_TIMEOUT | duration string | нет | 3 minutes | Максимальное время выполнения одной миграции customChange |
| MARKER_AUTOML_TRAIN_MODEL_URI | url string | нет | http://localhost:1030/train | RnD: http эндпоинт сервиса обучения моделей |
| MARKER_AUTOML_SOFT_RESTART_URI | url string | нет | http://localhost:1031/soft_restart | RnD: http эндпоинт для остановки обучения |
| MARKER_KAFKA_CONNECTION_CHECK_TEST_MESSAGES_INTERVAL | duration string | нет | 4 minutes | Применяется только для producer-ов со способом аутентификации kerberos. Интервал отправки тестовых сообщений кафки в топик connectionCheck.testMessagesTopicName. Тестовые сообщения (null, service producer test) отправляются регулярно с этим интервалом. |
| MARKER_KAFKA_CONNECTION_CHECK_INTERVAL | duration string | нет | 60 seconds | Применяется только для producer-ов со способом аутентификации kerberos. Интервал проверки того, сколько тестовых сообщений было отправлено за данный период. Если количество сообщений за этот период равно количеству сообщений за прошлый период, то начинается отсчет периода без сообщений. |
| MARKER_KAFKA_CONNECTION_CHECK_FAILED_AFTER_INTERVAL | duration string | нет | 5 minutes | Применяется только для producer-ов со способом аутентификации kerberos. Максимальная продолжительность периода без успешно отправленных тестовых сообщений. По ее достижении сервис будет объявлен больным. |
Команды сервиса разметчика
В сервисе предусмотрены следующие команды:
Сервис публикует события для следующих уведомлений:
| Код уведомления | EntityType | Описание |
|---|---|---|
| EntityCreated | NerSetting | Создана настройка выделения сущностей |
| ProjectCreated | Project | Создан проект разметки |
| EntityAddedToProject | NerSetting | Сущность добавлена в проект |
| LearningStarted | NerSetting | Запущено обучение по сущности |
| LearningFinished | NerSetting | Завершено обучение по сущности |
| ProjectInWork | Project | Проект передан в работу |
| ProjectCompleted | Project | Проект завершен |
—Проект—
CreateProject
На входе свойства и перечень настроек создаваемого проекта
{
"title": "Проект Пандора",
"startDate": 1648114231,
"endDate": 1648114231,
"instruction": "Берешь и размечаешь, чего думать-то",
"instructionUrl": "temp/e3e3e3e3-e3e3-e3e3-e3e3-e3e3e3e3e3e3",
"labelingType": "labelingType_classification",
"nerSettings": [
{
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [
{
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true
}
],
"subNers": [
{
"title": "Город",
"selectionColor": "#783f13",
"attributes": [
{
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true
},
{
"title": "Описание города",
"classificationAction": "classificationAction_fromList",
"maxLength": 250,
"classificationHint": "описывайте тезисно, без фанатизма",
"showInDocList": true
}
]
}
]
},
{
"title": "Телефон",
"selectionColor": "#8b10ad"
}
],
"classificationSettings": [
{
"title": "Город",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"Москва",
"Казань",
"Омск"
],
"classificationHint": "Выбирайте правильно!",
"minLabelingCount": 10,
"showInDocList": true
}
],
"docsPerTask": 10,
"markupSuggesters": [
"userRole_expert",
"userRole_marker"
]
}
На выходе ID созданного проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
Создание нового проекта. Подсущности подсущностей не обрабатываются текущей реализацией сервиса.
Имя команды для вызова: marker_createProject. Поддерживается асинхронный и синхронный вызов.
- На входе: CreateProjectReq
- На выходе: UUID созданного проекта
UpdateProject
На входе свойства обновляемого объекта, включая ID и версию
{
"id": "662d697d-c037-474e-8f18-5736f992f7ff",
"version": 2,
"title": "Проект Пандора",
"startDate": 1648114231,
"endDate": 1648114231,
"instruction": "Берешь и размечаешь, чего думать-то",
"instructionUrl": "temp/e3e3e3e3-e3e3-e3e3-e3e3-e3e3e3e3e3e3",
"labelingType": "labelingType_ner",
"nerSettings": [
{
"title": "Город",
"selectionColor": "#8b10ad",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [
{
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"столица",
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true,
"minLabelingCount": 10
}
],
"subNers": [
{
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [
{
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true
},
{
"title": "Описание города",
"classificationAction": "classificationAction_fromList",
"maxLength": 250,
"classificationHint": "описывайте тезисно, без фанатизма",
"showInDocList": true
}
]
}
]
}
],
"docsPerTask": 10,
"markupSuggesters": [
"userRole_expert",
"userRole_observer"
]
}
На выходе признак успешности
true
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Или ошибка, если проект был обновлен из другого места
{
"businessError": null,
"message": "ERROR: Object version is not actual (Optimistic Lock)",
"stackTrace": null,
"data": null
}
Обновление проекта. Подсущности подсущностей не обрабатываются текущей реализацией сервиса.
Имя команды для вызова: marker_updateProject. Поддерживается асинхронный и синхронный вызов.
- На входе: UpdateProjectReq
- На выходе: Boolean
UpdateProjectStatus
На входе новый статус проекта, а также его ID и версия
{
"id": "db77be48-6ffb-4d8f-983a-c20411043e10",
"projectStatus": "projectStatus_draft",
"version": 2
}
На выходе признак успешности
true
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Или ошибка, если проект был обновлен из другого места
{
"businessError": null,
"message": "ERROR: Object version is not actual (Optimistic Lock)",
"stackTrace": null,
"data": null
}
Обновление статуса проекта
Имя команды для вызова: marker_updateProjectStatus. Поддерживается асинхронный и синхронный вызов.
- На входе: UpdateProjectStatusReq
- На выходе: Boolean
DeleteProject
На входе ID проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
На выходе результат удаления
true
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Удаление проекта по ID
Имя команды для вызова: marker_deleteProject. Поддерживается асинхронный и синхронный вызов.
- На входе: UUID удаляемого проекта
- На выходе: Boolean
AddFilesToProject
На входе ID проекта и ID файлов
{
"projectId": "db77be48-6ffb-4d8f-983a-c20411043e10",
"fileIds": [
"f11614f5-0c78-4408-84a9-a1e68aac6dca",
"24aff3d7-200b-4b1b-b70e-8e9e19a519a0"
]
}
На выходе ссылки для скачивания добавленных файлов
[
"temp/5192b9e8-8b67-4cba-b6b0-6317d4d5863c",
"temp/1cf4fd4b-f33a-4c0f-be0e-5f9ea65bcbf9"
]
Или ошибка, если проекта с указанным ID нет
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Добавление указанных файлов в проект
Имя команды для вызова: marker_addFilesToProject. Поддерживается асинхронный и синхронный вызов.
- На входе: AddFilesToProject
- На выходе: string[]
GetProject
На входе ID проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
На выходе свойства и перечень настроек проекта
{
"id": "0a25b8ad-0734-4b6b-a1b7-5005db0cb813",
"title": "Проект Пандора",
"created": 1653305248400,
"startDate": 1648114231,
"endDate": 1648114231,
"instruction": "Берешь и размечаешь, чего думать-то",
"labelingType": "labelingType_classification",
"projectStatus": "projectStatus_draft",
"documentEntityType": "DocForbWpsVi-iTNSTHn7ZRzJYlQ",
"nerSettings": [
{
"id": "nerField1",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [
{
"id": "nerField1_Attribute1",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true
}
],
"subNers": [
{
"id": "nerField1SubNer3",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [
{
"id": "nerField1SubNer3Attribute1",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Тип",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"райцентр",
"поселок",
"деревня"
],
"showInDocList": true
},
{
"id": "nerField1SubNer3Attribute2",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Описание города",
"classificationAction": "classificationAction_fromList",
"maxLength": 250,
"classificationHint": "описывайте тезисно, без фанатизма",
"showInDocList": true
}
],
"subNers": []
}
]
},
{
"id": "nerField2",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Телефон",
"selectionColor": "#8b10ad",
"attributes": []
}
],
"classificationSettings": [
{
"id": "classificationField1",
"projectIds": [
"0a25b8ad-0734-4b6b-a1b7-5005db0cb813"
],
"title": "Город",
"classificationAction": "classificationAction_fromList",
"optionsList": [
"Москва",
"Казань",
"Омск"
],
"classificationHint": "Выбирайте правильно!",
"minLabelingCount": 10,
"showInDocList": true
}
],
"version": 1,
"docsPerTask": 10,
"markupSuggesters": [
"userRole_expert",
"userRole_observer"
]
}
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Получение проекта по ID
Имя команды для вызова: marker_getProject. Поддерживается только синхронный вызов.
- На входе: UUID проекта
- На выходе: Project
GetProjectStatistics
На входе ID проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
На выходе свойства и статистика проекта
{
"id": "db77be48-6ffb-4d8f-983a-c20411043e10",
"title": "TestProject",
"startDate": 1649146493990,
"endDate": 1649146493990,
"projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
"instructionContent": {
"fileId": "3e47c8bb-5cc9-4bf0-b1c8-18028c217915"
},
"labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
"statistics": {
"taskStatuses": [
{
"status": "18388b51-3c31-4530-a76b-24404f32ae3c",
"count": 0
},
{
"status": "66d92292-10da-48e2-81c7-6189725ed813",
"count": 1
},
{
"status": "a0305766-bb9d-499a-92a4-a34cc6333355",
"count": 2
},
{
"status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
"count": 3
}
]
}
}
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Получение статистики проекта по его ID
Имя команды для вызова: marker_getProjectStatistics. Поддерживается только синхронный вызов.
- На входе: UUID проекта
- На выходе: ProjectStatistics
ListProjects
На входе параметры поиска и пагинации проектов (Search)
{
"query": "",
"context": {},
"paging": {
"page": 1,
"count": 5
}
}
На выходе свойства проектов
{
"items": [
{
"id": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84",
"title": "Test Classification",
"created": 1649847357350,
"startDate": 1649146493990,
"endDate": 1649146493990,
"labelingType": "labelingType_classification",
"projectStatus": "projectStatus_draft",
"version": 1,
"documentsTotal": 5,
"participantsTotal": 10
}
],
"total": 1
}
Получение списка проектов
Имя команды для вызова: marker_listProjects. Поддерживается только синхронный вызов.
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| title | InSetQuery, LikeQuery |
| status, projectStatus | InSetQuery, LikeQuery |
| labelingType | InSetQuery, LikeQuery |
Доступные поля для сортировки:
| Поле | Примечание |
|---|---|
| title | По умолчанию, по возрастанию |
| created | |
| modified | |
| startDate |
- На входе: Search
- На выходе: Страница ProjectListItem
ListSettingsByField
На входе поле настроек
"nerField1"
На выходе настройки с данным полем
[
{
"id": "nerField1",
"title": "Животное",
"projectId": "b0d79c75-82be-4b4d-893e-55f995455e3e"
},
{
"id": "nerField1",
"title": "Тех. задание",
"projectId": "b0d79c75-82be-4b4d-893e-55f995455e3e"
}
]
Возвращает список настроек (NerSetting и ClassificationSetting) в обобщенном виде с запрошенным полем (кодом).
Имя команды для вызова: marker_listSettingsByField. Поддерживается только синхронный вызов.
- На входе: string
- На выходе: Setting[]
ListAllNerSettings
На входе search-объект
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "asc"
},
"paging": {
"page": 1,
"count": 1
}
}
На выходе список всех уникальных настроек выделения сущностей
{
"items": [
{
"id": "testNerField",
"projectIds": [
"9ebbd15c-2be8-4055-a8ed-5d457b36e12c"
],
"title": "Тестовая сущность",
"selectionColor": "#000000",
"showInDocList": true,
"attributes": [],
"subNers": [
{
"id": "testSubNerField",
"projectIds": [
"9ebbd15c-2be8-4055-a8ed-5d457b36e12c"
],
"title": "Тестовая подсущность",
"selectionColor": "#101010",
"showInDocList": false,
"attributes": [],
"subNers": []
}
]
}
],
"total": 10
}
Возвращает список уникальных сущностей со всеми аттрибутами и подсущностями по всем проектам, не копированных ниоткуда.
Уникальность определяется по признаку копирования. Имя команды для вызова: marker_listAllNerSettings.
Поддерживается только синхронный вызов.
- На входе Search
- На выходе Page[NerSetting]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| title | InSetQuery, LikeQuery |
Доступные поля для сортировки:
idtitle
Если поле sorting отсутствует, то список сортируется по дате создания настройки в порядке возрастания.
ListAllClassificationSettings
На входе search-объект
{
"query": "",
"context": {},
"sorting": {
"fieldName": "title",
"order": "asc"
},
"paging": {
"page": 1,
"count": 1
}
}
На выходе список всех уникальных настроек классификации
{
"items": [
{
"id": "testClass",
"projectIds": [
"0201a55f-50e3-45de-acdb-86e294e3ec8d"
],
"title": "Тестовая классификация",
"classificationAction": "classificationAction_fromList4",
"optionsList": [
"раз",
"два",
"три"
],
"showInDocList": true
}
],
"total": 10
}
Возвращает список уникальных настроек классификации по всем проектам, не копированных ниоткуда. Уникальность
определяется по
признаку копирования. Имя команды для вызова: marker_listAllClassificationSettings. Поддерживается только синхронный
вызов.
- На входе Search
- На выходе Page[ClassificationSetting]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| id | InSetQuery, LikeQuery |
| title | InSetQuery, LikeQuery |
Доступные поля для сортировки:
idtitle
Если поле sorting отсутствует, то список сортируется по дате создания настройки в порядке возрастания
GetProjectFields
На входе Search объект (поддерживается только пагинация)
{
"query": "",
"context": {},
"paging": {
"page": 1,
"count": 10
}
}
На выходе статистика по спанам проекта
{
"items": [
{
"id": "db77be48-6ffb-4d8f-983a-c20411043e10",
"title": "Проект 1",
"startDate": 1649146493990,
"endDate": 1649146493990,
"projectStatus": "db77be48-6ffb-4d8f-983a-c20411043e10",
"labelingType": "db77be48-6ffb-4d8f-983a-c20411043e10",
"taskCount": 10,
"nerSettings": [
{
"field": "nerField1",
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"attributes": [],
"subNers": [
{
"field": "nerField1SubNer3",
"title": "Город",
"selectionColor": "#783f13",
"showInDocList": true,
"nerHint": "размечай обдумывая",
"minLabelingCount": 10,
"subNers": []
}
]
}
],
"spanCounts": [
{
"field": "nerField1",
"count": 3
}
]
}
],
"total": 1
}
Получение статистики по спанам проекта
Имя команды для вызова: marker_getProjectFields. Поддерживается только синхронный вызов.
Доступные поля для фильтрации и виды фильтров по ним: аналогично marker_listProjects.
Доступные поля для сортировки: аналогично marker_listProjects.
- На входе: Search
- На выходе: Page[ProjectFields]
GetFullProjectStatistics
На входе ID проекта
"db77be48-6ffb-4d8f-983a-c20411043e10"
На выходе статистика проекта
{
"distributedUsersCount": 20,
"newUsersCount": 20,
"distributedTasksCount": 10,
"newTasksCount": 10
}
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Получение статистики проекта по его ID без учета пользователя
Имя команды для вызова: marker_getFullProjectStatistics. Поддерживается только синхронный вызов.
- На входе: UUID проекта
- На выходе: FullProjectStatistics
ListProjectStatistics
На входе параметры поиска и пагинации проектов (Search)
{
"query": "",
"context": {},
"paging": {"page": 1, "count": 5}
}
На выходе свойства и статистика проектов из выборки
{
"items": [
{
"id": "9bc7e8c6-f71c-4a53-abc6-222a8a431e84",
"title": "Test Classification",
"startDate": 1649146493990,
"endDate": 1649146493990,
"labelingType": "9d08b328-9882-4ea2-bbc9-c44d341e028c",
"projectStatus": "6fae306e-9120-4b84-a79e-530a0be5617c",
"statistics": {
"taskStatuses": [
{
"status": "18388b51-3c31-4530-a76b-24404f32ae3c",
"count": 0
},
{
"status": "66d92292-10da-48e2-81c7-6189725ed813",
"count": 1
},
{
"status": "a0305766-bb9d-499a-92a4-a34cc6333355",
"count": 2
},
{
"status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
"count": 3
}
]
}
}
],
"total": 1
}
Получение статистики проектов
Имя команды для вызова: marker_listProjectStatistics. Поддерживается только синхронный вызов.
Доступные поля для фильтрации и виды фильтров по ним: аналогично marker_listProjects.
Доступные поля для сортировки: аналогично marker_listProjects.
- На входе: Search
- На выходе: Страница ProjectStatistics
—Именованная сущность—
ListEntityStats
На входе ID проекта
"09e65817-e136-4f7c-913b-cb04f4edbef1"
На выходе статистика по сущностям
[
{
"entityCode": "nerField1",
"documentCount": 28
},
{
"entityCode": "nerField10",
"documentCount": 5
}
]
Возвращает статистику по сущностям указанного проекта.
Имя команды для вызова: marker_listEntityStats.
Поддерживается только синхронный вызов.
- На входе: UUID
- На выходе: EntityStatsItem[]
—Документ—
GetDocument
На входе ID проекта и документа этого проекта
{
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"documentId": "24330347-d7e6-4ad0-b153-a299e04612d2"
}
На выходе искомый документ
{
"id": "24330347-d7e6-4ad0-b153-a299e04612d2",
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"title": "TestDoc.pdf",
"created": 1649146493990,
"modified": 1649146493990,
"entityType": "DocForNDJ3jhDJSbaeyd9YfHDnwQ",
"data": {
"name": "TestDoc.pdf",
"file": [
{
"fileId": "545828dd-7b6a-40e3-b9b3-317eb52b4c71",
"name": "TestDoc.pdf",
"extension": "pdf",
"size": 1025,
"url": "datamodel/545828dd-7b6a-40e3-b9b3-317eb52b4c71",
"additional": {},
"created": 0,
"modified": 0,
"md5": "D41D8CD98F00B204E9800998ECF8427E"
}
]
}
}
Или ошибка, если проект отсутствует
{
"businessError": null,
"message": "ERROR: Object not found",
"stackTrace": null,
"data": null
}
Получение документа определенного проекта по их ID.
Имя команды для вызова: marker_getDocument. Поддерживается только синхронный вызов.
- На входе: GetDocument
- На выходе: Document
ListProjectDocuments
На входе ID проекта и параметры поиска
{
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"search": {
"query": "",
"context": {},
"sorting": null,
"paging": null
}
}
На выходе перечень документов по страницам
{
"items": [
{
"id": "24330347-d7e6-4ad0-b153-a299e04612d2",
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"title": "TestDoc.pdf",
"created": 1649146493990,
"modified": 1649146493990,
"entityType": "DocForNDJ3jhDJSbaeyd9YfHDnwQ",
"data": {
"name": "TestDoc.pdf",
"file": [
{
"fileId": "545828dd-7b6a-40e3-b9b3-317eb52b4c71",
"name": "TestDoc.pdf",
"extension": "pdf",
"size": 1025,
"url": "datamodel/545828dd-7b6a-40e3-b9b3-317eb52b4c71",
"additional": {},
"created": 0,
"modified": 0,
"md5": "D41D8CD98F00B204E9800998ECF8427E"
}
]
}
}
],
"total": 5
}
Получение документов проекта.
Имя команды для вызова: marker_listProjectDocuments. Поддерживается только синхронный вызов.
- На входе: ListProjectDocumentsReq
- На выходе: Страница Document
LabelDocument
На входе ID задачи на разметку документа, версия разметки и новая разметка
{
"projectId": "1879aa41-10d9-4ae5-89a6-aeeff005b345",
"taskId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
"ner": {
"nerField1": [
{
"fragment": "Fragment of text",
"start": 250,
"end": 266,
"created": 1234124321432,
"byExpert": true,
"uncertain": false,
"segments": [
{
"start": 250,
"end": 257
},
{
"start": 262,
"end": 266
}
],
"nerField1Attribute1": "Attribute value",
"nerField1Attribute3": [
"Attribute value"
],
"nerField1SubNer1": [
{
"fragment": "Fragment of text",
"start": 255,
"end": 260,
"created": 12341243223432
}
],
"nerField1SubNer2": []
}
],
"nerField2": []
},
"version": 5
}
На выходе новая версия разметки
6
Обновление разметки документа. Ранее также переводила документ в статус "В работе". Теперь это не делает.
Имя команды для вызова: marker_labelDocument. Поддерживается асинхронный и синхронный вызов.
- На входе: LabelDocumentReq
- На выходе: number (новая версия разметки)
—Задача—
GetTask
На входе ID проекта и задачи
{
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"taskId": "24330347-d7e6-4ad0-b153-a299e04612d2"
}
На выходе список всех уникальных настроек классификации
{
"id": "24330347-d7e6-4ad0-b153-a299e04612d2",
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"title": "TestDoc.pdf",
"created": 1649146493990,
"status": "00000002-0001-0000-0000-000000000001",
"documentId": "24330347-d7e6-4ad0-b153-a299e04612d2",
"skipReason": "Document not valid",
"skipDate": 1649146493990,
"ner": {
"data": {
"nerField1": [
{
"start": 54,
"length": 10
},
{
"start": 1976,
"length": 10
}
]
},
"version": 4
},
"checkingTask": "2408012d-4f06-442d-b7ac-c3221fdbdcd5"
}
Получает данные задачи по его ID и ID проекта. Получает данные любого задачи, без привязки к пользователю.
Имя команды для вызова: marker_getTask. Поддерживается только синхронный вызов.
- На входе ProjectTaskIdentity
- На выходе Task
CreateTasks
На входе параметры создания задач
{
"title": null,
"markerId": "10000000-0000-0000-0000-000000000001",
"expertId": "20000000-0000-0000-0000-000000000001",
"projectId": "ee07097c-af39-46f0-9d1b-02583a8ffabe",
"documentIds": [
"d4fac3a8-d30c-43ea-a201-963bb51f6584",
"d01eaa30-5b4b-47ec-8f97-42a5425ede8f"
]
}
На выходе количество созданных задач
4
Команда для массового создания задач.
Если указан title - он присваивается всем созданным задачам в качестве названия.
Если нет - каждой задаче присваивается название в соответствии с названием файла документа.
Имя команды для вызова: marker_createTasks. Поддерживается асинхронный и синхронный вызов.
- На входе: CreateTasks
- На выходе: Int
DeleteTasks
На входе список Id задач.
[
"00044c27-c46c-403e-82e7-8983353c5b70",
"00044c27-c46c-403e-82e7-8983353c5b71"
]
На выходе количество удаленных задач
2
Команда для массового удаления задач.
Имя команды для вызова: marker_deleteTasks. Поддерживается асинхронный и синхронный вызов.
- На входе: List[TaskId]
- На выходе: Int
UpdateTasks
На входе параметры обновления задач
[
{
"id": "00044c27-c46c-403e-82e7-8983353c5b70",
"title": "Slide 1.pptx",
"status": "00000002-0001-0000-0000-000000000001",
"markerId": "10000000-0000-0000-0000-000000000001",
"expertId": "20000000-0000-0000-0000-000000000001",
"version": 1
}
]
На выходе количество обновленных задач
1
Команда для массового обновления задач.
Имя команды для вызова: marker_updateTasks. Поддерживается асинхронный и синхронный вызов.
- На входе: List[UpdateTaskDTO]
- На выходе: Int
UpdateTasksStatus
На входе параметры обновления задач
[
{
"id": "00044c27-c46c-403e-82e7-8983353c5b70",
"status": "00000002-0001-0000-0000-000000000001",
"version": 1
}
]
На выходе количество обновленных задач
1
Команда для изменения статуса задач.
Имя команды для вызова: marker_updateTasksStatus. Поддерживается асинхронный и синхронный вызов.
- На входе: List[UpdateTaskStatusDTO]
- На выходе: Int
ListTasks
На входе параметры пагинации
{
"page": 1,
"count": 1
}
На выходе список задач по страницам
{
"items": [
{
"id": "00044c27-c46c-403e-82e7-8983353c5b70",
"title": "Slide 1.pptx",
"projectId": "cae17fa7-84fc-485a-995d-8127078c5fda",
"documentId": "23519541-dd7d-4dff-8b61-216aa1580948",
"skipReason": null,
"skipDate": null,
"created": 1695188446555,
"modified": 1695188446555,
"createdBy": "00000000-0000-0000-0000-000000000000",
"modifiedBy": "00000000-0000-0000-0000-000000000000",
"status": "00000002-0001-0000-0000-000000000001",
"markerId": null,
"expertId": null,
"version": 1
}
],
"total": 16
}
Получить список всех задач.
Имя команды для вызова: marker_listTasks. Поддерживается только синхронный вызов.
- На входе: Paging
- На выходе: Page[TaskShort]
ListTaskWithFragment
На входе Id проекта, название поля, Search объект
{
"projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
"field": "nerField1",
"search": {
"query": "",
"context": {},
"sorting": null,
"paging": {
"page": 1,
"count": 1
}
}
}
На выходе данные по соответствующим задачами
{
"total": 300,
"items": [
{
"id": "6a0559e5-0ce6-4a7a-8046-732e3cb010d7",
"projectId": "4486145d-e3d6-4d9a-9e7d-c27f54c2cf17",
"taskId": "1cb3e56e-580a-4651-927b-e33068060c6f",
"status": "8a7dabaa-da2c-4b8a-85ff-b7a70e0c71ab",
"fragments": [
{
"created": 1668083991767,
"fragment": "Политика определяет основные подходы к организации страхования рисков\r\nОАО «Газпром нефть» и ее ДЗО (далее - группы компаний ГПН)",
"attributes": [
{
"key": "Ненужный атрибут для тестов",
"value": "ппшашнломащ78"
}
],
"subNer": [
{
"title": "Месяц",
"fragments": [
{
"created": 1668083991767,
"fragment": "ром нефть» и ее ДЗО",
"attributes": [],
"subNer": []
}
]
}
]
}
]
}
]
}
Возвращает разметку документов из указанного проекта, содержащие указанную сущность. Если в проекте нет экспертов, команда вернет разметку разметчиков Если в проекте есть эксперты, то будет возвращена только разметка экспертов
Запрос принимает параметры сортировки, фильтров и пейджинга в параметре Search. Применяется к полям модели Task. Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров | Комментарии |
|---|---|---|
| taskId | InSetQuery, LikeQuery | По id |
| title | InSetQuery, LikeQuery | |
| markerId | InSetQuery, LikeQuery | |
| expertId | InSetQuery, LikeQuery | |
| documentid | InSetQuery, LikeQuery | |
| status | InSetQuery, LikeQuery | |
| data.status | InSetQuery, LikeQuery |
Сортировка выполняется всегда по полю modified модели Labeling.
Имя команды для вызова: marker_listTaskWithFragment. Поддерживается только синхронный вызов.
- На входе ListTaskWithFragment
- На выходе Page[TaskWithFragment]
ListProjectTasksForUser
На входе параметры поиска
{
"query": "",
"context": {},
"sorting": null,
"paging": null
}
На выходе перечень задач по страницам
{
"items": [
{
"id": "24330347-d7e6-4ad0-b153-a299e04612d2",
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"title": "TestDoc.pdf",
"created": 1649146493990,
"createdBy": "d7e6d7e6-d7e6-d7e6-d7e6-d7e6d7e6d7e6",
"modified": 1649146493990,
"modifiedBy": "d7e6d7e6-d7e6-d7e6-d7e6-d7e6d7e6d7e6",
"status": "00000002-0001-0000-0000-000000000001",
"documentId": "24330347-d7e6-4ad0-b153-a299e04612d2",
"skipReason": "Document not valid",
"skipDate": 1649146493990,
"ner": {
"data": {
"nerField1": [
{
"start": 54,
"length": 10
},
{
"start": 1976,
"length": 10
}
]
},
"version": 4
}
}
],
"total": 5
}
Получение задач проекта (для текущего пользователя).
Запрос принимает параметры сортировки, фильтров и пейджинга в параметре Search. Применяется к полям модели Task. Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров | Комментарии |
|---|---|---|
| id | InSetQuery, LikeQuery | |
| title | InSetQuery, LikeQuery | |
| markerId | InSetQuery, LikeQuery | |
| expertId | InSetQuery, LikeQuery | |
| documentId | InSetQuery, LikeQuery | |
| status | InSetQuery, LikeQuery | |
| data.status | InSetQuery, LikeQuery | |
| projectId | InSetQuery |
Доступные поля для сортировки:
| Поле | Примечание |
|---|---|
| created | По умолчанию |
| id |
Имя команды для вызова: marker_listProjectTasksForUser. Поддерживается только синхронный вызов.
ListProjectTasks
На входе параметры поиска
{
"query": "",
"context": {},
"sorting": null,
"paging": null
}
На выходе перечень сокращённых задач по страницам
{
"items": [
{
"taskId": "15b52661-4ca3-4ce7-bf20-05cd14c68dee",
"projectId": "f999d516-0107-4d86-85aa-c2c4a45a981d",
"title": "Таких пользователей нет в проекте",
"status": "00000002-0001-0000-0000-000000000001",
"markerUserInfo": {
"id": "4fcbcc75-35a8-48ad-8c90-2e72764f016c",
"email": "admin02@embedika.ru",
"info": {
"firstName": "Имя",
"lastName": "Фамилия",
"middleName": "Отчество"
}
},
"expertUserInfo": {
"id": "eaf08f3f-d074-4c7d-82e1-2b65d88621e4",
"email": "admin01@embedika.ru",
"info": {
"firstName": "Тест",
"lastName": "",
"middleName": "Тестович"
}
},
"authorUserInfo": {
"id": "eaf08f3f-d074-4c7d-82e1-2b65d88621e4",
"email": "admin01@embedika.ru",
"info": {
"firstName": "Тест",
"lastName": "",
"middleName": "Тестович"
}
},
"documentId": "f999d516-0107-4d86-85aa-c2c4a45a981d"
}
],
"total": 27
}
Получение списка сокращённой информации по задачам проекта.
Запрос принимает параметры сортировки, фильтров и пейджинга в параметре Search. Все параметры точно такие же, как и в marker_listProjectTasks
Имя команды для вызова: marker_listProjectTasks. Поддерживается только синхронный вызов.
- На входе: Search
- На выходе: PageTaskShortInfo
GetTaskPositionInProject
На входе ID проекта и задачи и параметры поиска
{
"projectId": "c187a081-87aa-4962-bcfb-3d02de66aee4",
"taskId": "24330347-d7e6-4ad0-b153-a299e04612d2",
"search": {
"query": "",
"context": {}
}
}
На выходе позиция задачи среди всех найденных (в соответствии с поисковым запросом)
{
"position": 1,
"total": 5
}
Получение позиции задачи в отфильтрованном и отсортированном списке.
Имя команды для вызова: marker_getTaskPositionInProject. Поддерживается только синхронный вызов.
- На входе: GetTaskPosition
- На выходе: PositionInList
—Пользователь—
AddUsersToProject
На входе Id проекта, роли и пользователей
{
"projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
"role": "userRole_marker",
"userIds": [
"4eb15e5a-f388-4e85-9b35-cc025e784249"
]
}
На выходе признак успешного выполнения команды
true
Добавляет пользователeй в проект, устанавливая им роль.
Имя команды для вызова: marker_addUsersToProject. Поддерживается асинхронный и синхронный вызов.
- На входе AddUsersToProject
- На выходе true
DeleteUsersFromProject
На входе Id проекта, пользователя
{
"projectId": "b2993663-8dd4-435d-b14d-a1cf18a4ddae",
"userIds": [
"4eb15e5a-f388-4e85-9b35-cc025e784249"
]
}
На выходе признак успешного выполнения команды
true
Удаляет пользователя из проекта.
Имя команды для вызова: marker_deleteUsersFromProject. Поддерживается асинхронный и синхронный вызов.
- На входе DeleteUsersFromProject
- На выходе true
ListDocumentAssessors
На входе ID проекта и его документов
{
"documents": [
"3c6a450e-bbce-442c-905e-8108ed8c5a05",
"294146d9-ed05-4251-b34f-2192d4e83f05"
]
}
На выходе результат
{
"documentUsers": [
{
"documentId": "3c6a450e-bbce-442c-905e-8108ed8c5a05",
"assessors": [
{
"status": "00000002-0001-0000-0000-000000000001",
"users": [
{
"id": "4324bf49-e556-4058-ba5a-ccdc02199f79",
"modified": 1651234477
},
{
"id": "17f41b3b-100b-492e-a17d-4c6ea60d21ed",
"modified": 1651234477
}
]
},
{
"status": "00000002-0001-0000-0000-000000000001",
"users": [
{
"id": "9e89421b-bfb6-40f8-bcc6-833aeb2bd676",
"modified": 1651234477
}
]
}
]
},
{
"documentId": "294146d9-ed05-4251-b34f-2192d4e83f05",
"assessors": [
{
"status": "00000002-0001-0000-0000-000000000001",
"users": [
]
},
{
"status": "00000002-0001-0000-0000-000000000001",
"users": [
{
"id": "4fcd63d6-db92-4d5b-93c6-bb78e4a59656",
"modified": 1651234477
},
{
"id": "9e89421b-bfb6-40f8-bcc6-833aeb2bd676",
"modified": 1651234477
}
]
}
]
}
]
}
Получить список пользователей, назначенных на разметку документов.
Имя команды для вызова: marker_listDocumentAssessors. Поддерживается асинхронный и синхронный вызов.
- На входе: ListDocumentAssessors
- На выходе: ListDocumentAssessorsResult
ListProjectsForUsers
На входе список Id пользователей, для которых нужна информация
[
"022b1185-c0cd-4c7b-87b5-0dc35c430a76",
"b42d0857-1128-44af-b876-bec33f028326",
"a62cc9e4-2ca1-40f4-98e9-d0c189b9c731",
"f57143ef-c129-4500-8e2e-97db93bd0c1b"
]
На выходе информация о проектах пользователей
[
{
"userId": "022b1185-c0cd-4c7b-87b5-0dc35c430a76",
"projects": [
{
"projectId": "8af0fcbe-4b95-4b06-afb3-b77b4a3e1200",
"role": "userRole_marker",
"addedToProject": 1651234477
}
]
}
]
Для заданного списка пользователей возвращает информацию о проектах.
Имя команды для вызова: marker_listProjectsForUsers. Поддерживается только синхронный вызов.
- На входе uuid string[]
- На выходе UserWithProjects[]
ListProjectUsers
На входе ID проекта
{
"projectId": "db77be48-6ffb-4d8f-983a-c20411043e10",
"role": "userRole_marker",
"search": {
"query": "",
"context": {},
"sorting": null,
"paging": {
"page": 1,
"count": 5
}
}
}
На выходе страница с пользователями проекта
{
"total": 300,
"items": [
{
"userId": "f0ed4aa8-2090-4e48-82e5-62a2ef5623cf",
"role": "userRole_marker",
"taskStatuses": [
{
"status": "18388b51-3c31-4530-a76b-24404f32ae3c",
"count": 0
},
{
"status": "66d92292-10da-48e2-81c7-6189725ed813",
"count": 1
},
{
"status": "a0305766-bb9d-499a-92a4-a34cc6333355",
"count": 2
},
{
"status": "25e5128f-7e8b-44d6-b515-d1c0c3e0bf3d",
"count": 3
}
]
}
]
}
Возвращает список пользователей в проекте. На данный момент Search объект поддерживает только Paging
Имя команды для вызова: marker_listProjectUsers. Поддерживается только синхронный вызов.
- На входе ListProjectUsers
- На выходе Page[ProjectUser]
—Разметка—
ExportLabeling
На входе объект с Id проекта
{
"projectId": "5f10f6e2-7127-4989-9dda-b69c685880ec",
"nerSettingIds": [
"nerField2",
"a101"
],
"format": "jsonl"
}
На выходе url файла с результатом экспорта
"labeling/1cf14222-3d28-4584-a02c-60113f6d7031"
Пример элемента выходного файла (здесь приведен с форматированием для читаемости; в файле представлен в одну строку)
{
"nerField2": [
{
"fragment": "ой почте с адреса: butyaevaia@sibur.ru, gataullinish@sibur.ru,\r\nnasonovsn@sibur.ru направляет Подрядчику на электронный адрес volgazp@gmail.com Заявку\r\nна выполнение землеустроительных и (или) кадастровых работ, являющуюся неотъемлемой\r\nчастью настоящего Договора (далее – Заявка), в которой указывает состав, содержание,\r\nстоимость, срок начала и окончания выполнения работ, промежуточные сроки выполнения\r\nработ (если работы выполняются поэтапно), перечень документации, предоставляемой\r\nПодрядчиком Заказчику по результатам выполнения работ, иные условия проведения работ.\r\nФорма Заявки приведена в Приложении № 2 к настоящему Договору.\r\n2.2.Заявка Заказчика считается акцептованной Подрядчиком, если в течение 2-х (Двух)\r\nрабочих дней с момента ее направления Заказчиком по электронной почте Подрядчик не\r\nнаправит Заказчику возражений относительно данной Заявки.\r\n2.3.Заявка является предложением Заказчика Подрядчику и офертой в смысле статьи 435\r\nГражданского Кодекса РФ.\r\n2.4.Стороны настоящим признают, что:\r\nЗаявка и отзыв Заявки могут быть подписаны собственноручной или электронной\r\nподписью (неквалифицированной электронной подписью) и направляются Сторонами в виде\r\nскан-образа формата PDF по электронной почте, который является электронным документом,\r\nравнозначным документу на бумажном носителе, подписанному собственноручной подписью.\r\nЗаявка и отзыв Заявки, направленные способом, предусмотренным в настоящем пункте,\r\nсчитаются надлежащим образом направленными и имеют юридическую силу.\r\n2.5.Заказчик вправе в любое время отозвать Заявку, при э",
"start": 982,
"end": 2544,
"created": 1699592041197,
"byExpert": null,
"uncertain": null,
"userId": "7e498091-f9d2-4573-bc7a-857000d22073",
"segments": []
}
],
"documentId": "ec8a361d-cd51-4edb-8de4-94df8ad59f32",
"documentUrl": null,
"extractedTextUrl": null
}
Генерирует выгрузку разметки по проекту. На выходе выдает файл в формате JSON Lines(где каждая строка имеет формат ExportLabelingItem) или Csv(формат documentId,entityCode,fragment)
Имя команды для вызова: marker_exportLabeling. Поддерживается асинхронный и синхронный вызов.
- На входе ExportLabeling
- На выходе ссылка на файл
ListCompletedLabelings
На входе пагинация
{
"page": 1,
"count": 10
}
На выходе список разметок
{
"items": [
{
"id": "f41d1d65-6530-40b8-b601-43be45d3f195",
"projectId": "f41d1d65-6530-40b8-b601-43be45d3f195",
"userId": "f41d1d65-6530-40b8-b601-43be45d3f195",
"created": 1668083991767,
"modified": 1668083991767,
"data": {
"nerField1": []
},
"version": 1
}
],
"total": 10
}
Возвращает список разметок в статусе 'Завершено'. Имя команды для вызова: marker_listCompletedLabelings
ImportRndLabeling
На входе идентификатор файла во временном бакете и параметры импорта
{
"fileId": "d0cd48f3-8c9e-4c47-a640-83d2d1e4871c",
"include": {
"fields": [
"UnilateralChange"
],
"docIds": [
"24793790-787e-4865-94b0-8eeb5b37db37"
]
},
"exclude": {}
}
Предполагаемый формат файла:
{"docId": "356be847-b5c5-459a-9315-5cb2596a7e31", "start": 32128, "end": 32575, "entityType": "UnilateralChange", "text": "коротки хитрый текст"}
{"docId": "b326453e-128c-4ae3-a50b-3f8510b7b6a5", "start": 32129, "end": 32577, "entityType": "UnilateralChange", "text": "хитрый странный очень текст побольше"}
{"docId": "b326453e-128c-4ae3-a50b-3f8510b7b6a5", "start": 32578, "end": 32983, "entityType": "UnilateralChange", "text": "еще один очень хитрый текст"}
На выходе количество измененных версий разметки (Labeling)
9
Загружает в систему разметку в формате RnD.
Имя команды для вызова: marker_importRndLabeling. Поддерживается синхронный и асинхронный вызов.
- На входе ImportLabeling
- На выходе: Int
RemoveRndLabeling
На входе параметры для удаления
{
"include": {
"nerSettingIds": [
"ArbitrationClause"
]
},
"exclude": {
"docIds": [
"24793790-787e-4865-94b0-8eeb5b37db37"
]
}
}
На выходе количество измененных версий разметки (Labeling)
3620
Удаляет из системы разметку, загруженную в формате RnD.
Имя команды для вызова: marker_removeRndLabeling. Поддерживается синхронный и асинхронный вызов.
- На входе ImportLabeling
- На выходе: Int
—Обучение—
StartLearning
На входе проект и список кодов сущностей для обучения
{
"projectId": "238837d3-54fe-4685-ae73-48728b93ea0a",
"nerSettingIds": [
"Limited",
"Unlimited"
]
}
На выходе количество запущенных обучений (Learning)
2
Запускает обучение в сервисе обучения ML-моделей (/train)
Имя команды для вызова: marker_startLearning. Поддерживается синхронный и асинхронный вызов.
- На входе: StartLearningDTO
- На выходе: Int
StopLearning
На входе проект
"238837d3-54fe-4685-ae73-48728b93ea0a"
На выходе ничего
{}
Запускает soft restart в сервисе обучения ML-моделей (/soft_restart)
Имя команды для вызова: marker_stopLearning. Поддерживается синхронный и асинхронный вызов.
- На входе: uuid String
- На выходе: Unit
ListLearnings
На входе параметры поиска, сортировки и пагинации (Search)
{
"query": "",
"context": {},
"sorting": null,
"paging": {
"page": 1,
"count": 1
}
}
На выходе список обучений (Learning) по страницам
{
"items": [
{
"nerSetting": {
"id": "Limited",
"title": "Ограниченная ответственность",
"projectIds": [
"5b950949-05b1-439a-a864-94a19e46c453"
]
},
"learningItems": [
{
"project": {
"id": "5b950949-05b1-439a-a864-94a19e46c453",
"title": "Проект",
"created": 1711734922172,
"startDate": 1648114231,
"endDate": 1648114231,
"labelingType": "labelingType_ner",
"projectStatus": "projectStatus_draft",
"version": 1,
"tasksTotal": 0,
"documentsTotal": 0,
"participantsTotal": 0
},
"learning": {
"nerSettingId": "Limited",
"projectId": "5b950949-05b1-439a-a864-94a19e46c453",
"status": "Draft",
"error": null,
"labelingId": null,
"modelId": null,
"metricsId": null,
"created": 1711734923053,
"createdBy": "eaf08f3f-d074-4c7d-82e1-2b65d88621e4",
"modified": 1711734923053,
"modifiedBy": "eaf08f3f-d074-4c7d-82e1-2b65d88621e4",
"version": 1
}
}
]
}
],
"total": 15
}
Перечень обучений, сгруппированный по сущностям.
Для сущностей, не добавленных ни в один проект, придет: "learningItems": [].
Имя команды для вызова: marker_listLearnings. Поддерживается синхронный и асинхронный вызов.
- На входе: Search
- На выходе: Page[LearningListDTO]
Доступные поля для фильтрации и виды фильтров по ним:
| Поле | Виды фильтров |
|---|---|
| nerSetting.id | InSetQuery, LikeQuery |
| nerSetting.title | InSetQuery, LikeQuery |
| project.id | InSetQuery, LikeQuery |
| project.title | InSetQuery, LikeQuery |
Доступные поля для сортировки (обучения у каждой сущности расположены всегда в порядке убывания modified - последннее запущенное обучение сверху):
| Поле | Примечание |
|---|---|
| nerSetting.created | По умолчанию - по убыванию |
| nerSetting.title |
Объекты сервиса разметчика
—Проект—
CreateProjectReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| title | string | да | Наименование проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| instruction | string | нет | Инструкция |
| instructionFile | string | нет | Url файла с инструкцией полученное из upload |
| labelingType | string | да | ID вида разметки (из справочника) |
| nerSettings | object[] | нет | Настройки выделения сущностей |
| classificationSettings | object[] | нет | Настройки классификации |
| markupSuggesters | string[] | да | Список Id ролей, которые могу предлагать разметку |
UpdateProjectReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID обновляемого проекта |
| version | number | да | Версия обновляемого проекта для оптимистичных блокировок |
| title | string | да | Наименование проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| instruction | string | нет | Инструкция |
| instructionUrl | string | нет | Url файла с инструкцией полученное из upload |
| labelingType | string | да | ID вида разметки (из справочника) |
| nerSettings | object[] | нет | Настройки выделения сущностей |
| classificationSettings | object[] | нет | Настройки классификации |
| markupSuggesters | string[] | да | Список Id ролей, которые могу предлагать разметку |
UpdateProjectStatusReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID обновляемого проекта |
| version | number | да | Версия обновляемого проекта для оптимистичных блокировок |
| projectStatus | string | да | ID статуса проекта (из справочника) |
AddFilesToProject (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| fileIds | uuid string[] | да | Список ID файлов |
UpsertNerSetting
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | нет | ID настройки, если она существует |
| title | string | да | Наименование настройки |
| selectionColor | string | да | Цвет выделения |
| attributes | object[] | нет | Атрибуты сущности |
| subNers | object[] | нет | Подсущности |
| showInDocList | boolean | да | Показывать в списке документов |
| nerHint | string | нет | Подсказка |
| minLabelingCount | string | нет | Минимальное количество разметки для обучения |
UpsertClassificationSetting
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | нет | ID настройки, если она существует |
| title | string | да | Наименование настройки |
| classificationAction | string | да | ID действия при классификации |
| optionsList | string[] | нет | Перечень вариантов |
| maxLength | number | нет | Ограничение длины |
| classificationHint | string | нет | Подсказка для настройки |
| showInDocList | boolean | да | Показывать в списке документов |
| minLabelingCount | string | нет | Минимальное количество разметки для обучения |
Project
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID проекта |
| created | timestamp | да | Дата создания проекта |
| title | string | да | Наименование проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| instruction | string | нет | Инструкция |
| instructionFile | object | нет | Файл инструкции |
| labelingType | string | да | ID вида разметки (из справочника) |
| projectStatus | string | да | ID статуса проекта (из справочника) |
| documentEntityType | string | да | Тип сущности в модели данных, с которым сохраняются документы для этого проекта |
| nerSettings | object[] | нет | Настройки выделения сущностей |
| classificationSettings | object[] | нет | Настройки классификации |
| version | number | да | Версия проекта для оптимистичных блокировок |
| markupSuggesters | string[] | да | Список Id ролей, которые могу предлагать разметку |
ProjectFields
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID проекта |
| title | string | да | Название проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| projectStatus | uuid string | да | ID статуса проекта (из справочника) |
| labelingType | uuid string | да | ID вида разметки (из справочника) |
| taskCount | number | да | Количество документов в проекте |
| nerSettings | object[] | да | Настройки выделения сущностей |
| spanCounts | object[] | да | Информация по количеству спанов |
NerSetting
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID (код) настройки |
| projectIds | uuid string[] | да | ID проекта, в котором определена эта настройка |
| title | string | да | Наименование настройки |
| selectionColor | string | да | Цвет выделения |
| attributes | object[] | нет | Атрибуты сущности |
| subNers | object[] | нет | Подсущности |
| showInDocList | boolean | да | Показывать в списке документов |
| nerHint | string | нет | Подсказка |
| minLabelingCount | string | нет | Минимальное количество разметки для обучения |
ClassificationSetting
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID (код) настройки |
| projectIds | uuid string[] | да | ID проекта, в котором определена эта настройка |
| title | string | да | Наименование настройки |
| classificationAction | string | да | ID действия при классификации |
| optionsList | string[] | нет | Перечень вариантов |
| maxLength | number | нет | Ограничение длины |
| classificationHint | string | нет | Подсказка для настройки |
| showInDocList | boolean | да | Показывать в списке документов |
| minLabelingCount | string | нет | Минимальное количество разметки для обучения |
ProjectListItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID проекта |
| created | timestamp | да | Дата создания проекта |
| title | string | да | Наименование проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| instructionFile | uuid string | нет | Файл инструкции |
| labelingType | uuid string | да | ID вида разметки (из справочника) |
| projectStatus | uuid string | да | ID статуса проекта (из справочника) |
| version | number | да | Версия проекта для оптимистичных блокировок |
| tasksTotal | number | да | Количество задач в проекте |
| documentsTotal | number | да | Количество документов в проекте |
| participantsTotal | number | да | Количество участников в проекте |
ProjectStatistics
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID проекта |
| created | timestamp | да | Дата создания проекта |
| title | string | да | Наименование проекта |
| startDate | timestamp | нет | Дата и время начала проекта |
| endDate | timestamp | нет | Дата и время окончания проекта |
| instruction | string | нет | Инструкция |
| instructionFile | uuid string | нет | Файл инструкции |
| labelingType | uuid string | да | ID вида разметки (из справочника) |
| projectStatus | uuid string | да | ID статуса проекта (из справочника) |
| version | number | да | Версия проекта для оптимистичных блокировок |
| statistics | object | да | Статистика проекта |
ProjectStatisticsData
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| taskStatuses | object | да | Статистика статусов заданий запросившего статистику пользователя |
ProjectTaskStatusStatItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| status | uuid string | да | ID Статуса задачи (из сервиса маршрутов) |
| count | number | да | Количество заданий в данном статусе |
Setting
Настройка (nerSetting или classificationSetting) в обобщенном виде
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | string | да | ID настройки |
| title | string | да | название |
| projectIds | uuid string | да | ID проекта |
FullProjectStatistics
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| distributedUsersCount | number | да | Кол-во распределенных пользователей |
| newUsersCount | number | да | Кол-во нераспределенных пользователей |
| distributedTasksCount | number | да | Кол-во распределенных документов |
| newTasksCount | number | да | Кол-во нераспределенных документов |
—Именованная сущность—
EntityStatsItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| entityCode | string | да | Код сущности |
| documentCount | number | да | Количество документов с этой сущностью |
—Документ—
GetDocumentReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| documentId | uuid string | да | ID документа в проекте |
Document
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID документа |
| projectId | uuid string | да | ID проекта |
| title | string | да | Наименование документа |
| created | timestamp | да | Дата и время создания объекта документа (не путать с датой создания файла) |
| entityType | string | да | Тип сущности соответствующей этому документу в модели данных |
| data | object | да | Метаданные документа. В этом поле будут возвращены все поля документа, хранящиеся в модели данных. По умолчанию как пример всем документам разметчика создается модель DocumentData. |
DocumentData
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| file | file object | да | Файл документа |
| name | string | да | Наименование документа |
| path | string | нет | Путь до файла в источнике |
| created | timestamp | да | Дата и время создания файла (в источнике) |
| modified | timestamp | нет | Дата и время изменения файла (в источнике) |
| owner | object | нет | Владелец документа (в источнике файла) |
ListProjectDocumentsReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| search | Search | да | Фильтры, сортировка, пагинация |
LabelDocumentReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта задачи |
| taskId | uuid string | да | ID задачи на разметку |
| ner | [string, NerLabelingItem[]] | нет | Новое выделение сущностей |
| classification | object | нет | Новая классификация |
| version | number | да | Версия разметки |
—Задача—
ProjectTaskIdentity
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта, к которому относится задание |
| taskId | uuid string | да | ID задачи на разметку |
| reason | string | да | Причина пропуска |
SkipTaskReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта, к которому относится задание |
| taskId | uuid string | да | ID задачи на разметку |
Task
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID задачи |
| projectId | uuid string | да | ID проекта |
| documentId | uuid string | да | ID документа задачи |
| userId | uuid string | да | ID пользователя, которому назначено задание |
| title | string | да | Наименование задачи |
| created | timestamp | да | Дата и время создания задачи |
| createdBy | uuid string | да | ID пользователя создавшего запись |
| modified | timestamp | да | Дата и время изменения задачи |
| modifiedBy | uuid string | да | ID пользователя последним изменившего запись |
| status | string | да | ID статуса задачи (из сервиса маршрутов) |
| skipReason | string | нет | Причина пропуска задачи |
| skipDate | timestamp | нет | Дата и время пропуска |
| ner | object | нет | Выделенные сущности |
| classification | object | нет | Классификация |
| checkingTask | uuid string | нет | ссылка на задание, проверяющее текущее (задание эксперта для разметчика) |
| checkedTask | uuid string | нет | ссылка на исходное задание, которое проверяется текущим (задание разметчика для эксперта) |
TaskLabeling
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| version | number | да | Версия разметки |
| data | LabelingData | да | Данные (в зависимости от вида разметки, см. примеры в Confluence) |
TaskShort
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID задачи |
| title | string | да | Название задачи |
| projectId | uuid string | да | ID проекта |
| documentId | uuid string | да | ID документа задачи |
| skipReason | string | нет | Причина пропуска задачи |
| skipDate | timestamp | нет | Дата пропуска задачи |
| created | timestamp | да | Дата и время создания |
| modified | timestamp | да | Дата и время изменения |
| createdBy | uuid string | да | ID пользователя создавшего запись |
| modifiedBy | uuid string | да | ID пользователя последним изменившего запись |
| status | string | да | ID статуса задачи (из сервиса маршрутов) |
| markerId | uuid string | нет | ID пользователя - разметчика |
| expertId | uuid string | нет | ID пользователя - эксперта |
| version | int | да | Версия для оптимистичной блокировки |
TaskShortInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| taskId | uuid string | да | ID задачи |
| projectId | uuid string | да | ID проекта |
| title | string | да | Название задачи |
| status | string | да | ID статуса задачи (из сервиса маршрутов) |
| markerUserInfo | User | нет | Информация об разметчике |
| expertUserInfo | User | нет | Информация об эксперте |
| authorUserInfo | User | нет | Информация об авторе |
| documentId | uuid string | да | ID документа задачи |
ListTaskWithFragment (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| field | string | да | Поле, документы с которым нужно получить |
| search | Search | да | Search объект |
TaskWithFragment
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID документа |
| projectId | uuid string | да | ID проекта |
| taskId | uuid string | да | ID задачи |
| status | LabelingStatus string | да | Статус разметки |
| title | string | Да | Название документа |
| fragments | Fragment[] | Да | Фрагменты |
Fragment
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| created | TimeStamp | да | Дата создания разметки |
| fragment | string | да | Фрагмент |
| attributes | Atribute[] | да | Аттрибуты |
| subNer | SubNer[] | да | Дочерние разметки |
Attribute
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| key | string | да | Ключ аттрибута |
| value | string | нет | Значение аттрибута |
SubNer
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| title | string | да | Название разметки |
| fragments | Fragment[] | Да | Фрагменты |
CreateTasksDto
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| title | string | нет | Название всех задач |
| markerId | uuid string | да | ID пользователя - разметчика |
| expertId | uuid string | да | ID пользователя - эксперта |
| projectId | uuid string | да | ID проекта |
| documentIds | string[] | да | Список ID документов |
UpdateTaskDTO
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID задачи |
| title | string | нет | Название задачи, если пусто, то используется название документа |
| status | string | да | ID статуса задачи (из сервиса маршрутов) |
| markerId | uuid string | нет | ID пользователя - разметчика |
| expertId | uuid string | нет | ID пользователя - эксперта |
| skipReason | string | нет | Причина пропуска задачи |
| version | number | да | Версия задачи для оптимистичных блокировок |
UpdateTaskStatusDTO
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID задачи |
| status | string | да | ID статуса задачи (из сервиса маршрутов) |
| skipReason | string | нет | Причина пропуска задачи |
| version | number | да | Версия задачи для оптимистичных блокировок |
GetTaskPositionInProjectReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| taskId | uuid string | да | ID задачи в проекте |
| search | Search | да | Фильтры, сортировка, пагинация |
—Пользователь—
User
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID пользоваетля |
| string | да | Email пользователя | |
| info | UserInfo | нет | Информация о пользователе |
UserInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| firstName | string | нет | Имя пользователя |
| lastName | string | нет | Фамилия пользователя |
| middleName | string | нет | Отчествао пользователя |
AddUsersToProject (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| userIds | uuid string[] | да | ID пользователей |
| role | string | нет | Код роли в справочнике |
DeleteUsersFromProject (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| userId | uuid string[] | да | ID пользователей |
ListDocumentAssessorsReq
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| documents | uuid string[] | да | ID документов проекта |
ListDocumentAssessorsResult
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| documentUsers | object[] | да | Разметчики документов |
SingleDocumentAssessors
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| documentId | uuid string | да | ID документа |
| assessors | object[] | да | Разметчики документа, разбитые по статусу разметки |
TaskStatusAssessors
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| status | string | да | ID статуса из сервиса маршрутов |
| assessors | object[] | да | Данные пользователей-разметчиков |
TaskAssessor
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID пользователя |
| modified | timestamp | да | Последнее время изменения статуса задачи на разметку |
| skipReason | string | нет | Причина пропуска задачи |
| skipDate | timestamp | нет | Дата и время пропуска задачи |
UserWithProjects
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| userId | uuid string | да | ID пользователя |
| projects | UserProjectInfo[] | да | Список с ифнформациями о проектах пользователя |
UserProjectInfo
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| role | string | да | ID роли в справочнике |
| addedToProject | timestamp | Да | Дата, когда пользователя добавили в проект |
ListProjectUsers (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| role | string | нет | ID роли, пользователей с которой нужно вернуть. Если не указан, вернет всех пользователей |
| search | Search | Да | Объект поиска аналогичный другим сервисам |
ProjectUser
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| userId | uuid string | да | ID пользователя |
| role | string | да | Код роли в справочнике |
| taskStatuses | object[] | да | Статистика статусов заданий запросившего статистику пользователя |
—Разметка—
LabelingData:
- NerLabeling - [string, NerLabelingItem[]]
- ClassificationLabeling - [string, string] / [string, string[]]
NerLabelingItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fragment | string | да | Текст фрагмента |
| start | number | да | Координаты начала фрагмента |
| end | number | да | Координаты оконачания фрагмента |
| created | TimeStamp | да | Время создания спана |
| byExpert | boolean | нет | Спан создан экспертом |
| uncertain | boolean | нет | Уверен ли пользователь в спане |
| segments | List[{start: number, end: number}] | нет | Сегменты спана |
| userId | uuid string | нет | Id пользователя, кто создал спан |
| ___ | List[NerLabelingItem] | нет | Подсущности спана |
| ___Attribute | String \ | List[String] | нет |
ExportLabeling (dto)
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| nerSettingIds | string[] | нет | Список сущностей для выгрузки (отсутствие сущностей == all) |
| format | string (Jsonl/Csv) | нет | Формат выгрузки разметки (Jsonl или Csv) По дефолту Jsonl |
ExportLabelingItem
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| documentId | uuid string | да | ID документа |
| documentUrl | url string | нет | Ссылка на файл документа |
| extractedTextUrl | url string | нет | Ссылка на извлеченный текст документа |
| classificationFieldN (где N - номер поля) | object | для проектов типа Classification | Поля со значениями проставленных классов |
| nerFieldN (где N - номер поля) | object | для проектов типа Ner (выделение сущностей) | Поля с выделенными сущностями |
Labeling
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID разметки |
| projectId | uuid string | да | ID проекта |
| userId | uuid string | да | ID пользователя |
| created | TimeStamp | да | Дата создания разметки |
| modified | TimeStamp | да | Дата изменения разметки |
| data | object | да | Данные разметки |
| version | number | да | Версия разметки |
ImportLabeling
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| fileId | string | нет | ID файла JSON Lines из временного хранилища (для импорта) |
| include | ImportItems | нет | Объекты, которые будут включены в импорт/удаление |
| exclude | ImportItems | нет | Объекты, которые будут исключены из импорта/удаления |
ImportItems
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| nerSettingIds | string[] | нет | Список кодов полей |
| docIds | uuid string[] | нет | Список ID документов |
—Обучение—
StartLearningDTO
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| projectId | uuid string | да | ID проекта |
| nerSettingIds | string[] | да | ID настройки выделения сущности |
LearningListDTO
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| nerSetting | Setting | да | Настройка выделения сущности в сокращенном виде |
| learningItems | LearningItemDTO[] | да | Элемент проекта и обучения |
LearningItemDTO
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| project | ProjectListItem | да | Атрибуты проекта со счетчиками задач, документов, участников |
| learning | Learning | да | ID настройки выделения сущности |
Learning
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| nerSettingId | string | да | ID настройки выделения сущности |
| projectId | uuid string | да | ID проекта |
| status | LearningStatus | да | Статус обучения |
| error | string | нет | Сообщение об ошибке при обучении |
| labelingId | string | нет | ID файла экспорта разметки |
| modelId | string | нет | ID файла модели |
| metricsId | string | нет | ID файла метрик |
| created | TimeStamp | да | Дата и время создания |
| createdBy | uuid string | да | ID пользователя создавшего запись |
| modified | TimeStamp | да | Дата и время изменения |
| modifiedBy | uuid string | да | ID пользователя последним изменившего запись |
| version | number | да | Версия для оптимистичной блокировки |
LearningStatus
| Значение | Описание |
|---|---|
| Draft | Черновик обучения |
| Running | Обучение запущено |
| Error | Обучение завершено с ошибкой |
| Stopped | Обучение остановлено пользователем |
| Finished | Обучение завершено успешно |
—Маршруты—
RouteMigrationDTO
При ручном создании Id имеют вид подобный такому: "00000001-0000-0000-0000-000000000001". Число в первой группе указывает, что это id маршрута, в последней - номер маршрута.
Не следует завязывать какую-либо логику на данный принцип формирования Id.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID маршрута |
| versionId | uuid string | да | ID версии маршрута |
| title | string | да | Название маршрута |
| description | string | да | Описание маршрута |
| data | {} | да | Данные маршрута (пока пустые) |
RouteStageMigrationDTO
При ручном создании Id имеют вид подобный такому: "00000002-0001-0000-0000-000000000001". Число в первой группе указывает, что это id этапа маршрута, во второй - номер маршрута, к которому относится этап, в последней - номер этапа.
Не следует завязывать какую-либо логику на данный принцип формирования Id.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID этапа маршрута |
| routeVersionId | uuid string | да | ID версии маршрута |
| title | string | да | Название этапа |
| description | string | да | Описание этапа |
| data | RouteStageData | да | Данные этапа |
| stageTypeId | uuid string | да | ID типа этапа |
RouteStageData
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| color | hex string | нет | Цвет этапа в UI |
RouteStageLinkMigrationDTO
При ручном создании Id имеют вид подобный такому: "00000003-0001-0002-0000-000000000001". Число в первой группе указывает, что это id связи этапов, во второй - номер маршрута, к которому относится связь, в третьей - номер этапа откуда, в четвертой - номер этапа куда, в последней - номер связи.
Не следует завязывать какую-либо логику на данный принцип формирования Id.
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| id | uuid string | да | ID связи этапов |
| title | string | да | Название связи |
| stageFrom | uuid string | да | ID этапа откуда |
| stageTo | uuid string | да | ID этапа куда |
| conditions | RouteStageLinkConditions | да | Условия перехода |
RouteStageLinkConditions
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| roles | string[] | да | роли, которые могут выполнять переход |