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
169/// Document detail response envelope (data is a single document item)
170#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
171pub struct DocumentDetailResponse {
172    /// Data payload (single document item)
173    #[serde(skip_serializing_if = "Option::is_none")]
174    pub data: Option<DocumentItem>,
175    /// Response code
176    #[serde(skip_serializing_if = "Option::is_none")]
177    pub code: Option<i64>,
178    /// Response message
179    #[serde(skip_serializing_if = "Option::is_none")]
180    pub message: Option<String>,
181    /// Response timestamp
182    #[serde(skip_serializing_if = "Option::is_none")]
183    pub timestamp: Option<u64>,
184}
185
186#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
187pub struct DocumentListData {
188    /// Documents list
189    #[serde(skip_serializing_if = "Option::is_none")]
190    pub list: Option<Vec<DocumentItem>>,
191    /// Total count
192    #[serde(skip_serializing_if = "Option::is_none")]
193    pub total: Option<u64>,
194}
195
196/// Document list response envelope
197#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
198pub struct DocumentListResponse {
199    /// Data payload
200    #[serde(skip_serializing_if = "Option::is_none")]
201    pub data: Option<DocumentListData>,
202    /// Response code
203    #[serde(skip_serializing_if = "Option::is_none")]
204    pub code: Option<i64>,
205    /// Response message
206    #[serde(skip_serializing_if = "Option::is_none")]
207    pub message: Option<String>,
208    /// Response timestamp
209    #[serde(skip_serializing_if = "Option::is_none")]
210    pub timestamp: Option<u64>,
211}
212
213/// Success info for URL upload
214#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
215pub struct UploadUrlSuccessInfo {
216    /// Created document id
217    #[serde(rename = "documentId")]
218    #[serde(skip_serializing_if = "Option::is_none")]
219    pub document_id: Option<String>,
220    /// Source URL
221    #[serde(skip_serializing_if = "Option::is_none")]
222    pub url: Option<String>,
223}
224
225/// Failed info for URL upload
226#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
227pub struct UploadUrlFailedInfo {
228    /// Source URL
229    #[serde(skip_serializing_if = "Option::is_none")]
230    pub url: Option<String>,
231    /// Failure reason
232    #[serde(rename = "failReason")]
233    #[serde(skip_serializing_if = "Option::is_none")]
234    pub fail_reason: Option<String>,
235}
236
237/// Upload URL response data payload
238#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
239pub struct UploadUrlData {
240    /// Success items
241    #[serde(rename = "successInfos")]
242    #[serde(skip_serializing_if = "Option::is_none")]
243    pub success_infos: Option<Vec<UploadUrlSuccessInfo>>,
244    /// Failed items
245    #[serde(rename = "failedInfos")]
246    #[serde(skip_serializing_if = "Option::is_none")]
247    pub failed_infos: Option<Vec<UploadUrlFailedInfo>>,
248}
249
250/// Upload URL response envelope
251#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
252pub struct UploadUrlResponse {
253    /// Data payload
254    #[serde(skip_serializing_if = "Option::is_none")]
255    pub data: Option<UploadUrlData>,
256    /// Response code
257    #[serde(skip_serializing_if = "Option::is_none")]
258    pub code: Option<i64>,
259    /// Response message
260    #[serde(skip_serializing_if = "Option::is_none")]
261    pub message: Option<String>,
262    /// Response timestamp
263    #[serde(skip_serializing_if = "Option::is_none")]
264    pub timestamp: Option<u64>,
265}
266
267/// Success info for file upload
268#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
269pub struct UploadFileSuccessInfo {
270    /// Created document id
271    #[serde(rename = "documentId")]
272    #[serde(skip_serializing_if = "Option::is_none")]
273    pub document_id: Option<String>,
274    /// Original file name
275    #[serde(rename = "fileName")]
276    #[serde(skip_serializing_if = "Option::is_none")]
277    pub file_name: Option<String>,
278}
279
280/// Failed info for file upload
281#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
282pub struct UploadFileFailedInfo {
283    /// Original file name
284    #[serde(rename = "fileName")]
285    #[serde(skip_serializing_if = "Option::is_none")]
286    pub file_name: Option<String>,
287    /// Failure reason
288    #[serde(rename = "failReason")]
289    #[serde(skip_serializing_if = "Option::is_none")]
290    pub fail_reason: Option<String>,
291}
292
293/// Upload file response data payload
294#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
295pub struct UploadFileData {
296    /// Success items
297    #[serde(rename = "successInfos")]
298    #[serde(skip_serializing_if = "Option::is_none")]
299    pub success_infos: Option<Vec<UploadFileSuccessInfo>>,
300    /// Failed items
301    #[serde(rename = "failedInfos")]
302    #[serde(skip_serializing_if = "Option::is_none")]
303    pub failed_infos: Option<Vec<UploadFileFailedInfo>>,
304}
305
306/// One parsed image mapping item
307#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
308pub struct DocumentImageItem {
309    /// Image index text, e.g. "【示意图序号_...】"
310    #[serde(skip_serializing_if = "Option::is_none")]
311    pub text: Option<String>,
312    /// Image URL
313    #[serde(skip_serializing_if = "Option::is_none")]
314    pub cos_url: Option<String>,
315}
316
317/// Image list data payload
318#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
319pub struct DocumentImageListData {
320    /// Images array
321    #[serde(skip_serializing_if = "Option::is_none")]
322    pub images: Option<Vec<DocumentImageItem>>,
323}
324
325/// Image list response envelope
326#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
327pub struct DocumentImageListResponse {
328    /// Data payload
329    #[serde(skip_serializing_if = "Option::is_none")]
330    pub data: Option<DocumentImageListData>,
331    /// Response code
332    #[serde(skip_serializing_if = "Option::is_none")]
333    pub code: Option<i64>,
334    /// Response message
335    #[serde(skip_serializing_if = "Option::is_none")]
336    pub message: Option<String>,
337    /// Response timestamp
338    #[serde(skip_serializing_if = "Option::is_none")]
339    pub timestamp: Option<u64>,
340}
341
342/// Upload file response envelope
343#[derive(Debug, Clone, Serialize, Deserialize, Validate)]
344pub struct UploadFileResponse {
345    /// Data payload
346    #[serde(skip_serializing_if = "Option::is_none")]
347    pub data: Option<UploadFileData>,
348    /// Response code
349    #[serde(skip_serializing_if = "Option::is_none")]
350    pub code: Option<i64>,
351    /// Response message
352    #[serde(skip_serializing_if = "Option::is_none")]
353    pub message: Option<String>,
354    /// Response timestamp
355    #[serde(skip_serializing_if = "Option::is_none")]
356    pub timestamp: Option<u64>,
357}