1. Выберите трек
service получает полный кадр и возвращает одну карточку центрального вина: top-1 slug. Официальный контракт организаторов требует один slug. Действия no_match и insufficient_information — дополнительные продуктовые проверки этого стенда, не часть официального top-1 сценария.
retrieval получает проверенный кроп целевого вина. Верните упорядоченный список slug; стенд считает top-1, top-5, top-20 и MRR.
Каждый кейс принадлежит одному треку. Метка «из каталожного референса» означает, что запрос может быть связан с референсом и его результат нельзя считать независимой проверкой.
2. Получите данные и токен
Используйте общий пароль участника, согласованный с Максом. Для API он передаётся как Bearer-токен; значение не записывайте в код или отчёты. Токен разбора выдаётся отдельно. Сервис получает их из /etc/lct-eval.env через переменные окружения LCT_EVAL_PARTICIPANT_TOKEN и LCT_EVAL_REVIEW_TOKEN. Для авторизованных агентов участнический токен находится в /srv/lct/eval-access/participant.env; токен разбора — в /srv/lct/eval-access/review.token. Эти файлы не раздаются через сайт и не входят в архив. Не помещайте токен в URL или файл submission.
export LCT_EVAL_PARTICIPANT_TOKEN='<ваш токен>' BASE='https://cv.ops.dzap.pw' curl -H "Authorization: Bearer $LCT_EVAL_PARTICIPANT_TOKEN" "$BASE/api/baskets" curl -H "Authorization: Bearer $LCT_EVAL_PARTICIPANT_TOKEN" "$BASE/api/baskets/v1/download" -o lct-eval-v1.zip
Архив содержит публичный манифест, изображения и при наличии список допустимых slug. В нём нет правильных ответов. Хеш каждого изображения и suite_hash связывают прогон с точной версией. На сервере бинарник находится в /srv/lct/maks/eval/current/lct-eval, набор — в /srv/lct/data/eval, а процесс запускается unit lct-eval.service. Права на файлы доступа назначает оператор; если доступа к ним нет, запросите токен у него.
PowerShell
$token = Read-Host 'Participant password or token'
$base = 'https://cv.ops.dzap.pw'
$headers = @{ Authorization = "Bearer $token" }
Invoke-RestMethod -Headers $headers "$base/api/baskets"
Invoke-WebRequest -Headers $headers "$base/api/baskets/v1/download" -OutFile lct-eval-v1.zip
$env:LCT_EVAL_PARTICIPANT_TOKEN = $token3. Запустите решение
Решение принимает POST /v1/eval/predict с multipart-полем image. Официальный контракт принимает HTTP 200/201 и JSON {"slug":"..."} либо первый элемент массива [{"slug":"..."}]. Для диагностического retrieval можно вернуть {"ranked_slugs":["...","..."]}. Лимит подключения 5 секунд, весь запрос — 10 секунд.
lct-eval run -source api -base "$BASE" -track service \ -endpoint http://127.0.0.1:8080/v1/eval/predict \ -submission-id my-service-001 -solution my-model -solution-version 0.1 \ -commit abc123 -config-hash cfg1 -weights-version w1 -catalog-version c1 lct-eval run -source archive -archive lct-eval-v1.zip -base "$BASE" \ -track retrieval -endpoint http://127.0.0.1:8080/v1/eval/predict \ -submission-id my-retrieval-001 -solution my-model -solution-version 0.1
Для одной корзины добавьте -baskets IMG-09. Клиент проверяет SHA-256 входов, фиксирует ошибки и таймауты, отправляет фактические предсказания. Неполный submit допустим: пропущенные проверенные кейсы остаются в знаменателе.
4. Отправьте результат вручную при необходимости
Возьмите suite_hash, basket_id и case_id из GET /api/baskets. Запишите только фактический ответ вашего решения. Поле status:"ok" означает, что решение ответило, а не что ответ верен.
cat > submission.json <<'JSON'
{
"submission_id":"my-service-002",
"suite_version":"v1",
"suite_hash":"<suite_hash из манифеста>",
"track":"service",
"basket_ids":["IMG-09"],
"solution":{"name":"my-model","version":"0.1","commit":null,"config_hash":null,"weights_version":null,"catalog_version":null},
"submitted_by":"agent",
"results":[{"case_id":"case-000046","status":"ok","prediction":{"slug":"<фактический slug>"},"latency_ms":420}]
}
JSON
curl -H "Authorization: Bearer $LCT_EVAL_PARTICIPANT_TOKEN" \
-H 'Content-Type: application/json' --data-binary @submission.json \
"$BASE/api/submissions"
Для retrieval используйте "track":"retrieval", корзины и кейсы этого трека и "prediction":{"ranked_slugs":["first","second"]}. Не подставляйте неизвестный ответ ради заполнения поля: используйте фактическую ошибку/таймаут или оставьте кейс не запущенным.
5. Посмотрите результат
После submit откройте «Матрица прогонов». Столбец появится по submission_id. Повтор тех же данных вернёт прежний отчёт; другие данные с тем же ID дадут конфликт. Режим разбора требует отдельного токена и показывает эталон в деталях кейса.
curl -H "Authorization: Bearer $LCT_EVAL_PARTICIPANT_TOKEN" "$BASE/api/runs" curl -H "Authorization: Bearer $LCT_EVAL_PARTICIPANT_TOKEN" "$BASE/api/runs/my-service-002"
Это доверенный стенд для регрессии и разбора: участник видит результат каждого своего кейса. Разделение файлов защищает эталон от случайной выдачи во входном пакете, но не делает набор слепым после повторных прогонов. Токен в браузере хранится только в текущей сессии.