use serde::{Deserialize, Serialize};
use crate::Rest;
pub type ListModelsRequest = crate::WireRequest<()>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum ListObject {
List,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub enum ModelObject {
Model,
}
pub type GetModelRequest = crate::WireRequest<()>;
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct ListModelsResponseBody {
pub data: Vec<Model>,
pub object: ListObject,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
pub type ListModelsResponse = crate::WireResponse<ListModelsResponseBody>;
pub type GetModelResponse = crate::WireResponse<Model>;
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
#[derive(gproxy_protocol_macros::DeclaredFields)]
pub struct Model {
pub id: String,
#[wire(required)]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created: Option<i64>,
pub object: ModelObject,
#[wire(required)]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub owned_by: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub instructions: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub context_window: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_context_window: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub thinking_supported: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub input_modalities: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub output_modalities: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supported_parameters: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supported_reasoning_levels: Option<Vec<ModelReasoningLevel>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_reasoning_level: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service_tiers: Option<Vec<ModelServiceTier>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_service_tier: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub generation_methods: Option<Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub supported_actions: Option<Vec<String>>,
#[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
pub rest: Rest,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::DeclaredFields,
)]
pub struct ModelReasoningLevel {
pub effort: String,
pub description: String,
}
#[derive(
Debug, Clone, PartialEq, Eq, Serialize, Deserialize, gproxy_protocol_macros::DeclaredFields,
)]
pub struct ModelServiceTier {
pub id: String,
pub name: String,
pub description: String,
}