use serde::Deserialize;
#[cfg(test)]
pub const TEST_MAX_CONTEXT_LENGTH: u32 = 100_000;
fn default_max_tokens() -> u32 {
512
}
fn default_max_context_length() -> u32 {
100_000
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum AiProviderType {
Anthropic,
Bedrock,
Openai,
Gemini,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AnthropicConfig {
pub api_key: Option<String>,
pub model: Option<String>,
#[serde(default = "default_max_tokens")]
pub max_tokens: u32,
}
impl Default for AnthropicConfig {
fn default() -> Self {
AnthropicConfig {
api_key: None,
model: None,
max_tokens: default_max_tokens(),
}
}
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct BedrockConfig {
pub region: Option<String>,
pub model: Option<String>,
pub profile: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct OpenAiConfig {
pub api_key: Option<String>,
pub model: Option<String>,
pub base_url: Option<String>,
}
#[derive(Debug, Clone, Deserialize, Default)]
pub struct GeminiConfig {
pub api_key: Option<String>,
pub model: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize)]
pub struct AiConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default)]
pub provider: Option<AiProviderType>,
#[serde(default = "default_max_context_length")]
pub max_context_length: u32,
#[serde(default)]
pub anthropic: AnthropicConfig,
#[serde(default)]
pub bedrock: BedrockConfig,
#[serde(default)]
pub openai: OpenAiConfig,
#[serde(default)]
pub gemini: GeminiConfig,
}
#[cfg(test)]
#[path = "ai_types_tests.rs"]
mod ai_types_tests;