hermes-agent/gateway
fayenix d6c53dcdcb fix(gateway): stop per-turn agent-cache eviction from model + message_id signature churn
Two independent bugs evicted the cached gateway AIAgent on every turn,
preventing the prompt cache from ever warming:

1. Model normalization mismatch: the post-run fallback-eviction check
   compared _agent.model (stripped in AIAgent.__init__) against the raw
   _resolve_gateway_model() config string. For vendor-prefixed config on
   native providers (e.g. 'deepseek/deepseek-v4-pro' vs 'deepseek-v4-pro')
   this was always unequal, so the agent was evicted after every
   successful run. Normalize _cfg_model the same way (skip aggregators).

2. Discord triggering message_id leaked into the cached system prompt via
   build_session_context_prompt()'s Discord IDs block. message_id changes
   every turn, so the agent-cache signature (computed from the ephemeral
   prompt) changed every Discord turn -> rebuild every message. The id is
   now injected per-turn into the user message (where per-turn content
   belongs and does not touch the cache signature); the cached IDs block
   carries a static pointer to it, preserving reply/react/pin via the
   discord tools.

Adapted from #28846. Bug #1 fix is the contributor's; bug #2 reworked to
be non-destructive (keeps the triggering-id capability instead of deleting
it). Redundant auto-reset eviction (already on main via #9893/#48031) and
the wrong-premise reset_context_note plumbing from the original PR were
dropped.

Co-authored-by: Hermes Agent <hermes@nousresearch.com>
2026-06-30 04:22:41 -07:00
..
assets
…
builtin_hooks
…
platforms feat(whatsapp): opt-in forwarding of owner-typed messages in bot mode 2026-06-30 03:41:43 -07:00
relay
…
__init__.py
…
authz_mixin.py
…
cgroup_cleanup.py
…
channel_directory.py
…
code_skew.py
…
config.py
…
dead_targets.py
…
delivery.py
…
display_config.py
…
drain_control.py
…
hooks.py
…
kanban_watchers.py
…
memory_monitor.py
…
message_timestamps.py
…
mirror.py
…
pairing.py
…
platform_registry.py
…
response_filters.py
…
restart.py
…
rich_sent_store.py
…
run.py fix(gateway): stop per-turn agent-cache eviction from model + message_id signature churn 2026-06-30 04:22:41 -07:00
runtime_footer.py
…
scale_to_zero.py
…
session.py fix(gateway): stop per-turn agent-cache eviction from model + message_id signature churn 2026-06-30 04:22:41 -07:00
session_context.py
…
shutdown_forensics.py
…
slash_access.py
…
slash_commands.py
…
status.py
…
sticker_cache.py
…
stream_consumer.py fix(gateway): add session staleness guard to stream consumer 2026-06-30 03:42:25 -07:00
stream_dispatch.py
…
stream_events.py
…
whatsapp_identity.py
…