rig_core/catalog/
details.rs1use std::collections::BTreeMap;
5
6use serde::{Deserialize, Serialize};
7
8use super::spec::Modalities;
9
10#[non_exhaustive]
14#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
15#[serde(default)]
16pub struct ModelDetails {
17 pub description: Option<String>,
19 pub family: Option<String>,
21 #[serde(rename = "type")]
24 pub kind: Option<String>,
25 pub canonical_model_id: Option<String>,
27 pub attachment: Option<bool>,
29 pub interleaved: Option<Interleaved>,
32 pub output: Option<Modalities>,
34 pub knowledge: Option<String>,
36 pub release_date: Option<String>,
38 pub last_updated: Option<String>,
40 pub open_weights: Option<bool>,
42 pub status: Option<String>,
44 pub cost: CostDetails,
46 pub provider: Option<ProviderOverride>,
48 pub modes: BTreeMap<String, Mode>,
51}
52
53#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
56#[serde(untagged)]
57pub enum Interleaved {
58 Supported(bool),
60 Field {
62 field: String,
64 },
65}
66
67#[non_exhaustive]
69#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
70#[serde(default)]
71pub struct CostDetails {
72 pub reasoning: Option<f64>,
74 pub input_audio: Option<f64>,
76 pub output_audio: Option<f64>,
78 pub tiers: Vec<CostTier>,
80 pub context_over_200k: Option<Rates>,
82}
83
84#[non_exhaustive]
87#[derive(Clone, Copy, Debug, Default, PartialEq, Serialize, Deserialize)]
88#[serde(default)]
89pub struct Rates {
90 #[serde(skip_serializing_if = "Option::is_none")]
92 pub input: Option<f64>,
93 #[serde(skip_serializing_if = "Option::is_none")]
95 pub output: Option<f64>,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub cache_read: Option<f64>,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub cache_write: Option<f64>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub reasoning: Option<f64>,
105 #[serde(skip_serializing_if = "Option::is_none")]
107 pub input_audio: Option<f64>,
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub output_audio: Option<f64>,
111}
112
113#[non_exhaustive]
115#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
116pub struct CostTier {
117 #[serde(flatten)]
119 pub rates: Rates,
120 pub tier: Tier,
122}
123
124#[non_exhaustive]
126#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
127pub struct Tier {
128 #[serde(rename = "type")]
130 pub kind: String,
131 pub size: u64,
133}
134
135#[non_exhaustive]
138#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
139#[serde(default)]
140pub struct ProviderOverride {
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub npm: Option<String>,
144 #[serde(skip_serializing_if = "Option::is_none")]
147 pub api: Option<String>,
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub shape: Option<String>,
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub body: Option<serde_json::Value>,
154 #[serde(skip_serializing_if = "BTreeMap::is_empty")]
156 pub headers: BTreeMap<String, String>,
157}
158
159#[non_exhaustive]
161#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
162#[serde(default)]
163pub struct Mode {
164 #[serde(skip_serializing_if = "Option::is_none")]
166 pub cost: Option<Rates>,
167 #[serde(skip_serializing_if = "Option::is_none")]
169 pub provider: Option<ProviderOverride>,
170}