portkey_sdk/model/
models.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
9#[serde(rename_all = "lowercase")]
10pub enum ModelSortField {
11 #[default]
13 Name,
14 Provider,
16 #[serde(rename = "ai_service")]
18 AiService,
19}
20
21#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
23#[serde(rename_all = "lowercase")]
24pub enum SortOrder {
25 #[default]
27 Asc,
28 Desc,
30}
31
32#[derive(Debug, Clone, Default, Serialize, Deserialize)]
49pub struct ListModelsParams {
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub ai_service: Option<String>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub provider: Option<String>,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub limit: Option<i32>,
61
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub offset: Option<i32>,
65
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub sort: Option<ModelSortField>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
72 pub order: Option<SortOrder>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct Model {
78 pub id: String,
80
81 pub created: i64,
83
84 pub object: String,
86
87 pub owned_by: String,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct ListModelsResponse {
102 pub object: String,
104
105 pub data: Vec<Model>,
107}
108
109#[cfg(test)]
110mod tests {
111 use super::*;
112
113 #[test]
114 fn test_model_sort_field() {
115 let field = ModelSortField::Name;
116 let json = serde_json::to_string(&field).unwrap();
117 assert_eq!(json, "\"name\"");
118
119 let field = ModelSortField::AiService;
120 let json = serde_json::to_string(&field).unwrap();
121 assert_eq!(json, "\"ai_service\"");
122 }
123
124 #[test]
125 fn test_sort_order() {
126 let order = SortOrder::Asc;
127 let json = serde_json::to_string(&order).unwrap();
128 assert_eq!(json, "\"asc\"");
129
130 let order = SortOrder::Desc;
131 let json = serde_json::to_string(&order).unwrap();
132 assert_eq!(json, "\"desc\"");
133 }
134
135 #[test]
136 fn test_list_models_params() {
137 let params = ListModelsParams {
138 provider: Some("openai".to_string()),
139 limit: Some(10),
140 ..Default::default()
141 };
142
143 assert_eq!(params.provider, Some("openai".to_string()));
144 assert_eq!(params.limit, Some(10));
145 }
146}