diff --git a/libs/service/agent/sync.rs b/libs/service/agent/sync.rs index ed29257..db92a58 100644 --- a/libs/service/agent/sync.rs +++ b/libs/service/agent/sync.rs @@ -726,15 +726,20 @@ impl AppService { available_ids.len() ); - // Step 2: fetch OpenRouter metadata. + // Step 2: fetch OpenRouter metadata (optional — failure falls back to + // direct sync for all available models). let http_client = reqwest::Client::new(); - let or_resp: OpenRouterResponse = fetch_openrouter_models(&http_client) - .await - .map_err(AppError::InternalServerError)?; + let or_models: Vec = match fetch_openrouter_models(&http_client).await { + Ok(resp) => resp.data, + Err(msg) => { + tracing::warn!(error = %msg, "sync_upstream_models: OpenRouter fetch failed, falling back to direct sync"); + let direct_result = sync_models_direct(&self.db, &available_ids).await; + return Ok(direct_result); + } + }; // Step 3: filter to only accessible models. - let filtered: Vec<&OpenRouterModel> = or_resp - .data + let filtered: Vec<&OpenRouterModel> = or_models .iter() .filter(|m| available_ids.contains(&m.id)) .filter(|m| m.id != "openrouter/auto") @@ -927,16 +932,16 @@ impl AppService { }; let http_client = reqwest::Client::new(); - let or_resp = match fetch_openrouter_models(&http_client).await { - Ok(r) => r, + let or_models: Vec = match fetch_openrouter_models(&http_client).await { + Ok(resp) => resp.data, Err(msg) => { - tracing::warn!(error = %msg, "OpenRouter model sync"); + tracing::warn!(error = %msg, "OpenRouter model sync: fetch failed, falling back to direct sync"); + sync_models_direct(db, &available_ids).await; return; } }; - let filtered: Vec<&OpenRouterModel> = or_resp - .data + let filtered: Vec<&OpenRouterModel> = or_models .iter() .filter(|m| available_ids.contains(&m.id)) .filter(|m| m.id != "openrouter/auto")