1use serde::Deserialize;
2
3use crate::client::Client;
4use crate::error::Result;
5
6#[derive(Debug, Clone, Deserialize)]
8pub struct ModelInfo {
9 pub id: String,
11
12 pub provider: String,
14
15 pub display_name: String,
17
18 pub input_per_million: f64,
20
21 pub output_per_million: f64,
23}
24
25#[derive(Debug, Clone, Deserialize)]
27pub struct PricingInfo {
28 pub id: String,
30
31 pub provider: String,
33
34 pub display_name: String,
36
37 pub input_per_million: f64,
39
40 pub output_per_million: f64,
42}
43
44#[derive(Deserialize)]
45struct ModelsResponse {
46 models: Vec<ModelInfo>,
47}
48
49#[derive(Deserialize)]
50struct PricingResponse {
51 pricing: Vec<PricingInfo>,
52}
53
54impl Client {
55 pub async fn list_models(&self) -> Result<Vec<ModelInfo>> {
57 let (resp, _meta) = self.get_json::<ModelsResponse>("/qai/v1/models").await?;
58 Ok(resp.models)
59 }
60
61 pub async fn get_pricing(&self) -> Result<Vec<PricingInfo>> {
63 let (resp, _meta) = self.get_json::<PricingResponse>("/qai/v1/pricing").await?;
64 Ok(resp.pricing)
65 }
66}