
    PL
j	                         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
e	dee	e	f         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 )uB  Anthropic prompt caching strategy.

Single layout: ``system_and_3``. 4 cache_control breakpoints — system
prompt + last 3 non-system messages, all at the same TTL (5m or 1h).
Reduces input token costs by ~75% on multi-turn conversations within a
single session.

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         8/home/kuhnn/.hermes/hermes-agent/agent/prompt_caching.py_apply_cache_markerr      s    7762Dggi  Gv~~ 	0#/C 'R--+O'3 W|LL
I 	'4   1W 1r{dD!! 	1$0D!!!1 1 1 1	1 	1    ttlc                 $    ddi}| dk    rd|d<   |S )zCBuild a cache_control marker dict for the given TTL ('5m' or '1h').r   	ephemeral1hr    )r   markers     r   _build_markerr"   )   s#    $k2F
d{{uMr   5mapi_messages	cache_ttlc                 x   t          j        |           sS t          |          }d}d                             d          dk    rt	          d         ||           |dz  }d|z
  }fdt          t                              D             }|| d         D ]}t	          |         ||           S )	a  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, all at the same TTL.

    Returns:
        Deep copy of messages with cache_control breakpoints injected.
    r   r   system)r         c                 R    g | ]#}|                              d           dk    !|$S )r   r'   )r   ).0imessagess     r   
<listcomp>z1apply_anthropic_cache_control.<locals>.<listcomp>K   s3    VVVQ(1+//&2I2IX2U2Uq2U2U2Ur   N)copydeepcopyr"   r   r   rangelen)	r$   r%   r   r!   breakpoints_used	remainingnon_sysidxr-   s	           @r   apply_anthropic_cache_controlr7   1   s     }\**H 9%%F{v(**HQKBRSSSSA$$IVVVV%H..VVVG	z{{# V VHSM6DTUUUUUOr   )F)r#   F)__doc__r/   typingr   r   r   r   boolr   r   r"   r7   r    r   r   <module>r;      s     " " " " " " " " " "1 1T 1 1 1Z^ 1 1 1 14s tCH~     " tCH~&  
$sCx.	     r   