vk_hackathon/.ai_update/changes.md
2026-04-18 13:35:23 +03:00

6.6 KiB
Raw Permalink Blame History

AI Change Log

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

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

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

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

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

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

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

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

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

Записи

2026-04-18 - разрешены конфликты с upstream/main

Что сделано:

  • Объединены записи журнала из ветки PR и upstream/main.
  • В search/main.py сохранены расширенные retrieval/rerank доработки из обеих веток.
  • Убраны конфликтные маркеры после merge upstream/main.
  • Сохранены безопасные лимиты retrieval и защита от падения rerank.

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

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

Проверки:

  • python3 -m py_compile index/main.py search/main.py
  • Прямой smoke build_chunks на data/Go Nova.json: 15 чанков, покрыто 25 из 25 сообщений.
  • Pure smoke для search/main.py helper-функций через stub-модули.

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

  • Полный интеграционный прогон с настоящими Qdrant/dense/rerank зависит от внешних сервисов.

2026-04-18 - index P1 and search retrieval/rerank

Что сделано:

  • В 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-хвост.
  • Retrieval points дедуплицируются по Qdrant point id.
  • Финальные message_ids агрегируются по score, дедуплицируются и ограничиваются 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

Проверки:

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