use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct FinishReason {
pub unified: FinishReasonKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub raw: Option<String>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "kebab-case")]
pub enum FinishReasonKind {
Stop,
Length,
ContentFilter,
ToolCalls,
Error,
Other,
}
impl FinishReason {
#[must_use]
pub const fn new(kind: FinishReasonKind) -> Self {
Self {
unified: kind,
raw: None,
}
}
pub fn with_raw(kind: FinishReasonKind, raw: impl Into<String>) -> Self {
Self {
unified: kind,
raw: Some(raw.into()),
}
}
}