use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
#[derive(Default)]
pub enum TokenizerModel {
#[serde(rename = "glm-4-plus")]
#[default]
Glm4Plus,
#[serde(rename = "glm-4-0520")]
Glm40520,
#[serde(rename = "glm-4-long")]
Glm4Long,
#[serde(rename = "glm-4-air")]
Glm4Air,
#[serde(rename = "glm-4-flash")]
Glm4Flash,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "role", rename_all = "lowercase")]
pub enum TokenizerMessage {
User { content: String },
System { content: String },
Assistant {
#[serde(skip_serializing_if = "Option::is_none")]
content: Option<String>,
},
Tool { content: String },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TokenizerBody {
pub model: TokenizerModel,
pub messages: Vec<TokenizerMessage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub request_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
}
impl TokenizerBody {
pub fn new(model: TokenizerModel, messages: Vec<TokenizerMessage>) -> Self {
Self {
model,
messages,
request_id: None,
user_id: None,
}
}
pub fn with_request_id(mut self, v: impl Into<String>) -> Self {
self.request_id = Some(v.into());
self
}
pub fn with_user_id(mut self, v: impl Into<String>) -> Self {
self.user_id = Some(v.into());
self
}
}