Três camadas de proteção contra runaway token burn no AgentRunnerService: 1. MAX_TURNS_PER_MESSAGE = 15 Cap dentro de uma única chamada run(). Já estava aplicado; agora extraído como constante nomeada. 2. MAX_TURNS_PER_CONVERSATION = 30 Cap ao longo da vida da conversa. Contador em conversation.custom_attributes['captain_turn_count']. Ao atingir, dispara bot_handoff automático e responde com mensagem de transferência pra humano. 3. TOOL_LOOP_THRESHOLD = 3 Detecta a mesma (tool_name, args) invocada 3+ vezes no resultado de um único run (sintoma do loop faq_lookup que queimou tokens em 2026-04-19). Ao detectar: dispara bot_handoff e aborta o turno. trigger_bot_handoff! aciona conversation.bot_handoff! quando disponível, removendo a conversa do pipeline automático. Motivação: dois incidentes reais de queima de crédito OpenAI em 2026-04-19. Ver memory/feedback_never_touch_captain_without_safety_caps.md pras invariantes completas. Tests atualizados: mock_result agora stuba :messages (usado pelo novo tool_loop_detected?) e max_turns esperado é 15. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| builders | ||
| controllers | ||
| drops | ||
| integration | ||
| jobs | ||
| lib/captain | ||
| listeners | ||
| mailers | ||
| models | ||
| policies | ||
| presenters/conversations | ||
| services | ||