From 37217943b5c0ba1178491a07186c11878a5bfd05 Mon Sep 17 00:00:00 2001 From: h Date: Sat, 29 Aug 2026 16:54:31 +0200 Subject: [PATCH] fix(config): rotation at 500k context, same-day text for size and age rotations --- config.py | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/config.py b/config.py index 15c78fd..82df494 100644 --- a/config.py +++ b/config.py @@ -7,7 +7,11 @@ from zoneinfo import ZoneInfo from beaver_gateway.agents.base import BaseAgent, ExposedMcp from beaver_gateway.agents.claude import ClaudeAgent, ClaudeOptions, Prompts from beaver_gateway.agents.raycast import RaycastAgent, RemoteTool, UserPreferences -from beaver_gateway.core.conversations import ConversationTexts, SeedContext +from beaver_gateway.core.conversations import ( + ConversationTexts, + NewDayContext, + SeedContext, +) from beaver_gateway.core.distill import DistillContext, Distiller, LineCap from beaver_gateway.core.prompt import assemble from beaver_gateway.core.registry import Gateway @@ -392,6 +396,24 @@ NEW_DAY = ( "Новый день ({day}). Ты - новый мастер того же треда: хендаут и сигнал состояния " "в сиде выше. Скажи Бобру что-то через say, только если есть что сказать." ) +SAME_DAY = ( + "Мастер пересоздан ({why}), день тот же - {day}. Хендаут в сиде выше - справка от " + "предыдущего мастера за сегодня, не утро: продолжай с того места, ничего не " + "приветствуй. Скажи Бобру что-то через say, только если есть что сказать." +) +ROTATION_WHY = { + "возраст": "прошло больше 36 часов", + "транскрипт": "контекст стал слишком большим", +} + + +def new_day(ctx: NewDayContext) -> str: + """§4.5: «новый день» - только ночная ротация; остальные - тот же день.""" + day = ctx.day.isoformat() + if ctx.reason == "ночь": + return NEW_DAY.format(day=day) + return SAME_DAY.format(day=day, why=ROTATION_WHY.get(ctx.reason, ctx.reason)) + DISTILL = ( "Глубокий чат [[{chat}]] закрыт ({reason}), сегодня {day}. Выжимка - `Write` в " @@ -417,7 +439,7 @@ texts = ConversationTexts( merge_prompt=_read(GRANULES / "слив.md") or ConversationTexts().merge_prompt, seed=seed_body, handout=handout_prompt, - new_day=NEW_DAY, + new_day=new_day, distill=distill_prompt, ) @@ -555,7 +577,9 @@ gateway = Gateway( frontends=frontends, texts=texts, jobs=jobs, - rotation=RotationPolicy(tz=TZ), + # Окно модели - 1M; context rot начинается около половины (эмпирика h по + # счётчику Claude Code), считаем как он - вход последнего API-вызова. + rotation=RotationPolicy(tz=TZ, max_context_tokens=500_000), watch=watch, budget=Budget(threshold=0.7), distiller=Distiller(agent="beaver-distiller", dir=DIGESTS, index=INDEX),