Что такое 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 | EM% | ES% | Judge% |
|---|---|---|---|---|
Koda-next-edit (1.5B) | 3 | 27.2 | 84.7 | 28.2 |
zeta-2 (8B) | 0 | 17.0 | 94.3 | 20.4 |
Instinct (7B) | 2 | 19.2 | 76.2 | 20.2 |
zeta (7B) | 3 | 17.2 | 91.5 | 19.2 |
sweep-next-edit-v2-7B | 0 | 9.4 | 77.3 | 9.6 |
sweep-next-edit-1.5B | 26 | 3.2 | 72.7 | 4.0 |
sweep-next-edit-0.5B | 232 | 1.6 | 45.6 | 2.4 |
На наш взгяд тут правильнее смотреть на оценку судьёй, из-за разницы форматов моделей.
Таблица замеров моделей судьёй на разных сетах (судьёй более честно сравнивать разные форматы между собой):
Judge% | Our test | Instinct test | NEP test | Zeta eval | Avg weighted | Avg |
|---|---|---|---|---|---|---|
Koda-next-edit (1.5B) | 28.2 | 6.9 | 58.6 | 46.7 | 22.7 | 35.1 |
zeta-2 (8B) | 20.4 | 8.0 | 50.0 | 52.9 | 19.2 | 32.8 |
zeta (7B) | 19.2 | 8.5 | 51.0 | 50.0 | 19.1 | 32.2 |
Instinct (7B) | 20.2 | 23.1 | 35.2 | 26.7 | 23.9 | 26.3 |
sweep-next-edit-v2-7B | 9.6 | 2.9 | 9.0 | 41.2 | 6.6 | 15.7 |
sweep-next-edit-1.5B | 4.0 | 0.4 | 2.9 | 35.3 | 2.5 | 10.6 |
sweep-next-edit-0.5B | 2.4 | 0.7 | 0.5 | 0.0 | 1.3 | 0.9 |
Тут на отдельном сете часто лучше та модель, для которой этот сет является родным. Простое среднее ставит нашу модель koda-next-edit (1.5B) на первое место, средневзвешенное (по числу сэмплов) на второе после Instinct (7B). Разница объясняется размером родного для Instinct теста, его вклад в средневзвешенное доминирует. Показательным сетом можно считать датасет NEP, как независимый бенчмарк (не является родным ни для одной из моделей). Итого, в среднем наша модель заняла топ-1 место, обогнав даже большие модели.
Что дальше
В планах у нас ставить искать подходы по обогащению контекста: попробуем добавлять в контекст так же наиболее похожие куска кода, и ещё добавлять подсказки от линтера. Так же будем пробовать модели побольше, если удастся ускорить инференс для нужного латенси. Так же ограничением для NES являются возможности UI, то как потом в плагине собственно показывать подсказки, тоже будем улучшать.
Как работает в плагине
Начиная с версии Kodacode 0.9.0 для VSCode мы добавили поддержку нашей модели в режиме бета тестирования. Пока есть что улучшить в части отображения подсказок и есть что подправить, но уже можно пробовать. В следующих версиях отшлифуем и будет кайф. Вот пример, как это работает:

А вок как переключить в настройках на Next Edit

Скачивайте и пользуйтесь KodaCode вот тут: https://download.kodacode.ru
И подписывайтесь на наш ТГК, чтобы не пропустить новую информацию про Koda, AI и всё что с ними связано!
























