outfox_openai/spec/admin/usage/
api.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::error::OpenAIError;
5
6#[derive(Debug, Clone, Serialize, Default, Builder)]
8#[builder(name = "UsageQueryParamsArgs")]
9#[builder(pattern = "mutable")]
10#[builder(setter(into, strip_option), default)]
11#[builder(derive(Debug))]
12#[builder(build_fn(error = "OpenAIError"))]
13pub struct UsageQueryParams {
14 pub start_time: u64,
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub end_time: Option<u64>,
19 #[serde(skip_serializing_if = "Option::is_none")]
22 pub bucket_width: Option<UsageBucketWidth>,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub project_ids: Option<Vec<String>>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub user_ids: Option<Vec<String>>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub api_key_ids: Option<Vec<String>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub models: Option<Vec<String>>,
35 #[serde(skip_serializing_if = "Option::is_none")]
38 pub batch: Option<bool>,
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub group_by: Option<Vec<UsageGroupBy>>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub limit: Option<u32>,
45 #[serde(skip_serializing_if = "Option::is_none")]
48 pub page: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "lowercase")]
54pub enum UsageBucketWidth {
55 #[serde(rename = "1m")]
56 OneMinute,
57 #[serde(rename = "1h")]
58 OneHour,
59 #[serde(rename = "1d")]
60 OneDay,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize)]
65#[serde(rename_all = "snake_case")]
66pub enum UsageGroupBy {
67 ProjectId,
68 UserId,
69 ApiKeyId,
70 Model,
71 Batch,
72 ServiceTier,
73}