vk_hackathon/.ai_update/changes.md
2026-04-18 12:38:29 +03:00

5.7 KiB
Raw Blame History

AI Change Log

Дата создания: 2026-04-18

Как пользоваться

Этот файл - рабочий журнал изменений для Codex.

Перед новыми правками нужно прочитать этот файл и учитывать:

  • что уже было изменено;
  • какие файлы трогались;
  • какие проверки запускались;
  • какие ограничения и договоренности есть по задаче.

После каждой осмысленной правки нужно добавлять новую запись с:

  • кратким описанием изменения;
  • списком измененных файлов;
  • результатом проверок;
  • открытыми рисками или TODO, если они есть.

Договоренности

  • Не менять контракты POST /index, POST /sparse_embedding, POST /search.
  • По текущей задаче фокус держать на index.
  • Не трогать search, docker-compose.yml и инфраструктуру без отдельной просьбы.
  • Не откатывать чужие или пользовательские изменения.

Записи

Что сделано:

  • В index/main.py заменен символьный chunking на сборку чанков окнами сообщений.
  • Добавлен учет временного разрыва между сообщениями через INDEX_TIME_GAP_SECONDS.
  • Overlap теперь работает по границам сообщений через INDEX_CHUNK_OVERLAP_MESSAGES, а не по хвосту строки.
  • Сообщения рендерятся структурно: author, time, thread, mentions, флаги, quote, forward, file, system_event.
  • file_snippets парсятся как JSON; в индекс попадают имя файла, mime, url, владелец и дата создания.
  • member_event превращается в индексируемый системный текст.
  • page_content, dense_content, sparse_content разведены.
  • В index/Dockerfile старый CHUNK_SIZE=10 заменен на реальные INDEX_* настройки chunking.
  • В search/main.py исправлен runtime-баг с неинициализированным must_conditions.
  • Основной query в search теперь берется из question.search_text с fallback на question.text.
  • question.variants, question.hyde, question.keywords и entities используются как дополнительные dense/sparse запросы.
  • Retrieval делает несколько prefetch-запросов и fusion через Qdrant.
  • Rerank больше не выбрасывает retrieval-хвост.
  • Финальные message_ids агрегируются, дедуплицируются и ограничиваются top-50.

Измененные файлы:

  • index/main.py
  • index/Dockerfile
  • search/main.py
  • .ai_update/changes.md

Проверки:

  • python3 -m py_compile index/main.py search/main.py
  • Прямой smoke build_chunks на data/Go Nova.json.
  • Прямой smoke endpoint-функции index(...) на data/Go Nova.json.
  • Pure smoke для search helper-функций через stub-модули, потому в host env нет qdrant_client и httpx.

Результаты проверки индекса:

  • Было 29 чанков, стало 15.
  • Покрытие сообщений на data/Go Nova.json: 25 из 25.
  • Системное сообщение с member_event больше не выпадает.
  • file_snippets с IMG_8471.webp попадает в sparse_content.
  • Quote и forward маркеры попадают в dense_content.
  • page_content, dense_content, sparse_content больше не одинаковые.

Открытые риски:

  • Полный интеграционный прогон search с настоящими Qdrant/dense/rerank локально не выполнялся.
  • date_range фильтр включается только если установленный qdrant_client поддерживает models.DatetimeRange.
  • Полный docker build локально не запускался.

2026-04-18 - создан журнал изменений

Что сделано:

  • Создан файл .ai_update/changes.md.
  • Зафиксировано, что до этого код не менялся, была только разведка репозитория и ТЗ.

Контекст по текущему состоянию:

  • index/main.py сейчас использует символьный chunking.
  • render_message берет только message.text и parts[*].text.
  • page_content, dense_content, sparse_content сейчас одинаковые.
  • В примере data/Go Nova.json текущий build_chunks покрывает 24 из 25 сообщений; системное сообщение с member_event выпадает из индекса.

Измененные файлы:

  • .ai_update/changes.md

Проверки:

  • Код не запускался, потому что создан только журнал.

Следующий ожидаемый фокус:

  • Перестроить индексный renderer и chunking в index/main.py, если пользователь попросит перейти к реализации.