Skip to main content

systemprompt_evaluation/services/
sampler.rs

1//! Sampling of recent gateway traffic into evaluation cases.
2//!
3//! Copyright (c) systemprompt.io — Business Source License 1.1.
4//! See <https://systemprompt.io> for licensing details.
5
6use crate::error::Result;
7use crate::models::{SampleFilter, SampledRequest};
8use crate::repository::SamplingRepository;
9
10#[derive(Debug, Clone)]
11pub struct SamplerService {
12    repository: SamplingRepository,
13}
14
15impl SamplerService {
16    #[must_use]
17    pub const fn new(repository: SamplingRepository) -> Self {
18        Self { repository }
19    }
20
21    pub async fn sample(&self, filter: &SampleFilter) -> Result<Vec<SampledRequest>> {
22        let sampled = self.repository.sample(filter).await?;
23        Ok(sampled
24            .into_iter()
25            .filter(|request| request.response_text.is_some() && !request.messages.is_empty())
26            .collect())
27    }
28}