use litty::literal;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum OpenAIModelV1 {
Gpt4o(OpenAiModelV1Gpt4o),
Gpt4o20241120(OpenAiModelV1Gpt4o20241120),
Gpt4o20240806(OpenAiModelV1Gpt4o20240806),
Gpt4o20240513(OpenAiModelV1Gpt4o20240513),
Chatgpt4oLatest(OpenAiModelV1Chatgpt4oLatest),
Gpt4oMini(OpenAiModelV1Gpt4oMini),
Gpt4oMini20240718(OpenAiModelV1Gpt4oMini20240718),
O1(OpenAiModelV1O1),
O120241217(OpenAiModelV1O120241217),
O1Mini(OpenAiModelV1O1Mini),
O1Mini20240912(OpenAiModelV1O1Mini20240912),
O1Preview(OpenAiModelV1O1Preview),
O1Preview20240912(OpenAiModelV1O1Preview20240912),
O3Mini(OpenAiModelV1O3Mini),
O3Mini20250131(OpenAiModelV1O3Mini20250131),
Gpt4Turbo(OpenAiModelV1Gpt4Turbo),
Gpt4Turbo20240409(OpenAiModelV1Gpt4Turbo20240409),
Gpt4TurboPreview(OpenAiModelV1Gpt4TurboPreview),
Gpt40125Preview(OpenAiModelV1Gpt40125Preview),
Gpt41106Preview(OpenAiModelV1Gpt41106Preview),
Gpt4(OpenAiModelV1Gpt4),
Gpt40613(OpenAiModelV1Gpt40613),
Gpt40314(OpenAiModelV1Gpt40314),
Gpt35Turbo(OpenAiModelV1Gpt35Turbo),
Gpt35Turbo0125(OpenAiModelV1Gpt35Turbo0125),
Gpt35Turbo1106(OpenAiModelV1Gpt35Turbo1106),
String(String),
}
#[literal("gpt-4o")]
pub struct OpenAiModelV1Gpt4o;
#[literal("gpt-4o-2024-11-20")]
pub struct OpenAiModelV1Gpt4o20241120;
#[literal("gpt-4o-2024-08-06")]
pub struct OpenAiModelV1Gpt4o20240806;
#[literal("gpt-4o-2024-05-13")]
pub struct OpenAiModelV1Gpt4o20240513;
#[literal("chatgpt-4o-latest")]
pub struct OpenAiModelV1Chatgpt4oLatest;
#[literal("gpt-4o-mini")]
pub struct OpenAiModelV1Gpt4oMini;
#[literal("gpt-4o-mini-2024-07-18")]
pub struct OpenAiModelV1Gpt4oMini20240718;
#[literal("o1")]
pub struct OpenAiModelV1O1;
#[literal("o1-2024-12-17")]
pub struct OpenAiModelV1O120241217;
#[literal("o1-mini")]
pub struct OpenAiModelV1O1Mini;
#[literal("o1-mini-2024-09-12")]
pub struct OpenAiModelV1O1Mini20240912;
#[literal("o1-preview")]
pub struct OpenAiModelV1O1Preview;
#[literal("o1-preview-2024-09-12")]
pub struct OpenAiModelV1O1Preview20240912;
#[literal("o3-mini")]
pub struct OpenAiModelV1O3Mini;
#[literal("o3-mini-2025-01-31")]
pub struct OpenAiModelV1O3Mini20250131;
#[literal("gpt-4-turbo")]
pub struct OpenAiModelV1Gpt4Turbo;
#[literal("gpt-4-turbo-2024-04-09")]
pub struct OpenAiModelV1Gpt4Turbo20240409;
#[literal("gpt-4-turbo-preview")]
pub struct OpenAiModelV1Gpt4TurboPreview;
#[literal("gpt-4-0125-preview")]
pub struct OpenAiModelV1Gpt40125Preview;
#[literal("gpt-4-1106-preview")]
pub struct OpenAiModelV1Gpt41106Preview;
#[literal("gpt-4")]
pub struct OpenAiModelV1Gpt4;
#[literal("gpt-4-0613")]
pub struct OpenAiModelV1Gpt40613;
#[literal("gpt-4-0314")]
pub struct OpenAiModelV1Gpt40314;
#[literal("gpt-3.5-turbo")]
pub struct OpenAiModelV1Gpt35Turbo;
#[literal("gpt-3.5-turbo-0125")]
pub struct OpenAiModelV1Gpt35Turbo0125;
#[literal("gpt-3.5-turbo-1106")]
pub struct OpenAiModelV1Gpt35Turbo1106;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OpenAISettingsV1 {
pub r#type: OpenAiSettingsV1TypeOpenai,
pub model: Option<OpenAIModelV1>,
}
#[literal("openai")]
pub struct OpenAiSettingsV1TypeOpenai;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum OpenAIProvider {
Openai(OpenAiProviderOpenai),
Azure(OpenAiProviderAzure),
}
#[literal("openai")]
pub struct OpenAiProviderOpenai;
#[literal("azure")]
pub struct OpenAiProviderAzure;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct OpenAIProviderSettingsV1 {
pub default: Option<OpenAIProvider>,
pub models: Option<BTreeMap<String, OpenAIProvider>>,
}