1use 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>;