use crate::policy::pool_budget::SWA_RETAIN_GAP;
use crate::policy::radix::align_down;
pub fn resolve_anchor_token(
opener: Option<&str>,
encode: impl Fn(&str) -> Vec<u32>,
) -> Option<u32> {
let opener = opener?;
if opener.is_empty() {
return None;
}
let ids = encode(opener);
match ids.as_slice() {
[single] => Some(*single),
_ => None,
}
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct AnchorState {
anchor_len: Option<usize>,
}
impl AnchorState {
pub fn new() -> Self {
AnchorState::default()
}
pub fn anchor_len(&self) -> Option<usize> {
self.anchor_len
}
pub fn clear(&mut self) {
self.anchor_len = None;
}
pub fn observe(
&mut self,
token: u32,
anchor_token: Option<u32>,
position: usize,
finished: bool,
) -> bool {
if finished || self.anchor_len.is_some() || anchor_token != Some(token) {
return false;
}
self.anchor_len = Some(position);
true
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct WindowPolicy {
pub sliding_window: usize,
pub page_size: usize,
pub eviction_interval: usize,
}
impl WindowPolicy {
pub fn new(sliding_window: usize, page_size: usize) -> Self {
WindowPolicy {
sliding_window,
page_size,
eviction_interval: crate::policy::pool_budget::DEFAULT_SWA_EVICTION_INTERVAL,
}
}
pub fn with_eviction_interval(mut self, interval: usize) -> Self {
self.eviction_interval = interval.max(1);
self
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SlidingRequest {
pub position: usize,
pub already_released: usize,
pub locked_prefix: usize,
pub decode_step: usize,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct SlideDecision {
pub free_from: usize,
pub free_to: usize,
pub drop_anchor: bool,
}
impl SlideDecision {
pub fn frees_nothing(&self) -> bool {
self.free_to <= self.free_from
}
pub fn released(&self) -> usize {
self.free_to.saturating_sub(self.free_from)
}
}
pub fn decode_slide(
request: &SlidingRequest,
anchor: Option<usize>,
policy: &WindowPolicy,
forward_iter: usize,
) -> Option<SlideDecision> {
if !forward_iter.is_multiple_of(policy.eviction_interval) {
return None;
}
if request.decode_step < 1 {
return None;
}
let window = policy.sliding_window as i64;
let gap = SWA_RETAIN_GAP as i64;
let page = policy.page_size as i64;
let mut threshold = (request.position as i64 - 1) - window - page;
let mut drop_anchor = false;
if let Some(anchor_len) = anchor {
let cap = anchor_len as i64 - window - gap;
if threshold - cap > window + gap {
drop_anchor = true;
} else {
threshold = threshold.min(cap);
}
}
Some(release_span(threshold, request, page, drop_anchor))
}
pub fn prefill_slide(request: &SlidingRequest, policy: &WindowPolicy) -> SlideDecision {
let threshold =
request.position as i64 - policy.sliding_window as i64 - policy.page_size as i64;
release_span(threshold, request, policy.page_size as i64, false)
}
fn release_span(
threshold: i64,
request: &SlidingRequest,
page: i64,
drop_anchor: bool,
) -> SlideDecision {
let aligned = if threshold < 0 {
threshold - (page + threshold % page) % page
} else {
align_down(threshold as usize, page as usize) as i64
};
let start = request.already_released.max(request.locked_prefix);
let free_to = if aligned > start as i64 {
aligned as usize
} else {
start
};
SlideDecision {
free_from: start,
free_to,
drop_anchor,
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::policy::parser::ToolCallFormat;
const WINDOW: usize = 512;
const PAGE: usize = 64;
fn policy() -> WindowPolicy {
WindowPolicy::new(WINDOW, PAGE)
}
fn request(position: usize) -> SlidingRequest {
SlidingRequest {
position,
already_released: 0,
locked_prefix: 0,
decode_step: 1,
}
}
#[test]
fn an_anchor_token_is_only_resolved_when_it_is_a_single_token() {
let single = resolve_anchor_token(Some("<tool_call>"), |_| vec![151657]);
assert_eq!(single, Some(151657));
let split = resolve_anchor_token(Some("<tool_call>"), |_| vec![27, 14172, 13]);
assert_eq!(split, None, "a multi-token opener gets no anchors");
assert_eq!(resolve_anchor_token(None, |_| vec![1]), None);
assert_eq!(resolve_anchor_token(Some(""), |_| vec![1]), None);
}
#[test]
fn every_format_with_an_opener_can_resolve_an_anchor() {
for format in [
ToolCallFormat::Qwen25,
ToolCallFormat::Qwen3Coder,
ToolCallFormat::Glm47,
ToolCallFormat::Llama3,
ToolCallFormat::Mistral,
ToolCallFormat::DeepSeekV32,
ToolCallFormat::MiniMax,
ToolCallFormat::Gemma4,
] {
assert_eq!(
resolve_anchor_token(format.opener(), |_| vec![7]),
Some(7),
"{format:?}"
);
}
assert_eq!(
resolve_anchor_token(ToolCallFormat::GptOss.opener(), |_| vec![7]),
None,
"a channel header opens ordinary messages too"
);
}
#[test]
fn the_first_tool_call_of_a_turn_is_the_anchor() {
let mut state = AnchorState::new();
assert!(!state.observe(5, Some(9), 100, false), "not the opener");
assert!(state.observe(9, Some(9), 101, false));
assert_eq!(state.anchor_len(), Some(101));
assert!(!state.observe(9, Some(9), 140, false));
assert_eq!(state.anchor_len(), Some(101));
}
#[test]
fn a_terminal_token_is_not_an_anchor() {
let mut state = AnchorState::new();
assert!(!state.observe(9, Some(9), 101, true));
assert_eq!(state.anchor_len(), None);
}
#[test]
fn a_checkpoint_with_no_anchor_token_never_anchors() {
let mut state = AnchorState::new();
assert!(!state.observe(9, None, 101, false));
assert_eq!(state.anchor_len(), None);
}
#[test]
fn the_slide_runs_on_a_cadence_and_never_on_the_first_step() {
let policy = policy();
let request = request(4096);
assert!(decode_slide(&request, None, &policy, 1).is_none());
assert!(decode_slide(&request, None, &policy, 128).is_some());
let first_step = SlidingRequest {
decode_step: 0,
..request
};
assert!(
decode_slide(&first_step, None, &policy, 128).is_none(),
"step 0's state may still be in flight from its prefill"
);
}
#[test]
fn a_long_generation_releases_everything_outside_its_window() {
let policy = policy();
let decision = decode_slide(&request(4096), None, &policy, 128).expect("a slide is due");
assert_eq!(decision.free_from, 0);
assert_eq!(decision.free_to, 3456);
assert!(!decision.drop_anchor);
}
#[test]
fn a_short_generation_releases_nothing() {
let policy = policy();
for position in [0usize, 1, 63, 100, 500] {
let decision =
decode_slide(&request(position), None, &policy, 128).expect("a slide is due");
assert!(
decision.frees_nothing(),
"position {position} released {}",
decision.released()
);
}
}
#[test]
fn the_cache_owned_prefix_is_never_released() {
let policy = policy();
let request = SlidingRequest {
locked_prefix: 3000,
..request(4096)
};
let decision = decode_slide(&request, None, &policy, 128).expect("a slide is due");
assert_eq!(decision.free_from, 3000);
assert_eq!(decision.free_to, 3456);
}
#[test]
fn a_slide_never_re_releases_what_it_already_released() {
let policy = policy();
let request = SlidingRequest {
already_released: 3456,
..request(4096)
};
let decision = decode_slide(&request, None, &policy, 128).expect("a slide is due");
assert!(decision.frees_nothing());
}
#[test]
fn an_anchor_holds_the_state_the_next_turn_will_rejoin_at() {
let policy = policy();
let anchor = 3000;
let unanchored = decode_slide(&request(3500), None, &policy, 128).unwrap();
let anchored = decode_slide(&request(3500), Some(anchor), &policy, 128).unwrap();
assert!(
anchored.free_to < unanchored.free_to,
"the anchor must hold state the plain slide would have taken"
);
assert!(anchored.free_to <= anchor - WINDOW - SWA_RETAIN_GAP);
assert!(!anchored.drop_anchor);
}
#[test]
fn an_anchor_never_makes_the_slide_more_aggressive() {
let policy = policy();
for position in (600..6000).step_by(97) {
for anchor in (100..position).step_by(211) {
let plain = decode_slide(&request(position), None, &policy, 128).unwrap();
let anchored =
decode_slide(&request(position), Some(anchor), &policy, 128).unwrap();
assert!(
anchored.free_to <= plain.free_to,
"position {position} anchor {anchor}: anchored freed further"
);
}
}
}
#[test]
fn a_drifted_anchor_is_dropped_rather_than_held_forever() {
let policy = policy();
let anchor = 3000;
let held = decode_slide(&request(3576), Some(anchor), &policy, 128).unwrap();
assert!(!held.drop_anchor, "just inside the bound");
let dropped = decode_slide(&request(3600), Some(anchor), &policy, 128).unwrap();
assert!(dropped.drop_anchor, "just outside it");
let plain = decode_slide(&request(3600), None, &policy, 128).unwrap();
assert_eq!(dropped.free_to, plain.free_to);
}
#[test]
fn held_state_stays_bounded_over_a_long_generation() {
let policy = policy();
let anchor_at = 3000usize;
let mut anchor = None;
let mut released = 0usize;
let bound = 2 * (WINDOW + SWA_RETAIN_GAP) + policy.eviction_interval + 2 * PAGE;
for position in (128..100_000).step_by(128) {
if position >= anchor_at && anchor.is_none() {
anchor = Some(anchor_at);
}
let request = SlidingRequest {
position,
already_released: released,
locked_prefix: 0,
decode_step: 1,
};
let decision = decode_slide(&request, anchor, &policy, 128).expect("a slide is due");
if decision.drop_anchor {
anchor = None;
}
released = released.max(decision.free_to);
assert!(
position - released <= bound,
"position {position} holds {} tokens, over the {bound} the pool is sized for",
position - released
);
}
assert_eq!(anchor, None, "the anchor was dropped as the cursor ran on");
}
#[test]
fn prefill_slides_on_every_batch() {
let policy = policy();
let decision = prefill_slide(&request(4096), &policy);
assert_eq!(decision.free_to, 3520);
assert!(!decision.drop_anchor);
assert!(prefill_slide(&request(100), &policy).frees_nothing());
}
}