Resolve saved Daybreak preferences against advertised model programs (#59192)

## What changed

Add `SavedDaybreakChoice` and `ModelAccessPrograms::select_saved` to resolve an optional saved preference. Enabled selects an advertised Daybreak program, disabled selects an advertised standard program, and unset or unsupported choices return `None`.

## Testing

Extend selection tests to cover enabled, disabled, and unset preferences across advertised program combinations, preserving the preference for Daybreak Blue over Red.

GitOrigin-RevId: 1c7ab3fe1d3a48ad64519bfedfe27de90838516c
This commit is contained in:
jamy-OAI
2026-11-03 16:33:17 +00:00
committed by copyberry
parent 079e17a422
commit ac558e2a32
3 changed files with 46 additions and 2 deletions
+1
View File
@@ -59,6 +59,7 @@ mod guardian_v2;
mod reasoning_effort;
pub use access_programs::ModelAccessPrograms;
pub use access_programs::SavedDaybreakChoice;
pub use guardian_v2::AsyncClassifierMode;
pub use guardian_v2::GuardianV2ModelConfig;
pub use guardian_v2::GuardianV2TranscriptModelConfig;
@@ -17,7 +17,35 @@ pub struct ModelAccessPrograms {
pub cyber: Vec<CyberAccessProgram>,
}
/// Saved preference to resolve against the selected model's advertised programs.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SavedDaybreakChoice {
Unset,
On,
Off,
}
impl From<Option<bool>> for SavedDaybreakChoice {
fn from(enabled: Option<bool>) -> Self {
match enabled {
Some(true) => Self::On,
Some(false) => Self::Off,
None => Self::Unset,
}
}
}
impl ModelAccessPrograms {
/// Select only an advertised program for explicit saved intent. Unset and
/// unsupported choices remain omitted, including On without Daybreak support.
pub fn select_saved(&self, choice: SavedDaybreakChoice) -> Option<CyberAccessProgram> {
match choice {
SavedDaybreakChoice::On => self.daybreak(),
SavedDaybreakChoice::Off => self.standard(),
SavedDaybreakChoice::Unset => None,
}
}
/// Select the preferred Daybreak treatment advertised for this model.
pub fn daybreak(&self) -> Option<CyberAccessProgram> {
[
@@ -1,4 +1,7 @@
#![cfg(test)]
use super::ModelAccessPrograms;
use super::SavedDaybreakChoice;
use crate::turn_input::CyberAccessProgram;
use pretty_assertions::assert_eq;
@@ -17,8 +20,20 @@ fn selects_only_advertised_programs_with_blue_preferred() {
] {
let programs = ModelAccessPrograms { cyber };
assert_eq!(
(programs.daybreak(), programs.standard()),
(expected_daybreak, expected_standard)
(
programs.daybreak(),
programs.standard(),
programs.select_saved(SavedDaybreakChoice::from(Some(true))),
programs.select_saved(SavedDaybreakChoice::from(Some(false))),
programs.select_saved(SavedDaybreakChoice::from(/* enabled */ None)),
),
(
expected_daybreak,
expected_standard,
expected_daybreak,
expected_standard,
None,
)
);
}
}