use zeph_llm::provider::GenerationOverrides;
#[must_use]
pub fn deterministic_overrides() -> GenerationOverrides {
GenerationOverrides {
temperature: Some(0.0),
top_p: None,
top_k: None,
frequency_penalty: None,
presence_penalty: None,
}
}
pub fn apply_deterministic_overrides(
provider: zeph_llm::any::AnyProvider,
no_deterministic: bool,
) -> zeph_llm::any::AnyProvider {
if no_deterministic {
provider
} else {
provider.with_generation_overrides(deterministic_overrides())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deterministic_overrides_returns_temperature_zero() {
let overrides = deterministic_overrides();
assert_eq!(overrides.temperature, Some(0.0));
}
#[test]
fn deterministic_overrides_leaves_other_fields_none() {
let overrides = deterministic_overrides();
assert!(overrides.top_p.is_none());
assert!(overrides.top_k.is_none());
assert!(overrides.frequency_penalty.is_none());
assert!(overrides.presence_penalty.is_none());
}
#[test]
fn apply_with_no_deterministic_true_skips_override() {
let provider =
zeph_llm::any::AnyProvider::Mock(zeph_llm::mock::MockProvider::with_responses(vec![]));
let result = apply_deterministic_overrides(provider, true);
assert!(matches!(result, zeph_llm::any::AnyProvider::Mock(_)));
}
#[test]
fn apply_with_no_deterministic_false_applies_override() {
let provider =
zeph_llm::any::AnyProvider::Mock(zeph_llm::mock::MockProvider::with_responses(vec![]));
let result = apply_deterministic_overrides(provider, false);
assert!(matches!(result, zeph_llm::any::AnyProvider::Mock(_)));
}
}