bridge_common/types/
models.rsuse chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
const OPENAI_API_URL: &str = "https://api.openai.com/v1/";
const GROQ_API_URL: &str = "https://api.groq.com/openai/v1/";
#[derive(
Serialize, Deserialize, Debug, sqlx::Type, Default, PartialEq, Eq, Clone, Ord, PartialOrd,
)]
pub enum Provider {
#[default]
OpenAI,
Groq,
}
impl From<String> for Provider {
fn from(s: String) -> Self {
match s.as_str() {
"Groq" => Provider::Groq,
_ => Provider::OpenAI,
}
}
}
#[allow(clippy::struct_excessive_bools)]
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Model {
pub id: i32,
pub company_id: i32,
pub provider: Provider,
pub name: String,
pub context_length: i32,
pub max_tokens: i64,
pub text_in: bool,
pub text_out: bool,
pub image_in: bool,
pub image_out: bool,
pub audio_in: bool,
pub audio_out: bool,
pub function_calling: bool,
pub api_url: Option<String>,
pub api_key: Option<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
impl Model {
#[must_use]
pub fn api_url_or_default(&self) -> &str {
match self.api_url {
Some(ref url) => url,
None => match self.provider {
Provider::OpenAI => OPENAI_API_URL,
Provider::Groq => GROQ_API_URL,
},
}
}
}