Что такое Next Edit Suggestions
Next Edit Suggestions (NES) это режим автодополнения, который предсказывает следующее редактирование программиста: что он изменит, где и как. Модель смотрит не только на код, но и на последнюю серию правок и предсказывает следующее действие в той же логике. Образно говоря, это модель которая работает в пространстве действий и намерений программиста.
В отличие от обычного автокомплита, NES:
- опирается на историю недавних правок
- работает не только под курсором, а в любом месте файла
- может не только добавлять код, но и удалять и изменять
Типичные кейсы NES:
- массовое переименование, если поменял название переменной в одном месте
- обновление вызовов под новую сигнатуру
- продолжение начатого рефакторинга
- приведение к единому стилю
- тиражирование фикса
- добавление документации по аналогии
- удаление мёртвого кода
- балансировка скобок и мелкие линт-фиксы
На такую модель можно смотреть не как на модель текст -> текст, а как на модель последовательность действий -> последовательность действий.
Зачем это всё, если есть агенты
Есть мнение, что код-комплишн и некст-эдит не нужны, весь хайп на агентах. Например Sweep пишут: “We decided to shut down because autocomplete usage is declining industry-wide as agents have become significantly better”. Мы у себя в команде Koda видим ситуации при редактировании кода, когда надёжнее и в целом быстрее пробежаться что-то поправить контролируемо и с лёгкостью нажатия таба, и не нужно формулировать промпт.
В теории NES расширяем до next action / next everything, например можно представить что если следующее действие это открыть терминал или запустить сборку, было бы неплохо получать и такие предложения.
Как обучали
Для выбора базовой модели, было важно уложиться в желаемый латенси на запрос, поэтому мы замерили на скорость инференса на наших целевых гпу серверах семейство моделей, и остановились на Qwen2.5-Coder-1.5B и deepseek-coder-1.3b. Обе эти кодер модели которые была предобучены с исопльзованием FIM режима. По метрикам в итоге остановились на квен-кодере как базе для SFT.
По данным для обучения, у нас в Koda были накоплены за год работы анинимизированные частичные логи от нашей модели код-комплишена. Мы реализовали пайплайн превращения этих код-комплишн FIM логов для NES датасета. Сгруппировав по юзеру+сессии+файлу получили последовательности шумных частичных локальных изменений кода. Посколькую одна правка была представлена в таких логах десятками микро-событий, склеили подпоследовательности в те которые образут по логике одну правку, использовали для этого алгоритм мерджа Incremental Difference Detecting из работы “NES: An Instruction-Free, Low-Latency Next Edit Suggestion Framework Powered by Learned Historical Editing Trajectories”. Дальше было важно отфильтровать те их из оставшихся последовательностей правок, которые действительно близки природе NES таски, а именно те в которых таргет был бы сильно связан причинной связью с историей правок кода, а не просто быть следующим логичным кусочком кода. В итоге из миллионов сэмплов получили дясятки тысяч. Так же помогло сделать среди типов insert/replace/delete правок сделать апсемлинг replace. Обучили в SFT режиме, с выбором лучшего чекпоинта по прокси-метрикам.
Таблицы сравнений моделей
В опенсорсе на тему NES есть:
- модель Instinct и датасет Instinct от разработчиков плагина Continue
- модель Zeta и Zeta 2 и датасет Zeta от разработчиков редактора Zed
- модели Sweep от разработчиков плагина Sweep AI
- датасет NEP (переработанный CommitPack) от авторов статьи “Next Edit Prediction: Learning to Predict Code Edits from Context and Interaction History”
Из основных закрытых NES: Cursor Tab, GitHub Copilot NES, JetBrains AI Assistant.
Открытые модели главным образом дообучены на основе Qwen2.5-Coder моделей, кроме Zeta 2 которая на основе Seed-Coder-8B.
В качестве метрик используем: Exact Match (EM), Edit Similarity (ES), Prefix Similarity (PS), Judge. EM показывает точное совпадение, ES показывает сильно ли нужно править, Judge оценка через GPT-5.2
Таблица замеров моделей на нашем тестовом сете:
Our test (500 samples)
n_of_truncated
Koda-next-edit (1.5B)
zeta-2 (8B)
Instinct (7B)
sweep-next-edit-v2-7B
sweep-next-edit-1.5B
sweep-next-edit-0.5B
На наш взгяд тут правильнее смотреть на оценку судьёй, из-за разницы форматов моделей.
Таблица замеров моделей судьёй на разных сетах (судьёй более честно сравнивать разные форматы между собой):
Instinct test
Avg weighted
Koda-next-edit (1.5B)
zeta-2 (8B)
Instinct (7B)
sweep-next-edit-v2-7B
sweep-next-edit-1.5B
sweep-next-edit-0.5B
Тут на отдельном сете часто лучше та модель, для которой этот сет является родным. Простое среднее ставит нашу модель koda-next-edit (1.5B) на первое место, средневзвешенное (по числу сэмплов) на второе после Instinct (7B). Разница объясняется размером родного для Instinct теста, его вклад в средневзвешенное доминирует. Показательным сетом можно считать датасет NEP, как независимый бенчмарк (не является родным ни для одной из моделей). Итого, в среднем наша модель заняла топ-1 место, обогнав даже большие модели.
Что дальше
В планах у нас ставить искать подходы по обогащению контекста: попробуем добавлять в контекст так же наиболее похожие куска кода, и ещё добавлять подсказки от линтера. Так же будем пробовать модели побольше, если удастся ускорить инференс для нужного латенси. Так же ограничением для NES являются возможности UI, то как потом в плагине собственно показывать подсказки, тоже будем улучшать.
Как работает в плагине
Начиная с версииKodacode0.9.0 для VSCode мы добавили поддержку нашей модели в режиме бета тестирования. Пока есть что улучшить в части отображения подсказок и есть что подправить, но уже можно пробовать. В следующих версиях отшлифуем и будет кайф. Вот пример, как это работает:
А вок как переключить в настройках на Next Edit
Скачивайте и пользуйтесь KodaCode вот тут:https://download.kodacode.ru
Иподписывайтесь на наш ТГК, чтобы не пропустить новую информацию про Koda, AI и всё что с ними связано!