use rskit_ai::FinishReason;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[non_exhaustive]
pub enum StopReason {
EndTurn,
MaxTurns,
MaxTokens,
WallClockExceeded,
MaxToolCallsExceeded,
Cancelled,
Aborted,
}
impl From<FinishReason> for StopReason {
fn from(reason: FinishReason) -> Self {
match reason {
FinishReason::Length => Self::MaxTokens,
FinishReason::Cancelled => Self::Cancelled,
FinishReason::Error | FinishReason::ContentFilter => Self::Aborted,
_ => Self::EndTurn,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_stop_reason_serde() {
let json = serde_json::to_string(&StopReason::EndTurn).unwrap();
let deser: StopReason = serde_json::from_str(&json).unwrap();
assert!(matches!(deser, StopReason::EndTurn));
}
}