use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProviderConfig {
pub name: String,
pub endpoint: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HttpRetryOptions {
#[serde(default = "HttpRetryOptions::default_initial_delay")]
pub initial_delay: u32,
#[serde(default = "HttpRetryOptions::default_attempts")]
pub attempts: u32,
#[serde(default = "HttpRetryOptions::default_exp_base")]
pub exp_base: u32,
}
impl HttpRetryOptions {
fn default_initial_delay() -> u32 { 1 }
fn default_attempts() -> u32 { 5 }
fn default_exp_base() -> u32 { 7 }
}
impl Default for HttpRetryOptions {
fn default() -> Self {
Self {
initial_delay: Self::default_initial_delay(),
attempts: Self::default_attempts(),
exp_base: Self::default_exp_base(),
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ModelHyperparameters {
pub temperature: Option<f32>,
pub top_p: Option<f32>,
pub top_k: Option<u32>,
pub max_tokens: Option<u32>,
pub max_output_tokens: Option<u32>,
pub presence_penalty: Option<f32>,
pub frequency_penalty: Option<f32>,
pub stop_sequences: Option<Vec<String>>,
pub seed: Option<u64>,
pub retry_options: Option<HttpRetryOptions>,
}
impl ModelHyperparameters {
pub fn effective_max_output_tokens(&self) -> Option<u32> {
self.max_output_tokens.or(self.max_tokens)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModelConfig {
pub name: String,
pub provider: Option<ProviderConfig>,
pub hyperparameters: Option<ModelHyperparameters>,
}