# Предварительная проверка пакета модели

Версия примера: 1.0, 27.09.2026. Python 3.9+, стандартная библиотека.
Статус: структурная проверка. Исполнение модели и загрузка в платформу не выполнялись.

## Результат

Программа читает model_info.json и coco_categories.json из распакованной директории и выводит JSON со списком errors и warnings. При ошибках код завершения 1; иначе 0. `structure_checked` означает только прохождение перечисленных локальных проверок, а не готовность пакета к загрузке или запуску.

## Запуск

В каталоге распакованного примера:

```sh
python3 check_package.py sample-package
python3 check_example.py
```

Первый результат совпадает с expected.json: errors пуст, присутствуют четыре предупреждения. Угловые скобки в model_type, task_type и profiles оставлены намеренно. Файл weights/fixture.txt — обычный текст, **не модель**. Учебный sample-package загружать в BOX не нужно.

## Что проверяется

- Два JSON-объекта в корне директории.
- Строки model_type и task_type.
- Положительные целые размеры входа (boolean не считается integer).
- Непустой список profiles и принадлежность default_profile этому списку.
- Относительный weights_path, существование файла и отсутствие выхода за каталог.
- Массив categories: integer id без повторов, строки названий, конечный threshold, RGB из трёх integer 0–255, boolean-флаги.

Схема взята из открытого руководства «Пакет пользовательской модели», раздел «Пакет модели: файлы и JSON-схемы». Checker реализует только выбранную схему этого примера. Полные правила конкретного model_type, необязательные поля, defaults и ограничения нужно уточнять в своём runtime. Дополнительные поля разрешены и не проверяются. Некоторые runtime разрешают шаблон в weights_path: для шаблона выдаётся предупреждение, существование весов не подтверждается. Пустой categories не отклоняется, поскольку применимость зависит от задачи.

## Работа со своим пакетом

Передайте путь к отдельной рабочей копии распакованного пакета. Программа читает файлы и ничего не импортирует/не исполняет. Затем проверьте поддержку model_type/task_type/профилей в своей сборке, наличие model.py и зависимостей для выбранного протокола, реальные веса и результаты на ассете. Форматы ONNX/TensorRT и выходы модели скрипт не проверяет. Это дополнение к валидации платформы, а не официальный валидатор всех пакетов.

## Проверки

check_example.py проверяет эталон, выход пути за каталог, отсутствие файла весов, boolean вместо размера, несовпадение профиля и повтор ID категории. Совместимость с BOX 5.0 / Платформой 4.0 требует прогона на конкретной сборке. В ZIP примера нет готовых весов.

Руководства:
- https://vizorlabs.ru/technology/docs/custom-model-package/
- https://vizorlabs.ru/technology/docs/model-lifecycle/
