test(ollama): cover cloud search defaults

This commit is contained in:
2025-10-26 01:26:28 +02:00
parent 5d9ecec82c
commit eef0e3dea0
2 changed files with 21 additions and 17 deletions

View File

@@ -1,6 +1,5 @@
# Agents Upgrade Plan
- test: rebuild ollama integration suite to exercise local, cloud, search, and quota error flows
- refactor: simplify provider/session coupling so compute_web_search_settings shares normalization utilities
- docs: clarify cloud vs local env configuration (api key precedence, insecure toggle) in configuration guide
- ci: add targeted regression job for ollama providers covering chat, streaming, and tool execution paths

View File

@@ -113,7 +113,7 @@ fn configure_local(base_url: &str) -> Config {
config
}
fn configure_cloud(base_url: &str, search_endpoint: &str) -> Config {
fn configure_cloud(base_url: &str, search_endpoint: Option<&str>) -> Config {
let mut config = Config::default();
config.general.default_provider = "ollama_cloud".into();
config.general.default_model = Some("llama3:8b-cloud".into());
@@ -130,10 +130,11 @@ fn configure_cloud(base_url: &str, search_endpoint: &str) -> Config {
cloud.enabled = true;
cloud.base_url = Some(base_url.to_string());
cloud.api_key = Some("test-key".into());
cloud.extra.insert(
"web_search_endpoint".into(),
Value::String(search_endpoint.into()),
);
if let Some(endpoint) = search_endpoint {
cloud
.extra
.insert("web_search_endpoint".into(), Value::String(endpoint.into()));
}
cloud.extra.insert(
owlen_core::config::OLLAMA_CLOUD_ENDPOINT_KEY.into(),
Value::String(base_url.to_string()),
@@ -180,14 +181,13 @@ async fn run_local_completion(base_suffix: &str) {
assert_eq!(snapshot.weekly.total_tokens, 36);
}
async fn run_cloud_tool_flow(base_suffix: &str) {
async fn run_cloud_tool_flow(
base_suffix: &str,
search_endpoint: Option<&str>,
expected_search_path: &str,
) {
let server = MockServer::start().await;
let raw_base = format!("{}{}", server.uri(), base_suffix);
let search_endpoint = if base_suffix.is_empty() {
"/v1/web/search"
} else {
"/web/search"
};
let tags = load_fixture("ollama_tags");
let tool_call = load_fixture("ollama_cloud_tool_call");
@@ -219,7 +219,7 @@ async fn run_cloud_tool_flow(base_suffix: &str) {
.await;
Mock::given(method("POST"))
.and(path("/v1/web/search"))
.and(path(expected_search_path))
.and(header("authorization", "Bearer test-key"))
.respond_with(ResponseTemplate::new(200).set_body_json(json!({
"results": [
@@ -254,7 +254,7 @@ async fn run_cloud_tool_flow(base_suffix: &str) {
let search_url = format!(
"{}/{}",
raw_base.trim_end_matches('/'),
search_endpoint.trim_start_matches('/')
expected_search_path.trim_start_matches('/')
);
session.grant_consent(
@@ -325,7 +325,7 @@ async fn run_cloud_error(
.mount(&server)
.await;
let config = configure_cloud(&raw_base, search_endpoint);
let config = configure_cloud(&raw_base, Some(search_endpoint));
let cloud_cfg = config
.providers
.get("ollama_cloud")
@@ -368,12 +368,17 @@ async fn local_provider_accepts_v1_base_url() {
#[tokio::test(flavor = "multi_thread")]
async fn cloud_tool_call_flows_through_web_search() {
run_cloud_tool_flow("").await;
run_cloud_tool_flow("", Some("/v1/web/search"), "/v1/web/search").await;
}
#[tokio::test(flavor = "multi_thread")]
async fn cloud_tool_call_accepts_v1_base_url() {
run_cloud_tool_flow("/v1").await;
run_cloud_tool_flow("/v1", Some("/web/search"), "/v1/web/search").await;
}
#[tokio::test(flavor = "multi_thread")]
async fn cloud_tool_call_uses_default_search_endpoint() {
run_cloud_tool_flow("", None, "/api/web_search").await;
}
#[tokio::test(flavor = "multi_thread")]