2026-01-28 17:47:33 -08:00
|
|
|
use std::sync::Arc;
|
2024-10-03 10:57:01 -07:00
|
|
|
|
2024-10-16 14:20:26 -07:00
|
|
|
use crate::{configuration, llm_providers::LlmProviders};
|
|
|
|
|
use configuration::LlmProvider;
|
2024-10-03 10:57:01 -07:00
|
|
|
|
2026-01-28 17:47:33 -08:00
|
|
|
#[derive(Debug, Clone)]
|
2024-10-03 10:57:01 -07:00
|
|
|
pub enum ProviderHint {
|
|
|
|
|
Default,
|
|
|
|
|
Name(String),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<String> for ProviderHint {
|
|
|
|
|
fn from(value: String) -> Self {
|
|
|
|
|
match value.as_str() {
|
|
|
|
|
"default" => ProviderHint::Default,
|
|
|
|
|
_ => ProviderHint::Name(value),
|
|
|
|
|
}
|
2024-09-26 00:15:17 -06:00
|
|
|
}
|
|
|
|
|
}
|
2024-10-03 10:57:01 -07:00
|
|
|
|
|
|
|
|
pub fn get_llm_provider(
|
|
|
|
|
llm_providers: &LlmProviders,
|
|
|
|
|
provider_hint: Option<ProviderHint>,
|
2026-01-28 17:47:33 -08:00
|
|
|
) -> Result<Arc<LlmProvider>, String> {
|
|
|
|
|
match provider_hint {
|
|
|
|
|
Some(ProviderHint::Default) => llm_providers
|
|
|
|
|
.default()
|
|
|
|
|
.ok_or_else(|| "No default provider configured".to_string()),
|
|
|
|
|
Some(ProviderHint::Name(name)) => llm_providers
|
|
|
|
|
.get(&name)
|
|
|
|
|
.ok_or_else(|| format!("Model '{}' not found in configured providers", name)),
|
|
|
|
|
None => Err("No model specified in request".to_string()),
|
2024-10-09 15:47:32 -07:00
|
|
|
}
|
2024-10-03 10:57:01 -07:00
|
|
|
}
|