feat(ollama): unify local and remote endpoint routing

Integrate cloud endpoint behavior into existing ollama provider flow, avoid a separate standalone doc, and keep configuration minimal via api_url/api_key.

Also align reply_target and memory trait call sites needed for current baseline compatibility.
This commit is contained in:
Chummy 2026-02-17 22:49:40 +08:00
parent 85de9b5625
commit d94d7baa14
4 changed files with 195 additions and 24 deletions

View file

@ -172,6 +172,7 @@ fn resolve_provider_credential(name: &str, credential_override: Option<&str>) ->
"anthropic" => vec!["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
"openrouter" => vec!["OPENROUTER_API_KEY"],
"openai" => vec!["OPENAI_API_KEY"],
"ollama" => vec!["OLLAMA_API_KEY"],
"venice" => vec!["VENICE_API_KEY"],
"groq" => vec!["GROQ_API_KEY"],
"mistral" => vec!["MISTRAL_API_KEY"],
@ -274,7 +275,7 @@ pub fn create_provider_with_url(
"anthropic" => Ok(Box::new(anthropic::AnthropicProvider::new(key))),
"openai" => Ok(Box::new(openai::OpenAiProvider::new(key))),
// Ollama uses api_url for custom base URL (e.g. remote Ollama instance)
"ollama" => Ok(Box::new(ollama::OllamaProvider::new(api_url))),
"ollama" => Ok(Box::new(ollama::OllamaProvider::new(api_url, key))),
"gemini" | "google" | "google-gemini" => {
Ok(Box::new(gemini::GeminiProvider::new(key)))
}
@ -600,7 +601,7 @@ mod tests {
#[test]
fn factory_ollama() {
assert!(create_provider("ollama", None).is_ok());
// Ollama ignores the api_key parameter since it's a local service
// Ollama may use API key when a remote endpoint is configured.
assert!(create_provider("ollama", Some("dummy")).is_ok());
assert!(create_provider("ollama", Some("any-value-here")).is_ok());
}
@ -951,6 +952,13 @@ mod tests {
assert!(provider.is_ok());
}
#[test]
fn ollama_cloud_with_custom_url() {
let provider =
create_provider_with_url("ollama", Some("ollama-key"), Some("https://ollama.com"));
assert!(provider.is_ok());
}
#[test]
fn factory_all_providers_create_successfully() {
let providers = [