use crate::error::Error;
#[derive(Debug, Clone, Copy)]
pub enum ModelProvider {
OpenAI,
Anthropic,
GCP,
}
impl TryFrom<&str> for ModelProvider {
type Error = Error;
fn try_from(val: &str) -> Result<Self, Self::Error> {
match val {
"openai" => Ok(ModelProvider::OpenAI),
"anthropic" => Ok(ModelProvider::Anthropic),
"gcp" => Ok(ModelProvider::GCP),
_ => Err(Error::Error(format!("unknown provider: {val}"))),
}
}
}
#[derive(Clone, Debug)]
pub struct Config {
pub provider: ModelProvider,
pub name: String,
pub api_key: String,
pub api_url: String,
pub api_version: Option<String>,
pub max_tokens: Option<i64>,
pub n: Option<i64>,
pub temperature: Option<f64>,
pub top_p: Option<f64>,
pub top_k: Option<i64>,
pub frequency_penalty: Option<f64>,
pub presence_penalty: Option<f64>,
pub stop_sequence: Option<String>,
}
impl Config {
pub fn new(provider: ModelProvider, name: String, api_key: String, api_url: String) -> Self {
Config {
provider,
name,
api_key,
api_url,
api_version: None,
max_tokens: None,
n: None,
temperature: None,
top_p: None,
top_k: None,
frequency_penalty: None,
presence_penalty: None,
stop_sequence: None
}
}
}