hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

commit 08b5a2a260747796d08fa4277a761b688bf0da98
parent becd9e6cc6bcab00c1cf5d66409a298897fd522f
Author: triesap <tyson@radroots.org>
Date:   Wed,  8 Apr 2026 19:47:01 +0000

core: make assisted requests explicit

Diffstat:
Msrc/hyf_core/capabilities/explain_result.mojo | 11++++++++++-
Msrc/hyf_core/capabilities/query_rewrite.mojo | 11++++++++++-
Msrc/hyf_core/capabilities/semantic_rank.mojo | 11++++++++++-
Msrc/hyf_core/request_context.mojo | 4++++
Msrc/hyf_stdio/control/status.mojo | 10++++++++++
Mtests/test_hyf.mojo | 28++++++++++++++++++++++++++++
6 files changed, 72 insertions(+), 3 deletions(-)

diff --git a/src/hyf_core/capabilities/explain_result.mojo b/src/hyf_core/capabilities/explain_result.mojo @@ -15,12 +15,16 @@ from hyf_core.capabilities.ranking_support import ( ) from hyf_core.errors import ( CapabilityResult, + backend_unavailable_error, failed_capability, invalid_input_error, successful_capability, ) from hyf_core.provenance import ProvenanceSourceRef -from hyf_core.request_context import RequestContext +from hyf_core.request_context import ( + RequestContext, + assisted_execution_requested, +) def _join_reason_summary(reasons: List[String]) -> String: @@ -87,6 +91,11 @@ def _build_output( def execute_explain_result( input: Value, context: RequestContext ) raises -> CapabilityResult: + if assisted_execution_requested(context): + return failed_capability( + backend_unavailable_error("assisted_execution") + ) + try: var analysis = analyze_query(input, context, "explain_result") var candidate = parse_single_candidate(input, "explain_result") diff --git a/src/hyf_core/capabilities/query_rewrite.mojo b/src/hyf_core/capabilities/query_rewrite.mojo @@ -12,12 +12,16 @@ from hyf_core.capabilities.query_analysis import ( ) from hyf_core.errors import ( CapabilityResult, + backend_unavailable_error, failed_capability, invalid_input_error, successful_capability, ) from hyf_core.provenance import ProvenanceSourceRef -from hyf_core.request_context import RequestContext +from hyf_core.request_context import ( + RequestContext, + assisted_execution_requested, +) def _build_output(analysis: QueryAnalysis) raises -> Value: @@ -41,6 +45,11 @@ def _build_output(analysis: QueryAnalysis) raises -> Value: def execute_query_rewrite( input: Value, context: RequestContext ) raises -> CapabilityResult: + if assisted_execution_requested(context): + return failed_capability( + backend_unavailable_error("assisted_execution") + ) + try: var analysis = analyze_query(input, context, "query_rewrite") diff --git a/src/hyf_core/capabilities/semantic_rank.mojo b/src/hyf_core/capabilities/semantic_rank.mojo @@ -16,12 +16,16 @@ from hyf_core.capabilities.ranking_support import ( ) from hyf_core.errors import ( CapabilityResult, + backend_unavailable_error, failed_capability, invalid_input_error, successful_capability, ) from hyf_core.provenance import ProvenanceSourceRef -from hyf_core.request_context import RequestContext +from hyf_core.request_context import ( + RequestContext, + assisted_execution_requested, +) def _build_scored_candidates( @@ -72,6 +76,11 @@ def _build_output( def execute_semantic_rank( input: Value, context: RequestContext ) raises -> CapabilityResult: + if assisted_execution_requested(context): + return failed_capability( + backend_unavailable_error("assisted_execution") + ) + try: var analysis = analyze_query(input, context, "semantic_rank") var candidates = parse_candidate_array(input, "semantic_rank") diff --git a/src/hyf_core/request_context.mojo b/src/hyf_core/request_context.mojo @@ -105,6 +105,10 @@ def default_request_context() -> RequestContext: ) +def assisted_execution_requested(context: RequestContext) -> Bool: + return context.execution_mode_preference == "assisted" + + def _parse_scope(json: Value) raises -> RequestScope: _require_object(json, "request context scope") diff --git a/src/hyf_stdio/control/status.mojo b/src/hyf_stdio/control/status.mojo @@ -63,6 +63,16 @@ def build_status_output() raises -> Value: execution_modes.set("assisted", Value(False)) output.set("enabled_execution_modes", execution_modes) + var execution_mode_request_behavior = loads("{}") + execution_mode_request_behavior.set("deterministic", Value("execute")) + execution_mode_request_behavior.set( + "assisted", Value("backend_unavailable") + ) + output.set( + "execution_mode_request_behavior", + execution_mode_request_behavior, + ) + var backends = loads("{}") backends.set( "deterministic_backend", diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo @@ -150,6 +150,14 @@ def test_status_reports_registered_deterministic_ready() raises: "available", ) assert_equal( + result["output"]["execution_mode_request_behavior"]["deterministic"].string_value(), + "execute", + ) + assert_equal( + result["output"]["execution_mode_request_behavior"]["assisted"].string_value(), + "backend_unavailable", + ) + assert_equal( Int( result["output"]["counts"]["deterministic_registered_business_capabilities"].int_value() ), @@ -286,6 +294,26 @@ def test_semantic_rank_invalid_input_returns_invalid_request() raises: ) +def test_assisted_request_returns_backend_unavailable() raises: + var result = _dispatch( + '{"version":1,"request_id":"rewrite-assisted-1","trace_id":"trace-rewrite-assisted-1","capability":"query_rewrite","context":{"execution_mode_preference":"assisted"},"input":{"text":"eggs near me"}}' + ) + + assert_equal(Int(result["version"].int_value()), 1) + assert_equal(result["request_id"].string_value(), "rewrite-assisted-1") + assert_equal( + result["trace_id"].string_value(), "trace-rewrite-assisted-1" + ) + assert_equal(result["ok"].bool_value(), False) + assert_equal( + result["error"]["code"].string_value(), "backend_unavailable" + ) + assert_true( + result["error"]["message"].string_value().find("assisted_execution") + >= 0 + ) + + def test_invalid_request_preserves_request_and_trace_correlation() raises: var result = _dispatch( '{"version":2,"request_id":"bad-version-1","trace_id":"trace-bad-version-1","capability":"sys.status","input":{}}'