package vip.mate.llm.cache; import java.util.List; import java.util.Map; /** * 协议无关的"缓存指令包"。 * *

序列化器从 {@link CachedPlan} 推导出本对象后,由具体的请求拦截层 * (如 {@code CachingChatModelDecorator} 注册到 RestClient 的 {@code ClientHttpRequestInterceptor}) * 把指令落到具体协议的请求体上。

* * @param breakpoints 最终要应用的断点(顺序敏感) * @param httpHeaders 需要附加到 HTTP 请求的额外 header(如 Anthropic extended-cache-ttl beta header) * @param ttl TTL 提示 * @param protocol 生产此指令的协议;运行时拦截器据此选分支 */ public record CacheDirectives( List breakpoints, Map httpHeaders, CacheTtl ttl, vip.mate.llm.model.ModelProtocol protocol) { public CacheDirectives { breakpoints = (breakpoints == null) ? List.of() : List.copyOf(breakpoints); httpHeaders = (httpHeaders == null) ? Map.of() : Map.copyOf(httpHeaders); if (ttl == null) ttl = CacheTtl.DEFAULT_5M; if (protocol == null) throw new IllegalArgumentException("protocol must not be null"); } public static CacheDirectives empty(vip.mate.llm.model.ModelProtocol protocol) { return new CacheDirectives(List.of(), Map.of(), CacheTtl.DEFAULT_5M, protocol); } public boolean isEmpty() { return breakpoints.isEmpty(); } }