diff --git a/PROJECT.md b/PROJECT.md index 3ecaee3..a247912 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -796,7 +796,9 @@ AI получает JSON-массив: посты нужно возвращать в `pending` только явным ручным действием. После любого failed AI batch worker дополнительно выключает свой флаг `ai_writer_enabled=false` / `ai_qualifier_enabled=false`; включать обратно -только после просмотра ошибки. +только после просмотра ошибки. Ошибка показывается на `/workers` из heartbeat +meta и отправляется Telegram-уведомлением получателям `daily_report_recipient_ids` +через `daily_report_bot_token`, затем `tg_poster_bot_token`, затем `TG_BOT_TOKEN`. ### 10.2. Вход в модель diff --git a/STATE.md b/STATE.md index 9a89212..7c4cbd1 100644 --- a/STATE.md +++ b/STATE.md @@ -102,7 +102,7 @@ As of 2026-07-29: - Current live writer model setting checked on 2026-07-29: `ai_writer_model = anthropic/claude-sonnet-4-6`. - Sonnet 4.6 can return `rewrites` as a JSON string instead of a list. `validate_rewrites()` in `src/vk_parser_app/workers/ai_writer.py` now parses stringified `rewrites` before validation. -- 2026-07-30 incident: post `2348` was retried 983 times by AI writer because automatic claim included `rewrite_status='failed'`; estimated internal cost was `$16.465977`. Live setting `ai_writer_enabled` was switched to `false` to stop spend. Automatic AI qualifier/writer claims must not include `failed`; failed posts require an explicit manual reset to `pending`. AI writer/qualifier now also set their own `*_enabled=false` after any failed AI batch, so one broken prompt/model/post cannot burn money indefinitely. +- 2026-07-30 incident: post `2348` was retried 983 times by AI writer because automatic claim included `rewrite_status='failed'`; estimated internal cost was `$16.465977`. Live setting `ai_writer_enabled` was switched to `false` to stop spend. Automatic AI qualifier/writer claims must not include `failed`; failed posts require an explicit manual reset to `pending`. AI writer/qualifier now also set their own `*_enabled=false` after any failed AI batch, show the error on `/workers`, and send a Telegram alert via daily-report/TG-poster bot recipients, so one broken prompt/model/post cannot burn money indefinitely or fail silently. ## Prompt Architecture diff --git a/src/vk_parser_app/admin.py b/src/vk_parser_app/admin.py index 9de54aa..734cc1c 100644 --- a/src/vk_parser_app/admin.py +++ b/src/vk_parser_app/admin.py @@ -3410,7 +3410,13 @@ async def workers(request: Request): base_context( request, user, - workers=[dict(r) for r in rows], + workers=[ + { + **dict(r), + "meta_json": json.loads(r["meta_json"]) if isinstance(r["meta_json"], str) else (r["meta_json"] or {}), + } + for r in rows + ], settings=settings, provider_options=PROVIDER_OPTIONS, ai_provider=ai_provider, diff --git a/src/vk_parser_app/templates/workers.html b/src/vk_parser_app/templates/workers.html index 316bf68..63de50e 100644 --- a/src/vk_parser_app/templates/workers.html +++ b/src/vk_parser_app/templates/workers.html @@ -38,7 +38,12 @@ {% endif %}