Commit Graph
6 Commits
Author SHA1 Message Date
alexandClaude Opus 5 bae5116d77 Подсказка названия по фотографии
Фото выбрано в форме — приложение показывает его модели и предлагает название
с прочитанными надписями. «Подставить» переносит в поля, «Не надо» прячет.
Само не подставляется, и это принципиально: модели домысливают марки
и артикулы, когда надписей не видно. В замере клипсу для кабеля модель назвала
«конструктором LEGO Technic, 8376, 401 шт.». Запрет на выдумывание в промпте
помог: та же вещь стала «красной щёткой для посуды».

Смотрит gemma3:4b. Выбрана замером на настоящих снимках из базы:
  gemma3:4b     3.5 с, отвечает всегда, надписи читает верно
                («Лампа светодиодная C35, Нейтральный белый, 9 Вт LED, E14»);
  qwen3-vl:8b   11-32 с и часто пустой ответ — это ризонер, ему нужен бюджет
                в 2000+ токенов, и уменьшение картинки не спасает.
Проверялась и гипотеза, что дело в размере снимка: у gemma3 разницы между
1280 и 512 px почти нет, у qwen3-vl время падает с 62 до 41 с, но ответ
всё равно пуст. Картинка всё же уменьшается до 768 px — незачем гонять лишнее.

Генерация тегов чинилась по ходу: на «Стабилизатор 7805 (TO-220)» модель
отвечала массивом объектов с пояснениями, не укладывалась в 256 токенов,
и JSON обрывался на полуслове — теги выходили пустыми. Бюджет поднят до 500,
промпт требует плоский массив строк, а из битого ответа строки теперь
вытаскиваются регуляркой: лучше несколько живых тегов, чем ничего.

Pillow добавлен в зависимости — для уменьшения картинки перед распознаванием.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 01:24:49 +03:00
alexandClaude Opus 5 01d7f17f89 qwen3:8b вместо qwen2.5, отмена правки и пересоздание тегов
Замер на наших задачах (разбор 8 фраз + теги для 6 предметов):
  qwen2.5:7b  разбор 8/8, но теги «электротool Makita», «вoltage meter»
              (первая буква кириллическая), «многофункциональный мера» —
              модель думает по-английски и переводит на ходу;
  qwen3:8b    разбор 8/8, теги на нормальном русском.
Плата — примерно на треть медленнее на тегах. Теги важнее: по ним вещь
и находится.

Поддержка моделей-ризонеров: ollama.chat получил think=False. Без него
qwen3 тратит весь бюджет ответа на внутренний монолог и возвращает пустой
content — на первом прогоне модель выглядела нерабочей.

Разбор ответа с тегами укреплён: qwen3 иногда присылает объект
{"name":..., "synonyms":[...]} вместо списка строк, и он попадал в теги
целиком как строка. Теперь достаётся вложенный список, отсеиваются дубликаты
в разном регистре, вложенные объекты, bool и слишком длинные строки.

По замечаниям Алекса в правке предмета:
- кнопка «Отмена» — раньше открытую форму можно было только сохранить или
  удалить вещь целиком;
- кнопка «🔄 Пересоздать теги» — после смены модели теги остаются старыми,
  и это способ обновить их, не перезаводя вещь. Новый список показывается,
  но не сохраняется молча: его ещё можно поправить руками.

В README добавлен раздел «Какую модель выбрать» с замерами и требованиями
к своей модели для тех, кто ставит приложение себе.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 18:51:13 +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 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