Commit Graph
6 Commits
Author SHA1 Message Date
alexandClaude Opus 5 39c807d4de Эмбеддер bge-m3: смысловой поиск на русском наконец разделяет смыслы
nomic-embed-text на русском не работал: в замере «велосипедная камера»
набирала мультиметру 0.704 — больше, чем верный ответ на «паяльник» (0.691).
Зазор −0.013, то есть мусор систематически обгонял правильное и порогом это
не лечилось.

bge-m3 на том же наборе: верные не ниже 0.537, мусор не выше 0.460,
зазор +0.077. Префиксы задачи ему не нужны, поэтому обнулены.

Порог откалиброван на настоящей базе, а не на придуманном наборе, и картина
там честнее: абстрактное «чем посветить» набирает лампам 0.411, а посторонняя
«детская коляска» — 0.535. Полностью не разделяются, поэтому SEMANTIC_MIN
выставлен так, чтобы отсечь весь мусор ценой слабых догадок — уверенно
показанное не то хуже честного «не нашёл». Точных запросов это не касается:
они находятся по словам и тегам.

Добавлен tools/reindex.py: смена эмбеддера требует полного пересчёта векторов,
иначе смешанная база тихо портит поиск. Скрипт делает копию перед работой.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 18:23:22 +03:00
alexandClaude Opus 5 781690365e Без Ollama приложение больше не выглядит зависшим
Проверка работы с недоступной Ollama показала: если машина с ней просто
выключена, пакеты уходят в никуда и каждый вызов честно ждёт свой таймаут.
Замер: запись одной вещи — 92 секунды, разбор фразы — 154, правка — 30.
Формально всё работало, но пользоваться этим невозможно.

Предохранитель в ollama.py:
- перед дорогим запросом быстрая проверка TCP-соединения (1.5 с вместо 120);
- после неудачи 30 секунд к серверу вообще не обращаемся;
- при успехе результат кешируется на 5 секунд, чтобы не проверять на каждом
  шаге;
- смена адреса в настройках и проба адреса сбрасывают паузу, иначе новый
  сервер полминуты считался бы мёртвым.

Замер после: те же операции отвечают мгновенно, первая проверка — 1.5 с.
Проверено в двух режимах недоступности: закрытый порт и молчащий адрес.

Тесты закрепляют поведение: запись, разбор фразы и поиск при мёртвом адресе
обязаны укладываться в 3 секунды и работать по существу — вещь записывается
без тегов, фраза разбирается регулярками, поиск идёт по словам.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 17:56:46 +03:00
alexandClaude Opus 5 5926967270 Инсталлятор: убрана кириллица, ломавшая его на запуске
cmd.exe читает .cmd в системной кодировке, поэтому русские комментарии rem
превращались в мусор, и cmd пытался выполнять обрывки строк как команды.
Правило «в батниках только ASCII» уже было записано в шапке файла — и всё
равно нарушено, поэтому теперь его проверяют тесты: любой .cmd проекта
обязан быть чистым ASCII.

Ещё две правки по итогам установки с нуля в чистой папке:
- запись .env вынесена из блока if/else в метки: cmd неверно разбирает блок,
  внутри которого есть rem-строки и вызов PowerShell с переносами через ^,
  и сообщает только «The syntax of the command is incorrect»;
- запуск приложения в конце идёт по полному пути, а не по имени start.cmd —
  относительное имя разрешается не во всех оболочках.

Проверено установкой с нуля: клонирование анонимно из публичного
репозитория, venv, зависимости, .env с выбранным адресом, ярлык на рабочем
столе. Личные данные в архив не попадают — ни базы, ни фотографий, ни .env.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 16:58:10 +03:00
alexandClaude Opus 5 9cbc7f02ac Обзор и поиск — плиткой, как витрина в магазине
Раньше карточки шли одна под другой, и коробка с двумя десятками вещей
превращалась в длинную колонку. Теперь сетка на CSS grid с auto-fill: сколько
колонок влезает в экран, столько и будет — на телефоне обычно две,
на планшете три-четыре.

Чтобы плитка была компактной:
- превью квадратные (object-fit: cover) — ряд выглядит ровным;
- кнопки только иконками, подписи в них не влезали; что означает какая,
  написано подсказкой под сеткой и в title;
- теги в плитке скрыты, они её распирали — видны при правке;
- карточка с открытой правкой растягивается на всю ширину, иначе поля
  ввода оказались бы в колонке шириной с ладонь.

Один результат сеткой не оформляется: выглядело бы как обрезанная витрина.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 15:03:17 +03:00
alexandClaude Opus 5 4f298ac203 Настройка из браузера: вкладка ⚙ вместо правки файла
Инсталлятор спрашивает адрес Ollama в консоли, но это можно пропустить
и задать всё с телефона: адрес, модель для разбора фраз, модель для поиска
по смыслу. «Проверить связь» показывает, отвечает ли Ollama и сколько там
моделей; сами модели выбираются из реально установленных, а не вводятся
руками. Если Ollama молчит, предупреждение наверху ведёт прямо в настройки.

Настройки применяются сразу: модули читают их через config.X, а не забирают
копию при импорте, поэтому перезапуск не нужен.

Из веба правятся только OLLAMA_HOST и две модели — по белому списку, потому
что .env читает приложение при запуске. Адрес проверяется на формат, имена
моделей — на недопустимые символы.

Попутно исправлены два дефекта, найденных тестами:
- .env в песочнице теперь тоже свой; до этого прогон тестов перезаписывал
  рабочий файл настроек;
- значения проверяются все до применения: раньше неверное имя модели
  оставляло уже подменённый адрес Ollama.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 14:40:15 +03:00
alexandClaude Opus 5 17b7d49d2f hlamingo — помощник «где что лежит»
Веб-помощник для домашнего склада: помнит, в какой коробке и в каком месте
лежит вещь, и находит её по названию, тегам и маркировке. Открывается
с телефона, интеллект — локальная Ollama.

Основное:
- структурный ввод «место → ёмкость → предмет» и кнопки
  Положить / Забрать / Переместить / Удалить;
- иерархия мест (Гараж → Стеллаж А → Полка 2), ёмкости с кодом «буква+цифра»,
  состояние «на руках» для взятых вещей;
- поиск по словам с учётом русских окончаний, теги от модели расширяют
  словарь предмета, смысловой поиск — вспомогательный (замеры в search.py);
- фото к вещам и коробкам: съёмка и выбор из галереи;
- правка и удаление всех сущностей, удаление коробки не теряет её содержимое;
- работает и без Ollama: отключаются только разбор фраз, теги и поиск
  по смыслу.

Данные (data/, static/photos/) и локальный конфиг (.env) в репозиторий
не попадают. Тесты работают только в песочнице: путь к данным берётся
из окружения, tests/guard.py отказывается запускаться на живых данных.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 14:27:20 +03:00