commit a9b997ca69e0a60f7b2e36a61af2367a1cbd9cef
parent e6a4e95b04b2fcfa016557b96f6cf5c20c7e6799
Author: triesap <tyson@radroots.org>
Date: Thu, 9 Apr 2026 20:50:42 +0000
hyf: honor explicit provider bindings
Diffstat:
3 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/src/commands/doctor.rs b/src/commands/doctor.rs
@@ -3,7 +3,7 @@ use crate::domain::runtime::{
};
use crate::runtime::RuntimeError;
use crate::runtime::config::{RuntimeConfig, SignerBackend};
-use crate::runtime::hyf::resolve_status as resolve_hyf_status;
+use crate::runtime::hyf::resolve_runtime_status as resolve_hyf_status;
use crate::runtime::logging::LoggingState;
use crate::runtime::signer::resolve_signer_status;
@@ -58,7 +58,7 @@ pub fn report(
}
}
- checks.push(hyf_check(&resolve_hyf_status(&config.hyf)));
+ checks.push(hyf_check(&resolve_hyf_status(config)));
checks.push(logging_check(config, logging));
checks.push(binding_check(config));
diff --git a/src/runtime/config.rs b/src/runtime/config.rs
@@ -382,7 +382,7 @@ struct CapabilityBindingSpec {
pub(crate) const SIGNER_REMOTE_NIP46_CAPABILITY: &str = "signer.remote_nip46";
const WRITE_PLANE_TRADE_JSONRPC_CAPABILITY: &str = "write_plane.trade_jsonrpc";
const WORKFLOW_TRADE_CAPABILITY: &str = "workflow.trade";
-const INFERENCE_HYF_STDIO_CAPABILITY: &str = "inference.hyf_stdio";
+pub(crate) const INFERENCE_HYF_STDIO_CAPABILITY: &str = "inference.hyf_stdio";
const CAPABILITY_BINDING_SPECS: &[CapabilityBindingSpec] = &[
CapabilityBindingSpec {
diff --git a/src/runtime/hyf.rs b/src/runtime/hyf.rs
@@ -5,7 +5,9 @@ use std::time::{Duration, Instant};
use serde_json::{Value, json};
-use crate::runtime::config::HyfConfig;
+use crate::runtime::config::{
+ CapabilityBindingTargetKind, HyfConfig, INFERENCE_HYF_STDIO_CAPABILITY, RuntimeConfig,
+};
const HYF_STATUS_TIMEOUT: Duration = Duration::from_secs(1);
const HYF_STATUS_POLL_INTERVAL: Duration = Duration::from_millis(10);
@@ -22,6 +24,33 @@ pub struct HyfStatusView {
pub deterministic_available: Option<bool>,
}
+pub fn resolve_runtime_status(config: &RuntimeConfig) -> HyfStatusView {
+ if !config.hyf.enabled {
+ return resolve_status(&config.hyf);
+ }
+
+ let Some(binding) = config.capability_binding(INFERENCE_HYF_STDIO_CAPABILITY) else {
+ return resolve_status(&config.hyf);
+ };
+
+ match binding.target_kind {
+ CapabilityBindingTargetKind::ExplicitEndpoint => {
+ let mut hyf = config.hyf.clone();
+ hyf.executable = binding.target.clone().into();
+ resolve_status(&hyf)
+ }
+ CapabilityBindingTargetKind::ManagedInstance => unavailable_status(
+ config.hyf.executable.display().to_string(),
+ format!(
+ "configured hyf binding target `{}` uses unsupported target_kind `managed_instance`; use `explicit_endpoint` for `inference.hyf_stdio`",
+ binding.target
+ ),
+ None,
+ None,
+ ),
+ }
+}
+
pub fn resolve_status(config: &HyfConfig) -> HyfStatusView {
let executable = config.executable.display().to_string();
if !config.enabled {