0.54.0
Added
- Token estimation (
internal/agent/token_estimator.go) — функцияEstimateTokensдля оценки токенов в[]Messageи[]providers.Messageс учётом tool_calls, tool_call_id, tool_name. КонстантыDefaultContextWindow(128k),CompactSoftThreshold(0.70),CompactHardThreshold(0.85),ContextSafetyReserve(4096).ResolveContextWindow— таблица context window для 25+ моделей (GPT-4o, Claude, Llama, Mistral, DeepSeek и др.). - In-loop compact — проверка токенного бюджета перед каждой итерацией agent loop (
runner.go). При превышении 85% порога — автоматический in-memory compact черезpruneHistoryByTokens. После завершения turn — async DB-level compact черезSessionCompactor, если токены превысили soft threshold (70%). - Emergency compact (
internal/providers/error_classify.go) — классификация ошибок провайдераIsContextOverflowError. Распознаёт ошибки OpenAI, Anthropic, Ollama по 10 паттернам (context_length_exceeded,prompt is too long,token limitи др.). При context overflow — compact + retry (максимум 1 попытка). Логирование каждого шага. CompactFnвAgentRunSpec— callback для in-memory compact, замыкание создаётся в actor черезmakeInMemoryCompactFn. Позволяет runner работать без прямых зависимостей от store/memory.
Changed
pruneHistoryByTokensвcontext.goиспользуетestimateMessageTokensвместо прямогоtokens.Count()для более точной оценки (учёт tool_calls, tool_call_id).