Ë
    áß²j"  ã                  óp   — d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZ erddlmZ d
d„Z G d„ d	«      Zy)zHSummary-hook dispatch and cancellation rollback for context compression.é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚDictÚListÚOptional)ÚAuxiliaryExplicitCancellation)Ú_HandoffScanc                ó\  — 	 t        j                  | «      j                  }t        d„ |j                  «       D «       «      ry|j                  |«      }|duxr@ |j                  t         j                  j                  t         j                  j                  fv S # t        t        f$ r Y yw xY w)zEReturn whether an inspectable callable accepts ``name`` as a keyword.Fc              3  óh   K  — | ]*  }|j                   t        j                  j                  u –— Œ, y ­w)N)ÚkindÚinspectÚ	ParameterÚVAR_KEYWORD)Ú.0Ú	parameters     úE/home/ubuntu/.hermes/hermes-agent/agent/context_compressor_summary.pyú	<genexpr>z,_accepts_keyword_argument.<locals>.<genexpr>   s%   è ø€ Ò
`¸yˆ9�>‰>œW×.Ñ.×:Ñ:Ô:Ñ
`ùs   ‚02TN)r   Ú	signatureÚ
parametersÚ	TypeErrorÚ
ValueErrorÚanyÚvaluesÚgetr   r   ÚPOSITIONAL_OR_KEYWORDÚKEYWORD_ONLY)Úcallable_objÚnamer   r   s       r   Ú_accepts_keyword_argumentr       s    € ðÜ×&Ñ& |Ó4×?Ñ?ˆ
ô Ñ
`ÈJ×L]ÑL]ÓL_Ô
`Ô`ØØ—‘˜tÓ$€IØ˜DÐ ò  Y§^¡^Ü×Ñ×/Ñ/Ü×Ñ×&Ñ&ð8ð &ð øô ”zÐ"ò Ùðús   ‚B ÂB+Â*B+c                  ó0   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚSummaryDispatchMixinc                ó–  — ddl m}  |«       r8ddlm}  || «       d| _        t        | dd«      }	t        |	t        «      rd|	d<   y|xs | j                  |«      |d	œ}
t        | j                  d
«      r||
d
<   	  | j                  |fi |
¤ŽS # t        $ r2 ddlm}  || «      r"|j                  | _        |j                  | _        ‚ w xY w)a2  Run the summary LLM; a cancellation rolls back the handoff scan's self-heal mutation first.
        A deterministic pin (repeated stall, #112420) skips the LLM: ``None`` lets Phase 3 insert the static
        fallback summary, or abort under ``abort_on_summary_failure`` exactly like a failed summary call.r   )Útake_deterministic_summary_pin)Ú_raise_if_stale_attemptzMsummary model stalled on every route; deterministic fallback summary insertedÚ_active_compression_telemetryNÚstall_deterministic_fallbackÚfailure_class)Úfocus_topicÚmemory_contextÚbypass_cooldown)Ú_caller_attempt_is_current)Úagent.context_compressorr$   Úagent.conversation_compressionr%   Ú_last_summary_errorÚgetattrÚ
isinstanceÚdictÚ_derive_auto_focus_topicr    Ú_generate_summaryr	   r,   Úprevious_summary_beforeÚ_previous_summaryÚhas_user_turn_beforeÚ_summary_has_user_turn)ÚselfÚmessagesÚturns_to_summarizeÚscanr)   r*   r+   r$   r%   Ú	telemetryÚsummary_kwargsr,   s               r   Ú_summarize_windowz&SummaryDispatchMixin._summarize_window   sé   € õ 	LÙ)Ô+õ Oá# DÔ)ð `ð Ô$ô   Ð&EÀtÓLˆIÜ˜)¤TÔ*Ø-K�	˜/Ñ*Øð 'ÒQ¨$×*GÑ*GÈÓ*QØ,ñ*
ˆô % T×%;Ñ%;Ð=NÔOØ0?ˆNÐ,Ñ-ð	Ø)�4×)Ñ)Ð*<ÑOÀÑOÐOøÜ,ò 	õ Rá)¨$Ô/Ø)-×)EÑ)E�Ô&Ø.2×.GÑ.G�Ô+Øð	ús   Á:B Â;CN)r:   úList[Dict[str, Any]]r;   r@   r<   z'_HandoffScan'r)   úOptional[str]r*   Ústrr+   ÚboolÚreturnrA   )Ú__name__Ú
__module__Ú__qualname__r?   © ó    r   r"   r"      sA   „ ð+Ø,ð+ØBVð+Ø^lð+à"ð+à47ð+àJNð+ð 
ô+rI   r"   )r   r   r   rB   rD   rC   )Ú__doc__Ú
__future__r   r   Útypingr   r   r   r   r   Úagent.auxiliary_clientr	   r-   r
   r    r"   rH   rI   r   ú<module>rN      s,   ðÙ Nå "ã ß ;Õ ;å @áÝ5ó÷,ò ,rI   