use crate::agent::error::{Code, Failure};
pub(super) const WHITESPACE_RUN: usize = 4096;
#[derive(Default)]
pub(super) struct Tail {
run: usize,
}
impl Tail {
pub fn push(&mut self, text: &str) -> Result<(), Failure> {
let trailing = text.chars().rev().take_while(|c| c.is_whitespace()).count();
self.run = if trailing == text.chars().count() {
self.run.saturating_add(trailing)
} else {
trailing
};
if self.run < WHITESPACE_RUN {
return Ok(());
}
Err(Failure::new(
Code::DegenerateOutput,
format!(
"Provider response degenerated: its text ended in {} whitespace characters, so artifactize stopped the stream.",
self.run
),
))
}
}