WESP: локальный LLM (llama-server + GGUF Qwen2.5-1.5B-Instruct)
===============================================================

Запускайте скрипты из КОРНЯ репозитория (где лежат папки app/, data/, install/).

1) Каталоги (логи, кэш, models):
   Linux/macOS:  sh install/assistant/create_layout.sh
   Windows:      powershell -ExecutionPolicy Bypass -File install\assistant\create_layout.ps1

   Если вы уже в папке install\, путь к скрипту другой:
      powershell -ExecutionPolicy Bypass -File assistant\download_model.ps1

   По умолчанию корень: <репозиторий>/data/assistant
   Или: set WESP_ASSISTANT_DIR=...

2) Скачать веса (~1.3 GB для q5_k_m):
   pip install -U huggingface_hub
   sh install/assistant/download_model.sh
   или download_model.ps1

3) Запуск llama-server
   Linux/macOS:  sh install/assistant/run_llama_server.sh
   Windows (авто, ~15 MiB с GitHub):
      powershell -ExecutionPolicy Bypass -File install\assistant\download_llama_server.ps1
      Кладёт exe и все .dll из архива в <репо>\tools\ (run_llama_server.ps1 найдёт сам).
   Если llama-server сразу падает с кодом -1073741515 — не хватало DLL рядом с exe:
      powershell -ExecutionPolicy Bypass -File install\assistant\sync_llama_tools.ps1
   «Всё сразу» (отдельное окно llama + WESP с LLM):
      powershell -ExecutionPolicy Bypass -File .\start_chat.ps1
   Вручную: https://github.com/ggml-org/llama.cpp/releases — архив llama-*-bin-win-cpu-x64.zip,
      из него llama-server.exe в tools\ или в PATH, либо:
      $env:LLAMA_SERVER = "C:\полный\путь\llama-server.exe"
   Запуск из папки install:
      .\assistant\run_llama_server.ps1
   Из корня репозитория:
      powershell -ExecutionPolicy Bypass -File install\assistant\run_llama_server.ps1
   (Без .\ в начале PowerShell пытается загрузить «модуль» install — ошибка.)

4) Переменные для WESP (пример; API LLM в админке по умолчанию включён):
   set WESP_LLM_BASE_URL=http://127.0.0.1:8080
   set WESP_LLM_MODEL=qwen2.5-1.5b-instruct-q5_k_m.gguf
   Выключить LLM: set WESP_ADMIN_LLM_ENABLED=0 или галка в админке → data/wesp_security_settings.json (admin_llm_enabled).

   Автозапуск llama-server вместе с python run.py / gunicorn (дочерний процесс, при выходе WESP завершается):
   по умолчанию ВКЛ; выключить: set WESP_LLM_AUTOSTART=0 или галка в админке (llm_autostart).
   Нужны: LLM включён в админке, файл .gguf в data/assistant/models/, llama-server в tools/ или LLAMA_SERVER=...

Порт в run_* должен совпадать с WESP_LLM_BASE_URL. Имя модели в WESP_LLM_MODEL — как в API (часто имя файла .gguf).

Чат в админке (экономия ресурсов llama-server): по умолчанию WESP_LLM_CHAT_MAX_TOKENS=512, WESP_LLM_CHAT_TIMEOUT_SEC=45 — см. config.py.
Лимит «не чаще раз в N сек» для чата отдельный: WESP_ADMIN_LLM_CHAT_RATE_LIMIT_SEC (по умолчанию 0 — без паузы). Для сводки/ping: WESP_ADMIN_LLM_RATE_LIMIT_SEC (по умолчанию 12).
Чат с данными БД в промпте (среда + PRAGMA по файлам SQLite, без строк таблиц ORM): галка в админке или WESP_LLM_CHAT_INCLUDE_DB_CONTEXT=1, ключ llm_chat_db_context в wesp_security_settings.json. Строки справочников — только «Снимок диагностики».

5) Slim-tools в чате (оркестратор LLM)
   По умолчанию ВКЛ на боевом config; в pytest выключено (WESP_LLM_TOOLS_ENABLED=0 в TestingConfig).
   Галка в админке «Инструменты в чате» / ключ llm_tools_enabled в wesp_security_settings.json /
   переменная WESP_LLM_TOOLS_ENABLED (env имеет приоритет над файлом).

   Модель может вызывать функции OpenAI-формата (нужна поддержка tool_calls в вашей сборке llama-server):
   slim_sql (только SELECT/WITH … SELECT, bind recipes|reports),
   slim_extract / slim_summary / slim_xsum / slim_sentiment / slim_emotions для server_log, client_log или raw_text.

   Режим SQL в UI/API:
   - preview — только EXPLAIN QUERY PLAN (без строк таблиц);
   - execute — чтение строк в SQLite через подключение mode=ro, лимит строк WESP_LLM_SQL_MAX_ROWS (по умолчанию 200).

   Лимиты и таймауты (см. также config.py):
   WESP_LLM_TOOL_MAX_ROUNDS, WESP_LLM_LOG_MAX_BYTES, WESP_LLM_LOG_TAIL_LINES.

   Платформы: прод обычно Ubuntu; разработка и тесты — Windows/macOS/Linux. Тесты не требуют живого llama-server.
   Если ваш llama-server отвечает 400 на поле tools в /v1/chat/completions — отключите инструменты:
   WESP_LLM_TOOLS_ENABLED=0 или галка в админке.
