use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "snake_case")]
#[non_exhaustive]
pub enum ThinkingConfig {
Enabled {
budget_tokens: u32,
},
Disabled,
}
impl ThinkingConfig {
#[must_use]
pub fn enabled(budget_tokens: u32) -> Self {
Self::Enabled { budget_tokens }
}
}
#[cfg(test)]
mod tests {
use super::*;
use pretty_assertions::assert_eq;
use serde_json::json;
#[test]
fn enabled_round_trips() {
let c = ThinkingConfig::enabled(8192);
let v = serde_json::to_value(c).unwrap();
assert_eq!(v, json!({"type": "enabled", "budget_tokens": 8192}));
let parsed: ThinkingConfig = serde_json::from_value(v).unwrap();
assert_eq!(parsed, c);
}
#[test]
fn disabled_round_trips() {
let c = ThinkingConfig::Disabled;
let v = serde_json::to_value(c).unwrap();
assert_eq!(v, json!({"type": "disabled"}));
let parsed: ThinkingConfig = serde_json::from_value(v).unwrap();
assert_eq!(parsed, c);
}
}