§
    ‰eîiÊ  ã                   ó–   — d Z ddlZddlmZmZmZ ddedededdfd	„Z	 	 ddeee	ef                  de	dedeee	ef                  fd„Z
dS )aa  Anthropic prompt caching (system_and_3 strategy).

Reduces input token costs by ~75% on multi-turn conversations by caching
the conversation prefix. Uses 4 cache_control breakpoints (Anthropic max):
  1. System prompt (stable across all turns)
  2-4. Last 3 non-system messages (rolling window)

Pure functions -- no class state, no AIAgent dependency.
é    N)ÚAnyÚDictÚListFÚmsgÚcache_markerÚnative_anthropicÚreturnc                 óX  — |                       dd¦  «        }|                       d¦  «        }|dk    r	|r|| d<   dS |�|dk    r|| d<   dS t          |t          ¦  «        rd||dœg| d<   dS t          |t          ¦  «        r&|r&|d	         }t          |t          ¦  «        r||d<   dS dS dS dS )
zFAdd cache_control to a single message, handling all format variations.ÚroleÚ ÚcontentÚtoolÚcache_controlNÚtext)Útyper   r   éÿÿÿÿ)ÚgetÚ
isinstanceÚstrÚlistÚdict)r   r   r   r   r   Úlasts         ú6/home/div/.hermes/hermes-agent/agent/prompt_caching.pyÚ_apply_cache_markerr      sõ   € à�7Š7�6˜2ÑÔ€DØ�gŠg�iÑ Ô €Gàˆv‚~€~Øð 	0Ø#/ˆC�Ñ Øˆà€˜' Rš-˜-Ø+ˆˆOÑØˆå�'�3ÑÔð à W¸|ÐLÐLð
ˆˆI‰ð 	ˆå�'�4Ñ Ô ð 1 Wð 1Ø�rŒ{ˆÝ�d�DÑ!Ô!ð 	1Ø$0ˆD�Ñ!Ð!Ð!ð1ð 1ð 1ð 1ð	1ð 	1ó    Ú5mÚapi_messagesÚ	cache_ttlc                 óx  ‡— t          j        | ¦  «        Š‰s‰S ddi}|dk    rd|d<   d}‰d                              d¦  «        dk    rt          ‰d         ||¬¦  «         |d	z  }d
|z
  }ˆfd„t	          t          ‰¦  «        ¦  «        D ¦   «         }|| d…         D ]}t          ‰|         ||¬¦  «         Œ‰S )zúApply system_and_3 caching strategy to messages for Anthropic models.

    Places up to 4 cache_control breakpoints: system prompt + last 3 non-system messages.

    Returns:
        Deep copy of messages with cache_control breakpoints injected.
    r   Ú	ephemeralÚ1hÚttlr   r   Úsystem)r   é   é   c                 óR   •— g | ]#}‰|                               d ¦  «        dk    ¯!|‘Œ$S )r   r#   )r   )Ú.0ÚiÚmessagess     €r   ú
<listcomp>z1apply_anthropic_cache_control.<locals>.<listcomp>D   s3   ø€ ÐVÐVÐV�Q°(¸1´+·/²/À&Ñ2IÔ2IÈXÒ2UÐ2UˆqÐ2UÐ2UÐ2Ur   N)ÚcopyÚdeepcopyr   r   ÚrangeÚlen)	r   r   r   ÚmarkerÚbreakpoints_usedÚ	remainingÚnon_sysÚidxr)   s	           @r   Úapply_anthropic_cache_controlr4   )   sõ   ø€ õ Œ}˜\Ñ*Ô*€HØð Øˆà�kÐ"€FØ�DÒÐØˆˆu‰àÐà�„{‡‚�vÑÔ (Ò*Ð*Ý˜H QœK¨ÐBRÐSÑSÔSÐSØ˜AÑÐàÐ$Ñ$€IØVÐVÐVÐV�%¥ H¡¤Ñ.Ô.ÐVÑVÔV€GØ˜	�z�{�{Ô#ð Vð VˆÝ˜H SœM¨6ÐDTÐUÑUÔUÐUÐUà€Or   )F)r   F)Ú__doc__r+   Útypingr   r   r   r   Úboolr   r   r4   © r   r   ú<module>r9      s×   ððð ð €€€Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "ð1ð 1˜Tð 1°ð 1Èð 1ÐZ^ð 1ð 1ð 1ð 1ð8 Ø"ðð Ø�t˜C ˜H”~Ô&ðàðð ðð 
ˆ$ˆs�CˆxŒ.Ôð	ð ð ð ð ð r   