# Diet — конфигурация. Рендерится плейбуком playbook-diet.yml. # # Здесь только обязательные поля и те умолчания, что меняются осознанно: # полный справочник полей с их умолчаниями — config.example.toml в репозитории # приложения. Разбор строгий: неизвестный ключ в этом файле роняет старт. [general] # Часовой пояс новых пользователей: по нему режутся сутки в итогах дня. # Хранение времени и журнал всегда в UTC, его это не трогает. timezone = "Europe/Moscow" [http] # Порт наружу не публикуется: в сеть смотрит только Caddy, а внутрь # web_proxy_network приложение видно по имени контейнера diet_app. listen = "0.0.0.0:8080" [storage] # data/ приложения смонтирован на /var/lib/diet — единственное, что уезжает # в бэкап (backup-targets). db_path = "/var/lib/diet/diet.db" [storage.files] # Снимки тарелок и этикеток: каталог на диске этой же машины. type = "local" dir = "/var/lib/diet/files" [cache] # cache/ смонтирован на /var/cache/diet: подогнанные снимки и курсоры уборок. # Содержимое восстановимо целиком, в бэкап не идёт и сносится в любой момент; # подкаталоги images/ и cleanup/ приложение заводит само. type = "local" dir = "/var/cache/diet" [llm] # Шлюз в общей сети; версию API ("/v1/chat/completions") приложение # дописывает само, поэтому адрес указывается корнем. base_url = "http://bifrost_app:8080/openai" # Bifrost в закрытой сети ключа не спрашивает: governance у него не включён # и виртуальных ключей нет. Пустая строка — приложение ходит без авторизации. # Появится ключ — значение приедет из vault, а файл станет секретным: # тогда задаче рендера нужны no_log и права 0600. api_key = "" [llm.recognition] # Снимки читает vision-модель. Имя — точная пара провайдер/модель: Bifrost # разбирает префикс сам, правил подмены у него нет (governance.routing_rules # в files/bifrost/config.template.json пуст), так что в агрегатор уходит ровно # то, что записано здесь. Менять модель — здесь же. type = "openai-compat" model = "bothub/gemini-3.8-flash" # Умолчание в минуту обрывает первый за долгое время вызов: 65,9 с 6 сентября # 2026, тогда как следующие за ним укладывались в 6–10 с. Ждал не шлюз и не наш # повтор — по его журналу запросов попытка была одна, у провайдера ушло 65,5 с, # накладные шлюза 0,46 с. То же самое видно у соседа по серверу через другого # провайдера (74 с и 67,8 с, оба раза первый вызов после простоя), так что дело # не в выбранной модели. Срок поднят, чтобы готовый ответ не выбрасывался # за шесть секунд до прихода; настоящая причина медленного первого обращения # наружу этим не лечится. timeout = "2m" # Сведение позиций — той же моделью, что и распознавание. [llm.composition] type = "openai-compat" model = "bothub/gemini-3.8-flash" timeout = "2m"