use crate::Provider;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ModelTier {
Recommended,
Supported,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct CatalogEntry {
pub id: &'static str,
pub display_name: &'static str,
pub provider: &'static str,
pub tier: ModelTier,
#[serde(skip_serializing_if = "Option::is_none")]
pub context_window: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_output_tokens: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ProviderDefaults {
pub provider: &'static str,
pub default_model_id: &'static str,
pub models: Vec<CatalogEntry>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum OpenAiImageGenerationRequestShape {
GptImage,
DallE,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ImageGenerationSizeParameter {
Supported,
Unsupported,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[serde(tag = "route", rename_all = "snake_case")]
pub enum ImageGenerationModelRoute {
OpenAiHostedResponsesTool {
#[serde(skip_serializing_if = "Option::is_none")]
provider_call_model_id: Option<&'static str>,
tool_model_id: &'static str,
},
OpenAiImagesApi {
request_shape: OpenAiImageGenerationRequestShape,
},
GeminiNativeModel {
image_size_parameter: ImageGenerationSizeParameter,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ImageGenerationModelProfile {
pub provider: Provider,
pub model_id: &'static str,
pub display_name: &'static str,
pub tier: ModelTier,
pub route: ImageGenerationModelRoute,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
pub struct ImageGenerationProviderDefaults {
pub provider: Provider,
pub default_model_id: &'static str,
pub models: Vec<ImageGenerationModelProfile>,
}