File size: 1,804 Bytes
afa0cbf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //! Model-owned effort normalization shared by native requests and configuration update items.
//!
//! UI aliases resolve through the same model defaults and fallbacks in both paths.
use super::ModelInfo;
use super::ReasoningEffort;
impl ModelInfo {
/// Resolves a selected effort to the value sent in an ordinary inference request.
pub fn resolve_reasoning_effort(&self, effort: ReasoningEffort) -> ReasoningEffort {
match effort {
ReasoningEffort::Ultra => self
.multi_agent_reasoning_effort
.as_ref()
.filter(|effort| {
*effort != &ReasoningEffort::Ultra
&& self
.supported_reasoning_levels
.iter()
.any(|preset| &preset.effort == *effort)
})
.cloned()
.or_else(|| {
self.supported_reasoning_levels
.iter()
.find(|preset| preset.effort == ReasoningEffort::Max)
.or_else(|| {
self.supported_reasoning_levels
.iter()
.rev()
.find(|preset| preset.effort != ReasoningEffort::Ultra)
})
.map(|preset| preset.effort.clone())
})
.unwrap_or(ReasoningEffort::Medium),
// Keep "persistent" in local settings; the Responses API calls it "disabled".
ReasoningEffort::Persistent => ReasoningEffort::Custom("disabled".to_string()),
effort => effort,
}
}
}
#[cfg(test)]
#[path = "reasoning_effort_tests.rs"]
mod tests;
|