use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "agent.completions.request.Provider")]
pub struct Provider {
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub data_collection: Option<ProviderDataCollection>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub zdr: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub sort: Option<ProviderSort>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub max_price: Option<ProviderMaxPrice>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub preferred_min_throughput: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub preferred_max_latency: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub min_throughput: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub max_latency: Option<f64>,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
#[schemars(rename = "agent.completions.request.ProviderDataCollection")]
pub enum ProviderDataCollection {
#[schemars(title = "Deny")]
Deny,
#[schemars(title = "Allow")]
Allow,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
#[schemars(rename = "agent.completions.request.ProviderSort")]
pub enum ProviderSort {
#[schemars(title = "Price")]
Price,
#[schemars(title = "Throughput")]
Throughput,
#[schemars(title = "Latency")]
Latency,
}
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "agent.completions.request.ProviderMaxPrice")]
pub struct ProviderMaxPrice {
#[serde(skip_serializing_if = "Option::is_none", deserialize_with = "crate::serde_util::option_decimal")]
#[schemars(extend("omitempty" = true))]
#[schemars(with = "Option<f64>")]
pub prompt: Option<rust_decimal::Decimal>,
#[serde(skip_serializing_if = "Option::is_none", deserialize_with = "crate::serde_util::option_decimal")]
#[schemars(extend("omitempty" = true))]
#[schemars(with = "Option<f64>")]
pub completion: Option<rust_decimal::Decimal>,
#[serde(skip_serializing_if = "Option::is_none", deserialize_with = "crate::serde_util::option_decimal")]
#[schemars(extend("omitempty" = true))]
#[schemars(with = "Option<f64>")]
pub image: Option<rust_decimal::Decimal>,
#[serde(skip_serializing_if = "Option::is_none", deserialize_with = "crate::serde_util::option_decimal")]
#[schemars(extend("omitempty" = true))]
#[schemars(with = "Option<f64>")]
pub audio: Option<rust_decimal::Decimal>,
#[serde(skip_serializing_if = "Option::is_none", deserialize_with = "crate::serde_util::option_decimal")]
#[schemars(extend("omitempty" = true))]
#[schemars(with = "Option<f64>")]
pub request: Option<rust_decimal::Decimal>,
}