zai_rs/model/text_tokenizer/
request.rs

1use serde::{Deserialize, Serialize};
2
3/// Tokenizer-capable models
4#[derive(Debug, Clone, Serialize, Deserialize)]
5#[serde(rename_all = "kebab-case")]
6pub enum TokenizerModel {
7    #[serde(rename = "glm-4-plus")]
8    Glm4Plus,
9    #[serde(rename = "glm-4-0520")]
10    Glm40520,
11    #[serde(rename = "glm-4-long")]
12    Glm4Long,
13    #[serde(rename = "glm-4-air")]
14    Glm4Air,
15    #[serde(rename = "glm-4-flash")]
16    Glm4Flash,
17}
18
19impl Default for TokenizerModel {
20    fn default() -> Self {
21        TokenizerModel::Glm4Plus
22    }
23}
24
25/// One message item for tokenizer input
26#[derive(Debug, Clone, Serialize, Deserialize)]
27#[serde(tag = "role", rename_all = "lowercase")]
28pub enum TokenizerMessage {
29    /// 用户消息
30    User { content: String },
31    /// 系统消息
32    System { content: String },
33    /// 助手消息(content 可选)
34    Assistant {
35        #[serde(skip_serializing_if = "Option::is_none")]
36        content: Option<String>,
37    },
38    /// 工具消息
39    Tool { content: String },
40}
41
42/// Request body for tokenizer
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct TokenizerBody {
45    /// 调用的模型代码(默认 glm-4-plus)
46    pub model: TokenizerModel,
47    /// 对话消息列表(至少 1 条)
48    pub messages: Vec<TokenizerMessage>,
49    /// 客户端请求 ID
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub request_id: Option<String>,
52    /// 终端用户 ID
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub user_id: Option<String>,
55}
56
57impl TokenizerBody {
58    pub fn new(model: TokenizerModel, messages: Vec<TokenizerMessage>) -> Self {
59        Self {
60            model,
61            messages,
62            request_id: None,
63            user_id: None,
64        }
65    }
66    pub fn with_request_id(mut self, v: impl Into<String>) -> Self {
67        self.request_id = Some(v.into());
68        self
69    }
70    pub fn with_user_id(mut self, v: impl Into<String>) -> Self {
71        self.user_id = Some(v.into());
72        self
73    }
74}