Skip to content

v0.3.0

Choose a tag to compare

@turkprogrammer turkprogrammer released this 29 Sep 09:11
· 26 commits to main since this release

[0.3.0] — 2026-09-29

Added

  • [ compose ] в панели system.prompt — по текущей вакансии один
    не-стриминговый LLM-вызов собирает системный промпт-«плейбук» и отбирает
    нерелевантные разделы профиля (композер получает только ##-заголовки,
    а не весь контент), которые затем вырезаются из user-сообщения через
    dropSections. Профиль уходил в каждый запрос целиком, и основной выигрыш
    фичи — сокращение этого шума, а не сам промпт (~600 Б). Откат — кнопкой
    вернуть прежний, reset default чистит и промпт, и отбор.
  • POST /api/prompt/compose (пакет internal/prompt): возвращает
    systemPrompt, dropSections, reason, truncated, sections,
    droppedBytes, elapsedMs — видно, сколько профиля сэкономлено.
  • Поле usedSystemPrompt в SSE-done — что фактически отправлялось модели
    (кастом или дефолт): отладка перестала быть догадкой.
  • Подпись #prompt-sub показывает источник промпта честно: кастом /
    авто / default (раньше очищенное поле давало дефолт на бэке, а UI
    продолжал утверждать «кастом»).
  • Хард-защита антигаллюцинации: разделы с «ФАКТЫ-ОГРАНИЧИТЕЛИ» невырезаемы
    по построению — prompt.Parse отбрасывает такие dropSections, даже если
    модель их вернула.
  • Две страховки вокруг compose: при смене вакансии старый отбор разделов
    сбрасывается (иначе по чужой вакансии молча вырезался бы релевантный
    раздел), а потеря инвариантов безопасности в собранном промпте
    (missingInvariants) показывается предупреждением — playbook заменяет
    дефолт целиком, и «не выдумывай» не должно исчезнуть молча.
  • prompt.Parse принимает дроп только по паре (file, heading): заголовок с
    чужим файлом ничего не вырежет и больше не отчитывается об успехе. Обрезка
    промпта по байтовому лимиту не разрывает UTF-8-руну.