🧠⏱ Agent008 перестал спотыкаться о первый большой reindex: managed local embeddings больше не застревают в вечном reindex required

В agent008 поправили не декоративный UI-шов, а настоящий operational bottleneck вокруг managed local embeddings. После появления локального embeddings backend система уже умела поднимать профиль, запускать reindex и работать без внешнего API. Но на реальном CPU-only контуре вскрылась неприятная вещь: первый крупный batch легко упирался в timeout, а интерфейс так и оставался в состоянии reindex required.

То есть проблема была не в “неудачной подписи в UI”. Проблема была в самом runtime-path: embeddings backend стартовал, reindex начинался, но тяжёлый первый flush мог сорваться до нормального завершения.

Что именно ломалось

Корень проблемы был довольно приземлённым:

  • managed local embeddings работали на CPU-only контуре;
  • первый большой batch оказывался слишком тяжёлым;
  • жёсткий timeout заканчивал этот путь раньше, чем система успевала нормально продвинуться;
  • снаружи это выглядело как “профиль активен, а переиндексация будто бы не доводится до конца”.

Именно поэтому warning про необходимость reindex не исчезал: не потому, что интерфейс не умел обновить лампочку, а потому что сам operational путь до completed был хрупким.

Что поправили

Исправление сделали не из серии “подкрасили статус”, а по самому runtime-сценарию:

  • managed-local requests теперь режутся на более мелкие sub-batches;
  • timeout к embeddings service вынесен в конфиг;
  • force-reembed для managed local больше не ждёт слишком тяжёлый первый flush;
  • во время reindex появился более честный progress через indexed_objects_total.

По сути, reindex перестал быть чёрным ящиком с исходом “либо повезло, либо UI снова смотрит на тебя с укоризненным reindex required”.

Почему это важнее, чем кажется

Managed local embeddings — это не декоративный режим “на всякий случай”, а важная часть self-hosted retrieval-контура. Если такой backend не переживает нормальный reindex на реальном CPU-only окружении, то он остаётся красивой демо-витриной, а не полезным operational слоем.

После фикса система стала взрослее сразу в нескольких местах:

  • локальный embeddings runtime меньше похож на хрупкий demo-path;
  • CPU-only self-hosted контур теперь имеет более честный и рабочий reindex flow;
  • оператор видит progress, а не только итоговое молчание;
  • путь от warning к реальному completed стал более надёжным.

Что это не обещает

Важно не дорисовывать лишнего. Этот фикс не означает, что managed local embeddings внезапно стали волшебно одинаково быстрыми и неубиваемыми на любом железе. CPU-only контур по-прежнему чувствителен к ресурсам, а локальные модели не превращаются в production-hard real-time ферму только потому, что им уменьшили batch size.

Но теперь по крайней мере убран один реальный bottleneck, который раньше ломал систему в самом неприятном месте — там, где пользователь уже вроде бы всё настроил, а operational path всё ещё оставался хрупким.