Skip to main content

zai_rs/knowledge/
types.rs

1use serde::{Deserialize, Serialize};
2use validator::Validate;
3
4/// Knowledge base item
5#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
6pub struct KnowledgeItem {
7    /// Knowledge base id
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub id: Option<String>,
10    /// Embedding model id
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub embedding_id: Option<u64>,
13    /// Knowledge base name
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub name: Option<String>,
16    /// Knowledge base description
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub description: Option<String>,
19    /// Background color
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub background: Option<String>,
22    /// Icon URL
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub icon: Option<String>,
25    /// Number of documents
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub document_size: Option<u64>,
28    /// Total tokenized length
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub length: Option<u64>,
31    /// Total words
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub word_num: Option<u64>,
34}
35
36/// Knowledge list data payload
37#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
38pub struct KnowledgeListData {
39    /// Knowledge list
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub list: Option<Vec<KnowledgeItem>>,
42    /// Total count
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub total: Option<u64>,
45}
46
47/// Knowledge list response envelope
48#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
49pub struct KnowledgeListResponse {
50    /// Data payload
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub data: Option<KnowledgeListData>,
53    /// Response code (200 means success)
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub code: Option<i64>,
56    /// Response message
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub message: Option<String>,
59    /// Response timestamp
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub timestamp: Option<u64>,
62}
63
64/// Knowledge detail response envelope (data is a single item)
65#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
66pub struct KnowledgeDetailResponse {
67    /// Data payload (single knowledge item)
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub data: Option<KnowledgeItem>,
70    /// Response code (200 means success)
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub code: Option<i64>,
73    /// Response message
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub message: Option<String>,
76    /// Response timestamp
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub timestamp: Option<u64>,
79}
80
81/// Capacity usage counters
82#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
83pub struct KnowledgeUsageCounts {
84    /// Total words
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub word_num: Option<u64>,
87    /// Total bytes (length)
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub length: Option<u64>,
90}
91
92/// Capacity data payload
93#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
94pub struct KnowledgeCapacityData {
95    /// Used usage
96    #[serde(skip_serializing_if = "Option::is_none")]
97    pub used: Option<KnowledgeUsageCounts>,
98    /// Total quota
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub total: Option<KnowledgeUsageCounts>,
101}
102
103/// Capacity response envelope
104#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
105pub struct KnowledgeCapacityResponse {
106    /// Data payload (used and total)
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub data: Option<KnowledgeCapacityData>,
109    /// Response code (200 means success)
110    #[serde(skip_serializing_if = "Option::is_none")]
111    pub code: Option<i64>,
112    /// Response message
113    #[serde(skip_serializing_if = "Option::is_none")]
114    pub message: Option<String>,
115    /// Response timestamp
116    #[serde(skip_serializing_if = "Option::is_none")]
117    pub timestamp: Option<u64>,
118}
119
120/// Document vectorization failure info
121#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
122pub struct DocumentFailInfo {
123    /// Embedding failure code
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub embedding_code: Option<i64>,
126    /// Embedding failure message
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub embedding_msg: Option<String>,
129}
130
131/// Document item in a knowledge base
132#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
133pub struct DocumentItem {
134    /// Document id
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub id: Option<String>,
137    /// Slice type (integer)
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub knowledge_type: Option<i64>,
140    /// Custom separators
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub custom_separator: Option<Vec<String>>,
143    /// Sentence size (slice size)
144    #[serde(skip_serializing_if = "Option::is_none")]
145    pub sentence_size: Option<u64>,
146    /// Document length (bytes)
147    #[serde(skip_serializing_if = "Option::is_none")]
148    pub length: Option<u64>,
149    /// Document words
150    #[serde(skip_serializing_if = "Option::is_none")]
151    pub word_num: Option<u64>,
152    /// Document name
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub name: Option<String>,
155    /// Document URL
156    #[serde(skip_serializing_if = "Option::is_none")]
157    pub url: Option<String>,
158    /// Embedding status (integer)
159    #[serde(skip_serializing_if = "Option::is_none")]
160    pub embedding_stat: Option<i64>,
161    /// Failure info (camelCase in API)
162    #[serde(rename = "failInfo")]
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub fail_info: Option<DocumentFailInfo>,
165}
166
167/// Document list data payload
168/// Document detail response envelope (data is a single document item)
169#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
170pub struct DocumentDetailResponse {
171    /// Data payload (single document item)
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub data: Option<DocumentItem>,
174    /// Response code
175    #[serde(skip_serializing_if = "Option::is_none")]
176    pub code: Option<i64>,
177    /// Response message
178    #[serde(skip_serializing_if = "Option::is_none")]
179    pub message: Option<String>,
180    /// Response timestamp
181    #[serde(skip_serializing_if = "Option::is_none")]
182    pub timestamp: Option<u64>,
183}
184
185#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
186pub struct DocumentListData {
187    /// Documents list
188    #[serde(skip_serializing_if = "Option::is_none")]
189    pub list: Option<Vec<DocumentItem>>,
190    /// Total count
191    #[serde(skip_serializing_if = "Option::is_none")]
192    pub total: Option<u64>,
193}
194
195/// Document list response envelope
196#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
197pub struct DocumentListResponse {
198    /// Data payload
199    #[serde(skip_serializing_if = "Option::is_none")]
200    pub data: Option<DocumentListData>,
201    /// Response code
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub code: Option<i64>,
204    /// Response message
205    #[serde(skip_serializing_if = "Option::is_none")]
206    pub message: Option<String>,
207    /// Response timestamp
208    #[serde(skip_serializing_if = "Option::is_none")]
209    pub timestamp: Option<u64>,
210}
211
212/// Success info for URL upload
213#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
214pub struct UploadUrlSuccessInfo {
215    /// Created document id
216    #[serde(rename = "documentId")]
217    #[serde(skip_serializing_if = "Option::is_none")]
218    pub document_id: Option<String>,
219    /// Source URL
220    #[serde(skip_serializing_if = "Option::is_none")]
221    pub url: Option<String>,
222}
223
224/// Failed info for URL upload
225#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
226pub struct UploadUrlFailedInfo {
227    /// Source URL
228    #[serde(skip_serializing_if = "Option::is_none")]
229    pub url: Option<String>,
230    /// Failure reason
231    #[serde(rename = "failReason")]
232    #[serde(skip_serializing_if = "Option::is_none")]
233    pub fail_reason: Option<String>,
234}
235
236/// Upload URL response data payload
237#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
238pub struct UploadUrlData {
239    /// Success items
240    #[serde(rename = "successInfos")]
241    #[serde(skip_serializing_if = "Option::is_none")]
242    pub success_infos: Option<Vec<UploadUrlSuccessInfo>>,
243    /// Failed items
244    #[serde(rename = "failedInfos")]
245    #[serde(skip_serializing_if = "Option::is_none")]
246    pub failed_infos: Option<Vec<UploadUrlFailedInfo>>,
247}
248
249/// Upload URL response envelope
250#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
251pub struct UploadUrlResponse {
252    /// Data payload
253    #[serde(skip_serializing_if = "Option::is_none")]
254    pub data: Option<UploadUrlData>,
255    /// Response code
256    #[serde(skip_serializing_if = "Option::is_none")]
257    pub code: Option<i64>,
258    /// Response message
259    #[serde(skip_serializing_if = "Option::is_none")]
260    pub message: Option<String>,
261    /// Response timestamp
262    #[serde(skip_serializing_if = "Option::is_none")]
263    pub timestamp: Option<u64>,
264}
265
266/// Success info for file upload
267#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
268pub struct UploadFileSuccessInfo {
269    /// Created document id
270    #[serde(rename = "documentId")]
271    #[serde(skip_serializing_if = "Option::is_none")]
272    pub document_id: Option<String>,
273    /// Original file name
274    #[serde(rename = "fileName")]
275    #[serde(skip_serializing_if = "Option::is_none")]
276    pub file_name: Option<String>,
277}
278
279/// Failed info for file upload
280#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
281pub struct UploadFileFailedInfo {
282    /// Original file name
283    #[serde(rename = "fileName")]
284    #[serde(skip_serializing_if = "Option::is_none")]
285    pub file_name: Option<String>,
286    /// Failure reason
287    #[serde(rename = "failReason")]
288    #[serde(skip_serializing_if = "Option::is_none")]
289    pub fail_reason: Option<String>,
290}
291
292/// Upload file response data payload
293#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
294pub struct UploadFileData {
295    /// Success items
296    #[serde(rename = "successInfos")]
297    #[serde(skip_serializing_if = "Option::is_none")]
298    pub success_infos: Option<Vec<UploadFileSuccessInfo>>,
299    /// Failed items
300    #[serde(rename = "failedInfos")]
301    #[serde(skip_serializing_if = "Option::is_none")]
302    pub failed_infos: Option<Vec<UploadFileFailedInfo>>,
303}
304
305/// One parsed image mapping item
306#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
307pub struct DocumentImageItem {
308    /// Image index text, e.g. "【示意图序号_...】"
309    #[serde(skip_serializing_if = "Option::is_none")]
310    pub text: Option<String>,
311    /// Image URL
312    #[serde(skip_serializing_if = "Option::is_none")]
313    pub cos_url: Option<String>,
314}
315
316/// Image list data payload
317#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
318pub struct DocumentImageListData {
319    /// Images array
320    #[serde(skip_serializing_if = "Option::is_none")]
321    pub images: Option<Vec<DocumentImageItem>>,
322}
323
324/// Image list response envelope
325#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
326pub struct DocumentImageListResponse {
327    /// Data payload
328    #[serde(skip_serializing_if = "Option::is_none")]
329    pub data: Option<DocumentImageListData>,
330    /// Response code
331    #[serde(skip_serializing_if = "Option::is_none")]
332    pub code: Option<i64>,
333    /// Response message
334    #[serde(skip_serializing_if = "Option::is_none")]
335    pub message: Option<String>,
336    /// Response timestamp
337    #[serde(skip_serializing_if = "Option::is_none")]
338    pub timestamp: Option<u64>,
339}
340
341/// Upload file response envelope
342#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
343pub struct UploadFileResponse {
344    /// Data payload
345    #[serde(skip_serializing_if = "Option::is_none")]
346    pub data: Option<UploadFileData>,
347    /// Response code
348    #[serde(skip_serializing_if = "Option::is_none")]
349    pub code: Option<i64>,
350    /// Response message
351    #[serde(skip_serializing_if = "Option::is_none")]
352    pub message: Option<String>,
353    /// Response timestamp
354    #[serde(skip_serializing_if = "Option::is_none")]
355    pub timestamp: Option<u64>,
356}