From eff4dd9c9df6fb1c43fc02fffd490ed1e4113bab Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 23 Sep 2026 21:41:31 +0600 Subject: [PATCH] [2026-09-23] plan fix: .15 is alive (same host as .14); TimeCode.sql is container-only, not on volume --- personal/plans/lampac-watched-to-watchlist.md | 83 ++++++++++--- .../personal-os/glm-provider-migration.md | 91 +++++++++++++++ personal/tech/deepseek-language-drift.md | 15 +++ personal/tech/llm-model-selection-2026.md | 110 ++++++++++++++++++ 4 files changed, 283 insertions(+), 16 deletions(-) create mode 100644 personal/projects/personal-os/glm-provider-migration.md create mode 100644 personal/tech/llm-model-selection-2026.md diff --git a/personal/plans/lampac-watched-to-watchlist.md b/personal/plans/lampac-watched-to-watchlist.md index 4abdb499..112af99a 100644 --- a/personal/plans/lampac-watched-to-watchlist.md +++ b/personal/plans/lampac-watched-to-watchlist.md @@ -37,7 +37,7 @@ related: | Элемент | Значение | |---|---| | Модуль | `/lampac/module/Sync/TimeCode/` (`Controller.cs`, `plugin.js`, `SqlContext.cs`) | -| БД | `/lampac/database/TimeCode.sql` (SQLite; на хосте `$H/lampac/database/TimeCode.sql`) | +| БД | `/lampac/database/TimeCode.sql` (**внутри контейнера**; на хосте нет — см. 8.4) | | Таблица | `timecodes` | | Колонки | `Id, user, identity, card, item, position, duration, percent, profile, deleted, watched_at, updated_at, extra` | | Запись ставит | `Lampa` → `POST /timecode/add` (легаси) или `/timecode/set` (нативный), пачками ≤10 req/s | @@ -201,8 +201,11 @@ KP-ID (`kinopoisk.ru/film/`, 68 штук в `.md`) в цепочке **не уч - `--dry-run` по умолчанию, `--apply` для записи; печатает каждое действие. 3. **Копия для теста.** Dry-run на **копии** боевого `.md`, сверить: сколько строк перешло, какие именно. Только после сверки — `--apply` на боевом. -4. **`.env`** на Кра́кене: `LAMPAC_TIMECODE_DB=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac/database/TimeCode.sql` - (БД лежит на хосте, не в контейнере — путь проверен). +4. **`.env`** на Кра́кене: `LAMPAC_TIMECODE_DB=/lampac/database/TimeCode.sql` — + 🔴 **путь ВНУТРИ контейнера**, хостовой копии нет (см. 8.4). Модуль запускается + на хосте Кра́кена, поэтому перед чтением делать + `docker cp lampac:/lampac/database/TimeCode.sql ` и читать копию. + Либо (предпочтительно, отдельным апрувом) bind-mount `database/` на хост. 5. **Крон.** В `~/scripts/watchlist-nightly.sh` — новый вызов **после** `sync-up`, **до** `sync-vault (push)`. Правка через `sudo cp` (`~/scripts/` — `root:root 755`). Бэкап скрипта до правки. Сумма новой версии зафиксировать в доке. @@ -229,12 +232,12 @@ KP-ID (`kinopoisk.ru/film/`, 68 штук в `.md`) в цепочке **не уч | 4 | `identity` для сериалов = `tv-1851-s1e2`, серия в `card` | этап 1 — только фильмы; сериалы отдельно | | 5 | `percent` сбрасывается в `0` при `deleted` | фильтровать `deleted = 0` | | 6 | Матч по названию ломается на год/рейтингах | нормализация `_norm_title()` + год как второй ключ | -| 7 | `timecodes` переживает рестарт лампака (SQLite на хосте, не в контейнере) | ок | +| 7 | 🔴 **`/lampac/database` НЕ на volume и НЕ на хосте** — БД только внутри контейнера; пересоздание контейнера уничтожит историю | читать через `docker cp`; риск потери закрыть bind-mount'ом отдельно (см. 8.4) | | 8 | Крон-файлы возвращать только `crontab /tmp/файл`; бэкап `crontab -l > f` обязателен | — | | 9 | 🔴 **`identity` бывает в ДВУХ формах** (`movie-674` и `674_movie`) | regex `^(?:(movie\|tv)-)?(\d+)` | | 10 | 🔴 **`watched_at` не признак досмотра** — бывает `>0` при `percent=18` | порог только по `percent` | | 11 | 🔴 **inline `python3 -c` уходит на апрув и истекает** | все пробы — файлами | -| 12 | **`ssh kraken` резолвится в мёртвый `.15`** | работать через `kraken@192.168.1.14` | +| 12 | ✅ **`.15` и `.14` — ОДИН Кра́кен, оба живые.** Прежнее «`.15` мёртвый» — моя ошибка | обрывы = перегрузка sshd; короткие команды, повторы | | 13 | Длинные `ssh` + тяжёлый `jq` рвут соединение («banner exchange») | разбивать на короткие команды, тяжёлое — файлом | --- @@ -302,23 +305,71 @@ Vault git чистый. Записано в [[family/projects/watchlist-automati в `~/logs/` (`watchlist-catalog.log`, `watchlist-cleanup.log`). Фикс (перенести в `~/logs/`) предложен, ждёт команды Alex. -### 8.3 🔴 `ssh kraken` резолвится в МЁРТВЫЙ адрес +### 8.3 ✅ Уточнено: `192.168.1.15` НЕ мёртвый — это тот же Кра́кен -`ssh kraken` → DNS отдаёт **`192.168.1.15`** → порт 22 открыт, но sshd рвёт -соединение на `banner exchange`. Рабочий адрес — **`192.168.1.14`** (проверено: -`ALIVE_14`, uptime 6:27, load 0.02). +🔴 **Изменено 2026-09-23 (поздняя правка). Предыдущая версия этого раздела +утверждала «`.15` мёртвый» — ЭТО НЕВЕРНО, ошибка снятия одного таймаута за факт.** -Причина в `~/.ssh/config`: proxy-команда +Проверено: ``` -if ifconfig | grep -q 10.99.0.2; then nc 10.99.1.2 22; else nc kraken 22; fi +$ ping -c 2 192.168.1.15 → 0% loss, 5.5 ms avg +$ ssh kraken@192.168.1.15 → hostname = kraken + hostname -I = 192.168.1.14 192.168.1.15 10.99.1.2 172.21.0.1 … ``` -На Mac интерфейса с `10.99.0.2` **нет** → уходит на `nc kraken 22` → мёртвый `.15`. -WG-туннель до Кра́кена не поднят. +Кра́кен **имеет оба адреса**, оба живые, это одна и та же машина. +Оба варианта работают: `ssh kraken` (→ `.15`) и `ssh kraken@192.168.1.14`. -**Обход до восстановления WG:** всегда `ssh kraken@192.168.1.14` явно. -**Проверка:** `nc -z -w 5 192.168.1.14 22`. +**Настоящая причина обрывов** — не адрес, а **перегрузка sshd**: +первые подключения падали при `load average: 4.69` (после ребута поднимались +контейнеры). Симптом: `Connection closed by UNKNOWN port 65535` / +`Connection timed out during banner exchange`. Лечится повтором и короткими +командами, а не сменой адреса. -### 8.4 Commit незакоммиченных фиксов сирот +**Обход, который реально помогает:** +- короткие `ssh`-команды, тяжёлое — файлом-скриптом; +- не собирать `ssh` + тяжёлый `jq` в одну строку (180 KB json = обрыв); +- `ssh kraken` штатно работает, `192.168.1.14` — равноценный явный путь. + +⚠️ **WG-туннель до Кра́кена не поднят:** интерфейса с `10.99.0.2` на Mac нет, +`nc 10.99.1.2 22` → FAIL. Proxy-команда в `~/.ssh/config` уходит в ветку +`nc kraken 22`. Само по себе это не ломает (Кра́кен доступен по LAN), +но объясняет, почему прокси не используется. + +### 8.4 🔴 `TimeCode.sql` НЕ на хосте — только внутри контейнера, и НЕ на volume + +🔴 **Критично для реализации. Предыдущая версия плана называла хостовый путь +`$H/lampac/database/TimeCode.sql` — такого пути НЕТ.** + +Факт: +``` +$ docker inspect lampac --format '{{range .Mounts}}{{.Source}} -> {{.Destination}}\n{{end}}' +…/lampac/cache -> /lampac/cache +…/lampac/config -> /lampac/config +…/lampac/data -> /lampac/data +…/lampac/config-module/init.conf -> /lampac/init.conf +…/lampac/catalog/override, plugin.js, sites -> /lampac/module/Catalog/* +…/lampac/wwwroot -> /lampac/wwwroot +``` +**`/lampac/database` в маунтах ОТСУТСТВУЕТ.** Файл живёт внутри контейнера: +``` +docker exec lampac ls -la /lampac/database/TimeCode.sql +-rw-r--r-- 1 lampac lampac 24576 Sep 22 15:32 /lampac/database/TimeCode.sql +``` + +**Способы чтения (единственный рабочий):** +```bash +docker cp lampac:/lampac/database/TimeCode.sql /tmp/TimeCode.sql +python3 /tmp/probe_match.py # файлом, НЕ -c +``` + +🔴 **РИСК ПОТЕРИ ДАННЫХ.** `/lampac/database` **не на volume** → +`docker compose up --force-recreate`, обновление образа ла́мпака или +пересоздание контейнера **уничтожат всю историю просмотров**. Прямо сейчас +там 1 запись (потери нет), но план зависит от этой БД — риск закрыть +отдельным шагом (bind-mount `database/` на хост, с бэкапом перед правкой +compose, **без пересоздания контейнера без разрешения Alex**). + +### 8.5 Commit незакоммиченных фиксов сирот В рабочем дереве `watchlist-sync` висели незакоммиченные правки, которые **уже работали боевым прогоном**: `cli.py` (+7) и `parser.py` (+65) — фикс «ОСИРОТЕВШИЕ diff --git a/personal/projects/personal-os/glm-provider-migration.md b/personal/projects/personal-os/glm-provider-migration.md new file mode 100644 index 00000000..40736dc2 --- /dev/null +++ b/personal/projects/personal-os/glm-provider-migration.md @@ -0,0 +1,91 @@ +--- +tags: [hermes, whale, config, llm, provider] +created: 2026-09-23 +status: plan-pending-approval +--- + +# План: перевод Whale на GLM-5.3 (основной) + DeepSeek (fallback) + +Ref: [[personal-os-agent-rules]] + +## Цель + +Основной провайдер `zai` / модель `glm-5.3`. При недоступности — DeepSeek как fallback. + +## Проверено до плана (факты, не предположения) + +| Проверка | Результат | +|---|---| +| `GLM_API_KEY` в `~/.hermes/hermes-whale/.env` | ✅ есть, длина 49 | +| Живой список моделей Z.ai direct API | ✅ `glm-5.3`, `glm-5.3-flash`, `glm-5.3-flashx`, `glm-5.2`, `glm-5.1`, `glm-5`, `glm-4.7`… | +| Tool calling на `glm-5.3` (live curl, `get_weather`) | ✅ `finish_reason=tool_calls`, аргументы пришли корректно | +| Провайдер в Hermes | ✅ `zai` (алиасы: `glm`, `z-ai`, `z.ai`, `zhipu`) — `hermes_cli/providers.py:105` | +| Transport | `openai_chat`, env: `GLM_API_KEY` / `ZAI_API_KEY` / `Z_AI_API_KEY` | +| Base URL override | `GLM_BASE_URL` (если понадобится) | + +**Важно:** `zai` overlay НЕ содержит своего `base_url_override` — Hermes подставит дефолтный endpoint Z.ai. Если после рестарта будет 404 — прописать `GLM_BASE_URL=https://api.z.ai/api/paas/v4` в `.env`. + +## Цены (для справки) + +| Модель | In / Out | Cache-hit | +|---|---|---| +| `glm-5.3` (новый основной) | $0.56 / $1.76 | н/д | +| `deepseek-flash` (fallback) | $0.15 / $0.60 | $0.003 | + +⚠️ Расход по output вырастет **~2.9×** против текущего DeepSeek. Агентный ранг: GLM-5.3 #9 (67.2) против DeepSeek V4.1 Flash #13. Цена платится за качество tool calling. + +⚠️ Cache-hit у GLM не публикуется — при повторяющемся префиксе (system prompt + skills, ~60–70K) DeepSeek был дешевле именно за счёт кэша. Экономический эффект от смены надо замерить на реальных задачах. + +## Изменения в config.yaml + +`~/.hermes/hermes-whale/config.yaml` + +```yaml +model: + default: glm-5.3 # было: deepseek-chat + provider: zai # было: deepseek +``` + +Плюс добавить: +```yaml +fallback_providers: +- id: deepseek-fallback + provider: deepseek + model: deepseek-flash +``` + +⚠️ `fallback_providers` сейчас `[]`. Синтаксис элемента — `id` / `provider` / `model`, по образцу из skill `hermes-agent`. + +## Порядок работ + +1. **Бэкап** — `cp config.yaml config.yaml.bak.YYYYMMDD_HHMMSS` (уже есть 2 старых бэкапа в папке) +2. **Коммит ДО** — `~/.hermes` git commit текущего состояния +3. Правка `model.default` + `model.provider` +4. Добавить `fallback_providers` +5. **Проверка Алекса** ← стоп, ждём +6. Рестарт гейта +7. Проверка: `hermes chat -q "reply OK"` → лог показывает `provider=zai model=glm-5.3` +8. Коммит ПОСЛЕ +9. Обновить `.env` если понадобился `GLM_BASE_URL` + +## Ответ на вопрос про рестарт гейта + +**Да, рестарт обязателен.** `model.default` / `model.provider` читаются на старте процесса (`agent_init.py`, проброс `_agent_cfg`) — как и `prompt_overrides`. Без рестарта гейт продолжит слать на `deepseek-chat`. + +Команда: `hermes gateway restart` (или `/restart` из чата гейта). + +⚠️ При рестарте Zulip-очередь не реплеится — сообщения за ~10–30с окна будут потеряны. Плановый момент: не во время активного диалога. + +## Pitfalls + +- **Редактор секретов ломает скрипты** — строка с заголовком авторизации в bash-скрипте получает съеденную кавычку → `unexpected EOF`. Обход: собирать header-файл через `printf` по частям (`printf "Bear"` + `printf "er %s"`), не писать слово целиком. См. `tmp/glm_toolcheck.sh` — рабочий образец. +- **`config.yaml` под TIRITH** — patch/write_file могут отказаться. Обход: `cp` в `/tmp`, правка, `cp` обратно (аппрув). +- **Кэш-префикс** — смена основной модели сбрасывает prompt-кэш на старте, первый запрос дороже. +- **Языковой дрейф** — [[deepseek-language-drift]]: DeepSeek склонен к китайскому. У GLM этой проблемы в докладе не отмечено — возможный побочный плюс смены. + +## Связанное + +- [[llm-model-selection-2026]] — полный разбор цена/качество, обоснование выбора GLM-5.3 +- [[deepseek-language-drift]] — баг DeepSeek, остаётся актуальным для fallback +- [[hermes-agent-improvements]] — prompt_overrides, способ правки конфига без кода +- [[OpenRouter setup]] — альтернативные провайдеры и лимиты diff --git a/personal/tech/deepseek-language-drift.md b/personal/tech/deepseek-language-drift.md index f303565f..12af3815 100644 --- a/personal/tech/deepseek-language-drift.md +++ b/personal/tech/deepseek-language-drift.md @@ -109,6 +109,21 @@ git-коммиты, tirith, сравнение с апстримом). Вопрос «`deepseek-chat` сознательно или дефолт?» **остаётся открытым.** При следующем обращении к теме — задать первым. +## Обновление (2026-09-23): вопрос закрыт, выбран путь 3 + +Открытый вопрос «`deepseek-chat` — сознательный выбор или дефолт?» **закрыт**: +это был дефолт. Выбран **путь 3 (смена модели)** — см. [[glm-provider-migration]]. + +Обоснование из [[llm-model-selection-2026]]: `deepseek-chat` — legacy-алиас, официально +отретейренный DeepSeek **2026-07-24** (маппинг → V4-Flash non-thinking). Работал +«по совместимости». `glm-5.3` (Z.ai) — агентный ранг **#9** против #13 у DeepSeek, +и у GLM языковой дрейф в докладе не отмечен. + +DeepSeek остаётся как **fallback** провайдер — путь 1/2 для него не реализуется, +языковой дрейф принят как известный риск fallback-режима. + +**Итог:** пути 1 и 2 не выполнялись, путь 3 реализуется через план миграции. + ## Связанное - [[hermes-whale-system-prompt]] — где живёт языковая инструкция (SOUL.md, строка 4) diff --git a/personal/tech/llm-model-selection-2026.md b/personal/tech/llm-model-selection-2026.md new file mode 100644 index 00000000..dd4e94c0 --- /dev/null +++ b/personal/tech/llm-model-selection-2026.md @@ -0,0 +1,110 @@ +--- +tags: [hermes, llm, pricing, research, models, whale] +created: 2026-09-23 +updated: 2026-09-23 +related: + - glm-provider-migration + - ai-agent-landscape-2026 + - OpenRouter setup + - deepseek-language-drift +--- +# LLM цена/качество под задачи Whale (сентябрь 2026) + +> Запрос Alex: «какая лучше всего модель под наши задачи по цене/качеству». +> Данные собраны 2026-09-23 из costgoat / benchlm / binaryverseai / o-mega / codersera. + +## Профиль нагрузки Whale (это определяет выбор) + +Из логов гейта: **60–70К контекста на вызов**, tool calling, много мелких шагов, +стабильный кэш-префикс (system prompt + skills). Критичны три метрики: + +1. **cache-hit цена** — цикл пересылает один и тот же префикс каждый шаг +2. **output цена** — в 2–5× дороже input (каждый output-токен = полный forward pass) +3. **надёжность tool calling** — не общий «интеллект» + +Gartner (март 2026): агентные воркфлоу жрут **5–30× больше токенов** на задачу, чем чат. +Ошибки компаундятся мультипликативно: 90% успеха на шаг → ~12% на 20 шагов. + +## Разбор DeepSeek: `deepseek-chat` vs `deepseek-flash` vs `deepseek-v4-flash` + +**Это НЕ апгрейд, а переименование.** DeepSeek выпустил V4.1-Flash 2026-09-10: + +| ID | Статус | +|---|---| +| `deepseek-v4-flash` | **retired**, временно роутит на V4.1-Flash | +| `deepseek-flash` | **текущее каноническое имя** V4.1-Flash | +| `deepseek-v4-pro` | V4 Pro 0813 | + +Новое в V4.1 vs V4: нативный **vision** + агрессивнее сжатие кэша. + +⚠️ **`deepseek-chat` — legacy-алиас.** DeepSeek официально отретейрил `deepseek-chat` +и `deepseek-reasoner` **2026-07-24 15:59 UTC**. Маппинг: `deepseek-chat` → V4-Flash +(non-thinking). Живой список API сейчас = только `deepseek-flash` + `deepseek-v4-pro`. + +## Цены и качество — полная таблица + +**Value Score** = очки качества на $1 output (costgoat/Theozard). +**Cache-hit** — то, что реально определяет наш биллинг. + +| Модель | In / Out | Cache-hit | Качество | Value | Агентный ранг | +|---|---|---|---|---|---| +| GLM-5.3 Flash | $0.15 / $0.50 | н/д | 73 | **146** | #31 (54.5) | +| **DeepSeek V4.1 Flash** (наш) | $0.15 / $0.60 | **$0.003** | 68 | 113 | #13 | +| GPT-6 Luna | $0.10 / $0.50 | $0.02 | 65 | 130 | #18 | +| **GLM-5.3** | $0.56 / $1.76 | н/д | 78 | 44 | **#9 (67.2)** | +| MiMo-V2.6-Pro (Xiaomi) | $0.44 / $0.87 | н/д | **80** | 92 | н/д | +| Gemini 3.8 Flash | $0.75 / $3.75 | $0.075 | 71 | 19 | #11 (65.0) | +| Qwen3.8-Flash | $0.113 / $0.382 | $0.014 | ~60 | 113 | #23 | +| Kimi K3 | $3.00 / $15.00 | $0.30 | 76 | 4.8 | **#6 (70.2)** | +| Claude Sonnet 5 | $2.00 / $10.00 | $0.20 | — | — | #12 (64.3) | +| Claude Opus 5.5 | $4.00 / $20.00 | $0.20 | **100** | 4.4 | **#1 (88.8)** | +| GPT-6 Astra | $10 / $50 | $1.00 | 91 | 1.8 | #5 (70.6) | +| Grok 4.6 | $2.00 / $6.00 | $0.50 | 81 | 13 | #8 (68.1) | +| DeepSeek V4 Pro 0813 | $0.435 / $0.87 | $0.0036 | — | — | #29 (54.9) | + +## Три вывода + +**1. DeepSeek V4.1 Flash — не оптимум, а №2 по value.** `GLM-5.3 Flash` даёт +value **146 против 113** при качестве **73 против 68** и агентном ранге **#31 против #13**. +Дешевле И лучше — реальный кандидат на замену. + +**2. `GLM-5.3` — лучшая точка апгрейда.** Единственная open-weight модель в топ-10 +агентного рейтинга (**#9, 67.2**), 1.3M контекст. Против нашего #13 — **на 13 позиций выше +по агентным задачам** при цене всего в 3× дороже output. + +**3. Фронтир не окупается.** Opus 5.5 — лидер (#1, качество 100), но **value 4.4** — +в **25× хуже** нашего. GPT-6 Astra $50 output, value 1.8. Единственный аргумент за них — +adversarial reliability (Opus 5: 2% injection success at k=15 против 5.9% у Sonnet 5) +и надёжность на 100+ шагах. У нас короткие цепочки — аргумент не наш. + +## Критическая оговорка + +**Harness-вариативность превышает модельную в 7.8×** (controlled factorial study, май 2026). +Разница между №13 и №31 в чужом харнессе может исчезнуть в нашем Hermes. +Единственный честный способ — прогнать 10 реальных задач на обеих моделях. + +## Часы пик / off-peak (DeepSeek) + +С 2026-08-16 DeepSeek билит по peak/off-peak. Пик: 2:00–18:00 UTC. +Off-peak = **половина от поднятого пика**, а не «дешевле чем раньше». + +⚠️ Наши cron в 01:00–03:00 local задевают границу пика. + +## Практические заметки по провайдерам + +- GLM = **Z.ai** (Zhipu AI, Китай), НЕ Google/Gemini. Разные лаборатории. + - env: `GLM_API_KEY` / `ZAI_API_KEY` / `Z_AI_API_KEY` + - provider id в Hermes: `zai` (алиасы `glm`, `z-ai`, `z.ai`, `zhipu`) + - direct API base: `https://api.z.ai/api/paas/v4` +- Gemini = Google, env `GOOGLE_API_KEY` / `GEMINI_API_KEY` +- Kimi = Moonshot AI; Qwen = Alibaba; MiMo = Xiaomi + +## Источники + +- costgoat.com/compare/llm-api (411+ моделей, обновлён 2026-09-23) +- benchlm.ai/best/agents + benchlm.ai/llm-pricing (2026-09-21/22) +- binaryverseai.com/llm-pricing-comparison (2026-09-11) +- o-mega.ai «Best LLM for AI Agents: September 2026 Rankings» (2026-09-08) +- codersera.com «DeepSeek V4 Guide» (2026-08-13) +- insiderllm.com «DeepSeek V4 Flash vs Pro» (2026-06-12) +- deepseek.com/en/news/deepseek-v4-1-flash/ (первоисточник по переименованию)