1use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Debug, Default, PartialEq, Eq)]
11pub struct ListModelsOptions {
12 pub category: Option<String>,
15 pub supported_parameters: Option<String>,
17}
18
19impl ListModelsOptions {
20 pub fn new() -> Self {
22 Self::default()
23 }
24
25 pub fn category(mut self, category: impl Into<String>) -> Self {
27 self.category = Some(category.into());
28 self
29 }
30
31 pub fn supported_parameters(mut self, value: impl Into<String>) -> Self {
33 self.supported_parameters = Some(value.into());
34 self
35 }
36
37 pub(crate) fn to_query(&self) -> Vec<(&'static str, String)> {
38 let mut q = Vec::new();
39 if let Some(c) = &self.category {
40 q.push(("category", c.clone()));
41 }
42 if let Some(s) = &self.supported_parameters {
43 q.push(("supported_parameters", s.clone()));
44 }
45 q
46 }
47}
48
49#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
51pub struct ModelsResponse {
52 #[serde(default)]
54 pub data: Vec<Model>,
55}
56
57#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
59pub struct Model {
60 pub id: String,
62 #[serde(default)]
64 pub name: String,
65 #[serde(default)]
67 pub canonical_slug: Option<String>,
68 #[serde(default)]
70 pub created: Option<f64>,
71 #[serde(default)]
73 pub description: String,
74 #[serde(default)]
76 pub context_length: Option<f64>,
77 #[serde(default)]
79 pub hugging_face_id: Option<String>,
80 #[serde(default)]
82 pub architecture: ModelArchitecture,
83 #[serde(default)]
85 pub top_provider: ModelTopProvider,
86 #[serde(default)]
88 pub per_request_limits: Option<ModelPerRequestLimits>,
89 #[serde(default)]
91 pub supported_parameters: Vec<String>,
92 #[serde(default)]
94 pub default_parameters: Option<ModelDefaultParameters>,
95 #[serde(default)]
97 pub pricing: ModelPricing,
98 #[serde(default)]
100 pub expiration_date: Option<String>,
101}
102
103#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
105pub struct ModelArchitecture {
106 #[serde(default)]
108 pub input_modalities: Vec<String>,
109 #[serde(default)]
111 pub output_modalities: Vec<String>,
112 #[serde(default)]
114 pub tokenizer: String,
115 #[serde(default)]
117 pub instruct_type: Option<String>,
118 #[serde(default)]
120 pub modality: Option<String>,
121}
122
123#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
125pub struct ModelTopProvider {
126 #[serde(default)]
128 pub context_length: Option<f64>,
129 #[serde(default)]
131 pub max_completion_tokens: Option<f64>,
132 #[serde(default)]
134 pub is_moderated: bool,
135}
136
137#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
139pub struct ModelPerRequestLimits {
140 #[serde(default)]
142 pub prompt_tokens: Option<f64>,
143 #[serde(default)]
145 pub completion_tokens: Option<f64>,
146}
147
148#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
150pub struct ModelDefaultParameters {
151 #[serde(default)]
153 pub temperature: Option<f64>,
154 #[serde(default)]
156 pub top_p: Option<f64>,
157 #[serde(default)]
159 pub frequency_penalty: Option<f64>,
160}
161
162#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
164pub struct ModelPricing {
165 #[serde(default)]
167 pub prompt: String,
168 #[serde(default)]
170 pub completion: String,
171 #[serde(default)]
173 pub image: String,
174 #[serde(default)]
176 pub request: String,
177 #[serde(default)]
179 pub input_cache_read: Option<String>,
180 #[serde(default)]
182 pub input_cache_write: Option<String>,
183 #[serde(default)]
185 pub web_search: String,
186 #[serde(default)]
188 pub internal_reasoning: String,
189}
190
191#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
193pub struct ModelEndpointsResponse {
194 #[serde(default)]
196 pub data: ModelEndpointsData,
197}
198
199#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
201pub struct ModelEndpointsData {
202 #[serde(default)]
204 pub id: String,
205 #[serde(default)]
207 pub name: String,
208 #[serde(default)]
210 pub created: Option<f64>,
211 #[serde(default)]
213 pub description: String,
214 #[serde(default)]
216 pub architecture: ModelEndpointsArchitecture,
217 #[serde(default)]
219 pub endpoints: Vec<ModelEndpoint>,
220}
221
222#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
224pub struct ModelEndpointsArchitecture {
225 #[serde(default)]
227 pub tokenizer: Option<String>,
228 #[serde(default)]
230 pub instruct_type: Option<String>,
231 #[serde(default)]
233 pub input_modalities: Vec<String>,
234 #[serde(default)]
236 pub output_modalities: Vec<String>,
237}
238
239#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
241pub struct ModelEndpoint {
242 #[serde(default)]
244 pub name: String,
245 #[serde(default)]
247 pub context_length: f64,
248 #[serde(default)]
250 pub pricing: ModelEndpointPricing,
251 #[serde(default)]
253 pub provider_name: String,
254 #[serde(default)]
256 pub quantization: Option<String>,
257 #[serde(default)]
259 pub max_completion_tokens: Option<f64>,
260 #[serde(default)]
262 pub max_prompt_tokens: Option<f64>,
263 #[serde(default)]
265 pub supported_parameters: Vec<String>,
266 #[serde(default)]
268 pub status: f64,
269 #[serde(default)]
271 pub uptime_last_30m: Option<f64>,
272}
273
274#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
276pub struct ModelEndpointPricing {
277 #[serde(default)]
279 pub request: String,
280 #[serde(default)]
282 pub image: String,
283 #[serde(default)]
285 pub prompt: String,
286 #[serde(default)]
288 pub completion: String,
289}
290
291#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
293pub struct ProvidersResponse {
294 #[serde(default)]
296 pub data: Vec<ProviderInfo>,
297}
298
299#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
301pub struct ProviderInfo {
302 #[serde(default)]
304 pub name: String,
305 #[serde(default)]
307 pub slug: String,
308 #[serde(default)]
310 pub privacy_policy_url: Option<String>,
311 #[serde(default)]
313 pub terms_of_service_url: Option<String>,
314 #[serde(default)]
316 pub status_page_url: Option<String>,
317}