fix(config): rotation at 500k context, same-day text for size and age rotations

This commit is contained in:
hh
2026-08-29 16:54:31 +02:00
parent 40231049eb
commit 02723c21a7
+27 -3
View File
@@ -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),