From fbed3b21f0e28c40a92d55eb39d445065a649b4d Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Sat, 9 May 2026 20:09:29 -0700 Subject: [PATCH] fix(learning): cloud fallback when local reflection gate is off (#1453) --- app/src-tauri/Cargo.lock | 4 ++-- src/openhuman/learning/reflection.rs | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/src-tauri/Cargo.lock b/app/src-tauri/Cargo.lock index cfe8f7ed6..b99c9cff5 100644 --- a/app/src-tauri/Cargo.lock +++ b/app/src-tauri/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "OpenHuman" -version = "0.53.22" +version = "0.53.23" dependencies = [ "anyhow", "async-trait", @@ -4551,7 +4551,7 @@ dependencies = [ [[package]] name = "openhuman" -version = "0.53.22" +version = "0.53.23" dependencies = [ "aes-gcm", "anyhow", diff --git a/src/openhuman/learning/reflection.rs b/src/openhuman/learning/reflection.rs index 790c04461..a2089c902 100644 --- a/src/openhuman/learning/reflection.rs +++ b/src/openhuman/learning/reflection.rs @@ -156,12 +156,22 @@ impl ReflectionHook { match self.config.reflection_source { ReflectionSource::Local => { // Gate: local reflection requires the per-feature flag. - // When off, no-op silently rather than erroring the turn. - // TODO: wire a cloud fallback here when use_local_for_learning is false. + // When off, fall back to a cloud provider if one is configured; + // otherwise no-op silently rather than erroring the turn. if !self.full_config.local_ai.use_local_for_learning() { + if let Some(provider) = self.provider.as_ref() { + tracing::info!( + "[learning::reflection] local_ai.usage.learning_reflection not enabled — \ + falling back to cloud provider" + ); + return provider + .simple_chat(prompt, "hint:reasoning", 0.3) + .await + .map_err(|e| anyhow::anyhow!("cloud reflection fallback failed: {e}")); + } tracing::info!( - "[learning::reflection] local_ai.usage.learning_reflection not enabled — \ - skipping local reflection (no cloud fallback configured for this subsystem)" + "[learning::reflection] local_ai.usage.learning_reflection not enabled \ + and no cloud provider configured — skipping reflection" ); return Ok(String::new()); }