#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GoogleLlmVariant {
VertexAi,
GeminiApi,
}
pub fn get_google_llm_variant() -> GoogleLlmVariant {
match std::env::var("GOOGLE_GENAI_USE_VERTEXAI") {
Ok(val) => {
let lower = val.to_lowercase();
if lower == "true" || lower == "1" {
GoogleLlmVariant::VertexAi
} else {
GoogleLlmVariant::GeminiApi
}
}
Err(_) => GoogleLlmVariant::GeminiApi,
}
}
#[cfg(test)]
mod tests {
use super::*;
fn with_env_var<F: FnOnce()>(val: Option<&str>, f: F) {
let old = std::env::var("GOOGLE_GENAI_USE_VERTEXAI").ok();
match val {
Some(v) => std::env::set_var("GOOGLE_GENAI_USE_VERTEXAI", v),
None => std::env::remove_var("GOOGLE_GENAI_USE_VERTEXAI"),
}
f();
match old {
Some(v) => std::env::set_var("GOOGLE_GENAI_USE_VERTEXAI", v),
None => std::env::remove_var("GOOGLE_GENAI_USE_VERTEXAI"),
}
}
#[test]
fn vertex_ai_true_lowercase() {
with_env_var(Some("true"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::VertexAi);
});
}
#[test]
fn vertex_ai_true_uppercase() {
with_env_var(Some("TRUE"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::VertexAi);
});
}
#[test]
fn vertex_ai_one() {
with_env_var(Some("1"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::VertexAi);
});
}
#[test]
fn gemini_api_false() {
with_env_var(Some("false"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::GeminiApi);
});
}
#[test]
fn gemini_api_zero() {
with_env_var(Some("0"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::GeminiApi);
});
}
#[test]
fn gemini_api_unset() {
with_env_var(None, || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::GeminiApi);
});
}
#[test]
fn gemini_api_empty_string() {
with_env_var(Some(""), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::GeminiApi);
});
}
#[test]
fn vertex_ai_mixed_case() {
with_env_var(Some("True"), || {
assert_eq!(get_google_llm_variant(), GoogleLlmVariant::VertexAi);
});
}
}