Проверка ресурсов перед установкой
В SDK 0.4.4 общий ModuleInstaller проверяет ресурсы целевой машины перед установкой, обновлением и подготовкой пакета к импорту. Агент доставки также проверяет узел перед загрузкой. Для удалённой установки измерения выполняются на сервере; ресурсы компьютера разработчика их не заменяют.
Обновление существующего окружения: python -m pip install --index-url https://engine.yeti3.ru/sdk/simple/ yeti3-engine==0.4.4. Новая политика не возникает автоматически в уже запущенных старых процессах. После обновления зависимостей перезапустите агент установки штатным способом.
Требования решения
[requirements.resources]
memory_mb = 256
disk_mb = 512
cpu_count = 1
# gpu_memory_mb = 4096Размеры указаны в МиБ. Проверяется доступная, а не установленная RAM; диск проверяется по пути установки. CPU учитывает доступные ядра и полные единицы квоты. Linux учитывает cgroup-v2, включая родительские лимиты, и стандартные точки монтирования cgroup-v1. Для нестандартных изолированных окружений требуется дополнительная проверка хоста. На macOS RAM оценивается через vm_stat. Доступная GPU-память автоматически не угадывается по системной RAM: отсутствие замера означает «неизвестно» и требует решения владельца.
Без требований в манифесте проверка всё равно выполняется с исходными рекомендациями 256 МиБ RAM, 512 МиБ диска и 1 CPU. Это проверка возможности установки, а не нагрузочный тест или резервирование ресурсов.
Рекомендации и продолжение с риском
from pathlib import Path
from yeti3_core import ResourceRiskAcceptance
from yeti3.sdk.installer import ModuleInstaller, InstalledModuleRegistry
from yeti3.sdk.installer.state import InstalledStateStore
def owner_decision(report):
# Хост показывает report['recommendations'] авторизованному владельцу.
# Возвращайте принятие только после его явного решения для этой установки.
return None # по умолчанию остановить установку
installer = ModuleInstaller(
InstalledModuleRegistry(),
resource_decision=owner_decision,
state_store=InstalledStateStore(Path(".yeti3/installed.json")),
)
installer.install_package('my-package/yeti3-module.toml')Для явного продолжения функция возвращает ResourceRiskAcceptance(actor='account:42', reason='Принимаю риск на тестовом стенде'). Не возвращайте это значение без запроса владельца и не назначайте глобальный автоматический обход. Неавторизованный запрос из браузера не должен формировать actor: его определяет хост по своей сессии.
Отчёт содержит измерения, требования, рекомендации, время, путь назначения и идентификатор манифеста. При постоянном state_store принятое решение пишется в приватный файл .resources.jsonl рядом с состоянием установщика. В памяти отчёты доступны в installer.resource_reports. Повторная установка измеряет ресурсы заново.
Принятие риска относится только к нехватке/неизвестности ресурсов. Проверки совместимости версий, целостности пакета, прав, лицензии и критически необходимого свободного места для распаковки по-прежнему нельзя пропустить этим решением. Форма подтверждения — обязанность интерфейса хоста; ядро останавливает установку, если хост не предоставил явного решения владельца.