Тринадцать файлов существовали только на диске ПК владельца, в рабочей копии, отставшей от origin/main на 122 коммита. Их реализация и тесты давно влиты: tests/test_a42_provider_connect.py, test_a49_subagents_skills_memory.py, test_a51_hub_controls_hermes.py, test_a52_local_models_supervisor_dual.py, test_a55_account_connection.py, test_a56_context_compression.py и другие. Постановок, объясняющих, что эти тесты обязаны доказывать, в репозитории не было. Правило записано в agents/AGENTS.md: задание живёт в репозитории, а не в переписке и не в личных папках на диске. A48, A50 и A54 не переносятся: они уже есть на origin под другими именами, содержимое совпадает с точностью до перевода строки в конце файла. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
12 KiB
Задание A56: сжатие контекста — компрессор должен начать работать
Дата поступления
2026-09-01
База
origin/main (26f7d2c).
git fetch origin --prune
git checkout -b antigravity/a56-context-compression origin/main
В main напрямую не пушить.
Порядок исполнения
Два прохода: Flash реализует, Pro проводит аудит. Пункт P0-6 написан для аудитора.
Зона: надзиратель локальных моделей и локальный адаптер. С A55 (подключение аккаунтов) не пересекается.
Задача
На сервере владельца работает вторая локальная модель, называемая компрессором. Ревьюер проверил код: в хабе нет ни одной строки, которая бы к ней обращалась для сжатия. Порт 8082 упоминается ровно один раз — в списке адресов для обнаружения локальных серверов.
Надзиратель из A52 умеет резать задачу на куски по смысловым границам, и это работает. Но накопленный контекст между кусками никто не сжимает, и модель простаивает.
Что проверено ревьюером на живом сервере — заново не мерить
Настройка после переделки раскладки:
кодер Qwen3-Coder-30B-A3B порт 8081 -c 229376 30 008 МиБ 107,4 ток/с
компрессор Qwen3-4B-2507 порт 8082 -c 32768 на CPU, -ngl 0 -t 32
604 МиБ видеопамяти
свободно на карте: 2 152 МиБ из 32 768
Скорость компрессора на процессоре измерена на настоящем промпте:
промпт 5068 токенов → 853,9 ток/с
генерация → 5,4 ток/с
То есть сжать 32 тысячи токенов — около 38 секунд чтения плюс несколько секунд на сводку. Чтение быстрое, генерация медленная; для сжатия это удачное сочетание, потому что на выходе короткий текст.
Качество сжатия у этой модели замерено в A52: 100% — сохраняет порты, адреса, контрольные суммы. Проверено ревьюером повторно: в ответе остались и адрес сервера, и оба порта, и имя модели.
Родной контекст кодера — 262 144 по метаданным GGUF, поэтому 224К внутри предела.
Обёртка над llama-server удалена, юниты описывают действительность. Подменять бинарник больше нельзя: настройки задаются юнитом.
P0-1. Компрессор становится настраиваемой ролью
- Отдельная роль или настройка профиля — «модель для сжатия контекста». Владелец выбирает её в интерфейсе из подключённых локальных профилей.
- Адрес берётся из профиля, а не зашивается. Порт 8082 сегодняшний, завтра другой.
- Компрессор не участвует в маршрутизации Hermes. Это служебная роль: она не должна попадать в цепочки ролей и не обязана проходить порог в 64К. Если владелец захочет — назначит её явно, но по умолчанию нет.
- Компрессор не настроен — сжатие не выполняется, и это нормальное состояние. Показывать
Н/Д: модель для сжатия не выбрана, а не ошибку.
P0-2. Когда сжимать
- Порог по заполнению контекста, а не по числу сообщений. Предел берётся у сервера через
/props, размер накопленного — через/tokenize; оба механизма уже есть в надзирателе после A52. - Значение порога настраивается, умолчание обосновать. Разумно начинать сжатие, когда занято около трёх четвертей.
- Сжимать самое старое, оставляя свежее нетронутым: последние сообщения нужны модели дословно.
- Не сжимать то, что уже сжато. Повторное сжатие сводки теряет факты и делает это незаметно.
P0-3. Что сохранять обязательно
Главное требование к качеству, и оно проверяемое.
Сводка обязана сохранять дословно: пути к файлам, адреса и порты, имена функций и переменных, контрольные суммы, номера версий и коммитов, точные значения из замеров.
- Проверять это тестом: подать текст с известными значениями и убедиться, что они в сводке остались.
- Потеря факта — дефект, а не приемлемая цена сжатия. Модель на этой задаче даёт 100%, значит планка достижима.
- Указывать степень сжатия: было столько токенов, стало столько.
P0-4. Видно, что происходит
- Показывать факт сжатия владельцу: когда, сколько токенов было и стало, сколько заняло.
- Хранить исходный текст до конца задачи, чтобы можно было вернуться, если сводка потеряла нужное.
- Сжатие не должно идти молча: 38 секунд тишины владелец воспримет как зависание.
- Ошибка сжатия не роняет задачу. Компрессор не ответил — работаем с несжатым контекстом и говорим об этом, а не прекращаем работу.
P0-5. Память о том, что сработало
Продолжение линии A52.
- Записывать в общую память (
/srv/projects/AI-Memory): какой объём сжимался, во сколько раз, сколько заняло, сохранились ли факты. - Привязывать к имени сборки GGUF, а не к порту или имени профиля.
- Использовать накопленное: начинать с размера куска, который уже давал хороший результат.
P0-6. Аудит вторым проходом
- Проверить на живом сервере, а не заглушкой: подать текст больше порога и убедиться, что сжатие произошло и факты уцелели.
- Проверить сохранение дословных значений — пути, порты, суммы. Это главный критерий.
- Проверить, что компрессор не попал в маршрутизацию Hermes и не мешает выбору моделей.
- Проверить поведение при недоступном компрессоре: задача продолжается на несжатом контексте.
- Убедиться, что предел контекста и счёт токенов берутся у сервера, а не из умолчаний.
- Побочные изменения объяснить.
- Пропущенный пункт назвать пропущенным.
Ограничения
- Юниты владельца не править: обёртку над
llama-serverтолько что убрали, подменять бинарник запрещено. - Службы
qwen-coderиqwen-compressorвозвращать в рабочее состояние после проверок. - Адреса и порты в код не зашивать.
- Учётные данные и
~/.hermes/agy_profiles/не трогать. - Версию
0.1.2не понижать. - Правило честности без исключений: неизмеренное —
Н/Дс причиной, потерянный факт — дефект.
Критерии приёмки
- Ветка в
origin,git statusчист. - Модель для сжатия выбирается в интерфейсе; адрес берётся из профиля.
- Компрессор не участвует в маршрутизации Hermes по умолчанию.
- Порог сжатия считается от предела контекста, взятого через
/props, и объёма, посчитанного через/tokenize. - Сжимается старое, свежее остаётся дословным; повторное сжатие сводки не выполняется.
- Тест на сохранение дословных значений проходит: пути, порты, контрольные суммы, номера версий.
- Владелец видит факт и степень сжатия; исходный текст сохраняется до конца задачи.
- Недоступный компрессор не роняет задачу.
- Опыт записан в общую память с привязкой к имени сборки GGUF.
- Проверено на живом сервере, вывод приложен.
ruff check .чисто; релизный гейт 10/10; тестов не меньше 599.- Отчёт:
START_HEAD,FINAL_HEAD,origin/main,git status,X passed / Y skipped / Z failed.
Главное
Владелец держит на сервере вторую модель под сжатие контекста, освободил ради неё место и вынес её на процессор. Модель работает, отвечает и сжимает правильно — но в хабе нет кода, который бы её позвал.
Задание закрывает разрыв между настроенным железом и неиспользуемой возможностью. Ключевое требование одно: сводка не теряет фактов. Модель на этой задаче даёт сто процентов, значит планка достижима, и снижать её нельзя — потерянный путь или порт всплывёт через два шага в виде необъяснимой ошибки.
Порядок сдачи
Передать точный FINAL_COMMIT_SHA.