2024-09-26 00:15:17 -06:00
|
|
|
#[non_exhaustive]
|
|
|
|
|
pub struct LlmProviders;
|
|
|
|
|
|
|
|
|
|
impl LlmProviders {
|
|
|
|
|
pub const OPENAI_PROVIDER: LlmProvider<'static> = LlmProvider {
|
|
|
|
|
name: "openai",
|
2024-09-27 16:41:39 -07:00
|
|
|
api_key_header: "x-arch-openai-api-key",
|
2024-09-26 00:15:17 -06:00
|
|
|
model: "gpt-3.5-turbo",
|
|
|
|
|
};
|
|
|
|
|
pub const MISTRAL_PROVIDER: LlmProvider<'static> = LlmProvider {
|
|
|
|
|
name: "mistral",
|
2024-09-27 16:41:39 -07:00
|
|
|
api_key_header: "x-arch-mistral-api-key",
|
2024-09-26 00:15:17 -06:00
|
|
|
model: "mistral-large-latest",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
pub const VARIANTS: &'static [LlmProvider<'static>] =
|
|
|
|
|
&[Self::OPENAI_PROVIDER, Self::MISTRAL_PROVIDER];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub struct LlmProvider<'prov> {
|
|
|
|
|
name: &'prov str,
|
|
|
|
|
api_key_header: &'prov str,
|
|
|
|
|
model: &'prov str,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl AsRef<str> for LlmProvider<'_> {
|
|
|
|
|
fn as_ref(&self) -> &str {
|
|
|
|
|
self.name
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl std::fmt::Display for LlmProvider<'_> {
|
|
|
|
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
|
|
|
|
write!(f, "{}", self.name)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl LlmProvider<'_> {
|
|
|
|
|
pub fn api_key_header(&self) -> &str {
|
|
|
|
|
self.api_key_header
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn choose_model(&self) -> &str {
|
|
|
|
|
// In the future this can be a more complex function balancing reliability, cost, performance, etc.
|
|
|
|
|
self.model
|
|
|
|
|
}
|
|
|
|
|
}
|