Skip to main content

gproxy_protocol/wire/openai/codex/
analytics.rs

1//! Codex account analytics contracts. Source: samples/codex/codex-rs/
2//! codex-backend-openapi-models/src/models/analytics.rs (schema 8dad4dcab85a).
3//! Attribution, extensions, null amounts and numeric precision are retained.
4use crate::{Rest, WireRequest, WireResponse};
5use serde::{Deserialize, Serialize};
6use serde_json::Number;
7
8#[derive(
9    Debug,
10    Clone,
11    PartialEq,
12    Serialize,
13    Deserialize,
14    gproxy_protocol_macros::WireBuilder,
15    gproxy_protocol_macros::DeclaredFields,
16)]
17#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
18#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
19pub struct ActiveUsersSummary {
20    pub total_users: i64,
21    pub clients: Vec<ClientActiveUsersCount>,
22    pub models: Option<Vec<ModelActivitySummary>>,
23    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
24    pub rest: Rest,
25}
26
27#[derive(
28    Debug,
29    Clone,
30    PartialEq,
31    Serialize,
32    Deserialize,
33    gproxy_protocol_macros::WireBuilder,
34    gproxy_protocol_macros::DeclaredFields,
35)]
36#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
37#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
38pub struct ClientActiveUsersCount {
39    pub client_id: String,
40    pub users: i64,
41    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
42    pub rest: Rest,
43}
44
45#[derive(
46    Debug,
47    Clone,
48    PartialEq,
49    Serialize,
50    Deserialize,
51    gproxy_protocol_macros::WireBuilder,
52    gproxy_protocol_macros::DeclaredFields,
53)]
54#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
55#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
56pub struct ClientWorkspaceUsageCount {
57    pub client_id: String,
58    pub users: i64,
59    pub threads: i64,
60    pub turns: i64,
61    pub credits: Number,
62    pub cost_usd: Option<String>,
63    pub on_demand_credits: Option<Number>,
64    pub uncached_text_input_tokens: Option<i64>,
65    pub cached_text_input_tokens: Option<i64>,
66    pub text_output_tokens: Option<i64>,
67    pub text_total_tokens: Option<i64>,
68    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
69    pub rest: Rest,
70}
71
72#[derive(
73    Debug,
74    Clone,
75    PartialEq,
76    Serialize,
77    Deserialize,
78    gproxy_protocol_macros::WireBuilder,
79    gproxy_protocol_macros::DeclaredFields,
80)]
81#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
82#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
83pub struct ConsumptionUsageGroup {
84    pub dimensions: std::collections::BTreeMap<String, String>,
85    pub is_other: Option<bool>,
86    pub credits: Number,
87    pub on_demand_credits: Option<Number>,
88    pub uncached_text_input_tokens: Option<i64>,
89    pub cached_text_input_tokens: Option<i64>,
90    pub text_output_tokens: Option<i64>,
91    pub text_total_tokens: Option<i64>,
92    pub total_tokens: Option<i64>,
93    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
94    pub rest: Rest,
95}
96
97#[derive(
98    Debug,
99    Clone,
100    PartialEq,
101    Serialize,
102    Deserialize,
103    gproxy_protocol_macros::WireBuilder,
104    gproxy_protocol_macros::DeclaredFields,
105)]
106#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
107#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
108pub struct CreditUsageEventBySurface {
109    pub date: String,
110    pub product_surface: String,
111    pub credit_amount: Number,
112    pub usage_id: Option<String>,
113    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
114    pub rest: Rest,
115}
116
117#[derive(
118    Debug,
119    Clone,
120    PartialEq,
121    Serialize,
122    Deserialize,
123    gproxy_protocol_macros::WireBuilder,
124    gproxy_protocol_macros::DeclaredFields,
125)]
126#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
127#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
128pub struct CreditUsageEventsResponse {
129    pub data: Vec<CreditUsageEventBySurface>,
130    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
131    pub rest: Rest,
132}
133
134#[derive(
135    Debug,
136    Clone,
137    PartialEq,
138    Serialize,
139    Deserialize,
140    gproxy_protocol_macros::WireBuilder,
141    gproxy_protocol_macros::DeclaredFields,
142)]
143#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
144#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
145pub struct CurrentUserCreditUsageDatum {
146    pub date: String,
147    pub values: std::collections::BTreeMap<String, Number>,
148    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
149    pub rest: Rest,
150}
151
152#[derive(
153    Debug,
154    Clone,
155    PartialEq,
156    Serialize,
157    Deserialize,
158    gproxy_protocol_macros::WireBuilder,
159    gproxy_protocol_macros::DeclaredFields,
160)]
161#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
162#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
163pub struct CurrentUserCreditUsageResponse {
164    pub breakdown: String,
165    pub data: Vec<CurrentUserCreditUsageDatum>,
166    pub series: Vec<CurrentUserCreditUsageSeries>,
167    pub unit: Option<String>,
168    pub data_freshness_ts: Option<String>,
169    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
170    pub rest: Rest,
171}
172
173#[derive(
174    Debug,
175    Clone,
176    PartialEq,
177    Serialize,
178    Deserialize,
179    gproxy_protocol_macros::WireBuilder,
180    gproxy_protocol_macros::DeclaredFields,
181)]
182#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
183#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
184pub struct CurrentUserCreditUsageSeries {
185    pub key: String,
186    pub label: String,
187    pub total: Number,
188    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
189    pub rest: Rest,
190}
191
192#[derive(
193    Debug,
194    Clone,
195    PartialEq,
196    Serialize,
197    Deserialize,
198    gproxy_protocol_macros::WireBuilder,
199    gproxy_protocol_macros::DeclaredFields,
200)]
201#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
202#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
203pub struct DailyProductSurfaceUsage {
204    pub attribution: Option<Vec<PersonalUsageAttribution>>,
205    pub date: String,
206    pub product_surface_usage_values: std::collections::BTreeMap<String, Number>,
207    pub premium_usage_values: Option<ProductSurfacePremiumUsageValues>,
208    pub models: Option<Vec<ModelUsage>>,
209    pub groups: Option<Vec<ConsumptionUsageGroup>>,
210    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
211    pub rest: Rest,
212}
213
214#[derive(
215    Debug,
216    Clone,
217    PartialEq,
218    Serialize,
219    Deserialize,
220    gproxy_protocol_macros::WireBuilder,
221    gproxy_protocol_macros::DeclaredFields,
222)]
223#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
224#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
225pub struct DailyProductSurfaceUsageResponse {
226    pub data: Vec<DailyProductSurfaceUsage>,
227    pub units: Option<String>,
228    pub data_freshness_ts: Option<String>,
229    pub group_by: Option<String>,
230    pub breakdown_by: Option<Vec<String>>,
231    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
232    pub rest: Rest,
233}
234
235#[derive(
236    Debug,
237    Clone,
238    PartialEq,
239    Serialize,
240    Deserialize,
241    gproxy_protocol_macros::WireBuilder,
242    gproxy_protocol_macros::DeclaredFields,
243)]
244#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
245#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
246pub struct DailySkillUsageMetricsResponse {
247    pub data: Vec<DailySkillUsageOverview>,
248    pub data_freshness_ts: Option<String>,
249    pub group_by: Option<String>,
250    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
251    pub rest: Rest,
252}
253
254#[derive(
255    Debug,
256    Clone,
257    PartialEq,
258    Serialize,
259    Deserialize,
260    gproxy_protocol_macros::WireBuilder,
261    gproxy_protocol_macros::DeclaredFields,
262)]
263#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
264#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
265pub struct DailySkillUsageOverview {
266    pub date: String,
267    pub skill_usage_overviews: Vec<SkillUsageOverview>,
268    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
269    pub rest: Rest,
270}
271
272#[derive(
273    Debug,
274    Clone,
275    PartialEq,
276    Serialize,
277    Deserialize,
278    gproxy_protocol_macros::WireBuilder,
279    gproxy_protocol_macros::DeclaredFields,
280)]
281#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
282#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
283pub struct DailyWorkspaceUsageCount {
284    pub date: String,
285    pub totals: WorkspaceUsageCount,
286    pub clients: Vec<ClientWorkspaceUsageCount>,
287    pub models: Option<Vec<ModelUsage>>,
288    pub groups: Option<Vec<WorkspaceUsageGroup>>,
289    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
290    pub rest: Rest,
291}
292
293#[derive(
294    Debug,
295    Clone,
296    PartialEq,
297    Serialize,
298    Deserialize,
299    gproxy_protocol_macros::WireBuilder,
300    gproxy_protocol_macros::DeclaredFields,
301)]
302#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
303#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
304pub struct DailyWorkspaceUsageCountResponse {
305    pub data: Vec<DailyWorkspaceUsageCount>,
306    pub balance_unit: Option<String>,
307    pub active_users_summary: Option<ActiveUsersSummary>,
308    pub group_by: Option<String>,
309    pub breakdown_by: Option<Vec<String>>,
310    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
311    pub rest: Rest,
312}
313
314#[derive(
315    Debug,
316    Clone,
317    PartialEq,
318    Serialize,
319    Deserialize,
320    gproxy_protocol_macros::WireBuilder,
321    gproxy_protocol_macros::DeclaredFields,
322)]
323#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
324#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
325pub struct ModelActivitySummary {
326    pub model: String,
327    pub users: i64,
328    pub threads: i64,
329    pub turns: i64,
330    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
331    pub rest: Rest,
332}
333
334#[derive(
335    Debug,
336    Clone,
337    PartialEq,
338    Serialize,
339    Deserialize,
340    gproxy_protocol_macros::WireBuilder,
341    gproxy_protocol_macros::DeclaredFields,
342)]
343#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
344#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
345pub struct ModelUsage {
346    pub model: String,
347    pub speed: Option<String>,
348    pub credits: Number,
349    pub cost_usd: Option<String>,
350    pub users: Option<i64>,
351    pub threads: Option<i64>,
352    pub turns: Option<i64>,
353    pub on_demand_credits: Option<Number>,
354    pub uncached_text_input_tokens: Option<i64>,
355    pub cached_text_input_tokens: Option<i64>,
356    pub text_output_tokens: Option<i64>,
357    pub text_total_tokens: Option<i64>,
358    pub total_tokens: Option<i64>,
359    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
360    pub rest: Rest,
361}
362
363#[derive(
364    Debug,
365    Clone,
366    PartialEq,
367    Serialize,
368    Deserialize,
369    gproxy_protocol_macros::WireBuilder,
370    gproxy_protocol_macros::DeclaredFields,
371)]
372#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
373#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
374pub struct PersonalUsageAttribution {
375    pub thread_source: String,
376    pub turn_trigger: String,
377    pub model: String,
378    pub surface: String,
379    pub value: Number,
380    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
381    pub rest: Rest,
382}
383
384#[derive(
385    Debug,
386    Clone,
387    PartialEq,
388    Serialize,
389    Deserialize,
390    gproxy_protocol_macros::WireBuilder,
391    gproxy_protocol_macros::DeclaredFields,
392)]
393#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
394#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
395pub struct PluginUsageBucket {
396    pub date: String,
397    pub plugin_usage_overviews: Vec<PluginUsageOverview>,
398    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
399    pub rest: Rest,
400}
401
402#[derive(
403    Debug,
404    Clone,
405    PartialEq,
406    Serialize,
407    Deserialize,
408    gproxy_protocol_macros::WireBuilder,
409    gproxy_protocol_macros::DeclaredFields,
410)]
411#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
412#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
413pub struct PluginUsageMetricsResponse {
414    pub data: Vec<PluginUsageBucket>,
415    pub data_freshness_ts: Option<String>,
416    pub group_by: Option<String>,
417    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
418    pub rest: Rest,
419}
420
421#[derive(
422    Debug,
423    Clone,
424    PartialEq,
425    Serialize,
426    Deserialize,
427    gproxy_protocol_macros::WireBuilder,
428    gproxy_protocol_macros::DeclaredFields,
429)]
430#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
431#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
432pub struct PluginUsageOverview {
433    pub plugin_id: Option<String>,
434    pub plugin_name: String,
435    pub display_name: String,
436    pub marketplace: Option<String>,
437    pub invocation_counts: i64,
438    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
439    pub rest: Rest,
440}
441
442#[derive(
443    Debug,
444    Clone,
445    PartialEq,
446    Serialize,
447    Deserialize,
448    gproxy_protocol_macros::WireBuilder,
449    gproxy_protocol_macros::DeclaredFields,
450)]
451#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
452#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
453pub struct ProductSurfacePremiumUsageValues {
454    pub total_usage_credits: std::collections::BTreeMap<String, Number>,
455    pub credit_usage_credits: std::collections::BTreeMap<String, Number>,
456    pub uncached_text_input_tokens_by_surface: std::collections::BTreeMap<String, i64>,
457    pub cached_text_input_tokens_by_surface: std::collections::BTreeMap<String, i64>,
458    pub text_output_tokens_by_surface: std::collections::BTreeMap<String, i64>,
459    pub text_total_tokens_by_surface: std::collections::BTreeMap<String, i64>,
460    pub total_tokens_by_surface: Option<std::collections::BTreeMap<String, i64>>,
461    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
462    pub rest: Rest,
463}
464
465#[derive(
466    Debug,
467    Clone,
468    PartialEq,
469    Serialize,
470    Deserialize,
471    gproxy_protocol_macros::WireBuilder,
472    gproxy_protocol_macros::DeclaredFields,
473)]
474#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
475#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
476pub struct SkillUsageOverview {
477    pub skill_name: String,
478    pub display_name: String,
479    pub skill_ids: Vec<String>,
480    pub invocation_counts: i64,
481    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
482    pub rest: Rest,
483}
484
485#[derive(
486    Debug,
487    Clone,
488    PartialEq,
489    Serialize,
490    Deserialize,
491    gproxy_protocol_macros::WireBuilder,
492    gproxy_protocol_macros::DeclaredFields,
493)]
494#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
495#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
496pub struct WorkspaceUsageCount {
497    pub users: i64,
498    pub threads: i64,
499    pub turns: i64,
500    pub credits: Number,
501    pub cost_usd: Option<String>,
502    pub on_demand_credits: Option<Number>,
503    pub uncached_text_input_tokens: Option<i64>,
504    pub cached_text_input_tokens: Option<i64>,
505    pub text_output_tokens: Option<i64>,
506    pub text_total_tokens: Option<i64>,
507    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
508    pub rest: Rest,
509}
510
511#[derive(
512    Debug,
513    Clone,
514    PartialEq,
515    Serialize,
516    Deserialize,
517    gproxy_protocol_macros::WireBuilder,
518    gproxy_protocol_macros::DeclaredFields,
519)]
520#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
521#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
522pub struct WorkspaceUsageGroup {
523    pub dimensions: std::collections::BTreeMap<String, String>,
524    pub is_other: Option<bool>,
525    pub users: i64,
526    pub turns: i64,
527    pub cost_usd: Option<String>,
528    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
529    pub rest: Rest,
530}
531
532pub type DailyProductSurfaceUsageRequest = WireRequest<()>;
533pub type DailyProductSurfaceUsageWireResponse = WireResponse<DailyProductSurfaceUsageResponse>;
534pub type CreditUsageEventsRequest = WireRequest<()>;
535pub type CreditUsageEventsWireResponse = WireResponse<CreditUsageEventsResponse>;
536pub type CurrentUserCreditUsageRequest = WireRequest<()>;
537pub type CurrentUserCreditUsageWireResponse = WireResponse<CurrentUserCreditUsageResponse>;
538pub type DailyWorkspaceUsageCountRequest = WireRequest<()>;
539pub type DailyWorkspaceUsageCountWireResponse = WireResponse<DailyWorkspaceUsageCountResponse>;
540pub type PluginUsageMetricsRequest = WireRequest<()>;
541pub type PluginUsageMetricsWireResponse = WireResponse<PluginUsageMetricsResponse>;
542pub type DailySkillUsageMetricsRequest = WireRequest<()>;
543pub type DailySkillUsageMetricsWireResponse = WireResponse<DailySkillUsageMetricsResponse>;