coral-rs 0.3.0

Rig and RMCP helper library for quickly building Rust powered Coral feature complete agents
Documentation
use crate::completion_evaluated_prompt::CompletionEvaluatedPrompt;
use futures::{Stream, stream};
use std::time::Duration;
use tokio::time::sleep;

pub fn repeating_prompt_stream(
    initial_prompt: impl Into<CompletionEvaluatedPrompt>,
    repeating_prompt: impl Into<CompletionEvaluatedPrompt>,
    delay: Option<Duration>,
    max_reps: usize,
) -> impl Stream<Item = CompletionEvaluatedPrompt> {
    stream::unfold(
        (
            initial_prompt.into(),
            repeating_prompt.into(),
            delay,
            max_reps,
            0,
        ),
        |(initial_prompt, repeating_prompt, delay, max_reps, reps)| {
            Box::pin(async move {
                if reps >= max_reps {
                    return None;
                }

                if reps > 0 {
                    if let Some(delay_duration) = delay {
                        sleep(delay_duration).await;
                    }
                }

                let prompt = if reps == 0 {
                    initial_prompt.clone()
                } else {
                    repeating_prompt.clone()
                };

                Some((
                    prompt,
                    (initial_prompt, repeating_prompt, delay, max_reps, reps + 1),
                ))
            })
        },
    )
}