hyf

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

commit c3c76758ae2da52ba530c9b7f5c0f507654161c8
parent 74b6721fc35090cd8cf77d939d0dbc0ca91a16f4
Author: triesap <tyson@radroots.org>
Date:   Wed,  8 Apr 2026 20:03:39 +0000

core: add backend selection seam

Diffstat:
Asrc/hyf_core/backends/heuristic_backend.mojo | 28++++++++++++++++++++++++++++
Asrc/hyf_core/backends/selector.mojo | 47+++++++++++++++++++++++++++++++++++++++++++++++
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_stdio/server.mojo | 38++++++++++++--------------------------
Mtests/test_hyf.mojo | 47+++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 137 insertions(+), 56 deletions(-)

diff --git a/src/hyf_core/backends/heuristic_backend.mojo b/src/hyf_core/backends/heuristic_backend.mojo @@ -0,0 +1,28 @@ +from mojson import Value + +from hyf_core.capabilities.explain_result import execute_explain_result +from hyf_core.capabilities.query_rewrite import execute_query_rewrite +from hyf_core.capabilities.semantic_rank import execute_semantic_rank +from hyf_core.errors import ( + CapabilityResult, + capability_not_implemented_error, + failed_capability, +) +from hyf_core.request_context import RequestContext + + +def backend_name() -> String: + return "heuristic" + + +def execute_capability( + capability_id: String, input: Value, context: RequestContext +) raises -> CapabilityResult: + if capability_id == "query_rewrite": + return execute_query_rewrite(input, context) + if capability_id == "semantic_rank": + return execute_semantic_rank(input, context) + if capability_id == "explain_result": + return execute_explain_result(input, context) + + return failed_capability(capability_not_implemented_error(capability_id)) diff --git a/src/hyf_core/backends/selector.mojo b/src/hyf_core/backends/selector.mojo @@ -0,0 +1,47 @@ +from mojson import Value + +from hyf_core.backends.heuristic_backend import ( + backend_name as heuristic_backend_name, + execute_capability as execute_heuristic_capability, +) +from hyf_core.errors import ( + CapabilityResult, + backend_unavailable_error, + failed_capability, +) +from hyf_core.request_context import ( + RequestContext, + assisted_execution_requested, +) + + +@fieldwise_init +struct BackendSelection(Copyable, Movable): + var backend_name: String + var available: Bool + + +def resolve_backend(context: RequestContext) -> BackendSelection: + if assisted_execution_requested(context): + return BackendSelection( + backend_name="assisted_execution", available=False + ) + + return BackendSelection( + backend_name=heuristic_backend_name(), available=True + ) + + +def execute_capability( + capability_id: String, input: Value, context: RequestContext +) raises -> CapabilityResult: + var selection = resolve_backend(context) + if not selection.available: + return failed_capability( + backend_unavailable_error(selection.backend_name) + ) + + if selection.backend_name == heuristic_backend_name(): + return execute_heuristic_capability(capability_id, input, context) + + return failed_capability(backend_unavailable_error(selection.backend_name)) diff --git a/src/hyf_core/capabilities/explain_result.mojo b/src/hyf_core/capabilities/explain_result.mojo @@ -16,16 +16,12 @@ 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, - assisted_execution_requested, -) +from hyf_core.request_context import RequestContext def _join_reason_summary(reasons: List[String]) -> String: @@ -92,11 +88,6 @@ 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 request: ExplainResultRequest = parse_explain_result_request(input) var analysis = analyze_query_text(request.query_text, context) diff --git a/src/hyf_core/capabilities/query_rewrite.mojo b/src/hyf_core/capabilities/query_rewrite.mojo @@ -14,16 +14,12 @@ 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, - assisted_execution_requested, -) +from hyf_core.request_context import RequestContext def _build_output(analysis: QueryAnalysis) raises -> Value: @@ -47,11 +43,6 @@ 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 request: QueryRewriteRequest = parse_query_rewrite_request(input) var analysis = analyze_query_text(request.text, context) diff --git a/src/hyf_core/capabilities/semantic_rank.mojo b/src/hyf_core/capabilities/semantic_rank.mojo @@ -17,16 +17,12 @@ 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, - assisted_execution_requested, -) +from hyf_core.request_context import RequestContext def _build_scored_candidates( @@ -77,11 +73,6 @@ 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 request: SemanticRankRequest = parse_semantic_rank_request(input) var analysis = analyze_query_text(request.query_text, context) diff --git a/src/hyf_stdio/server.mojo b/src/hyf_stdio/server.mojo @@ -4,13 +4,11 @@ from std.sys import stdin from mojson import Value -from hyf_core.capabilities.explain_result import execute_explain_result +from hyf_core.backends.selector import execute_capability as execute_backend_capability from hyf_core.capabilities.registry import ( is_deferred_capability, is_known_business_capability, ) -from hyf_core.capabilities.query_rewrite import execute_query_rewrite -from hyf_core.capabilities.semantic_rank import execute_semantic_rank from hyf_core.errors import CapabilityFailure, CapabilityResult, CapabilitySuccess from hyf_core.metadata import hyf_protocol_version from hyf_stdio.codec import ( @@ -128,23 +126,11 @@ def _dispatch_capability_result( ) -def _dispatch_query_rewrite(request: WireRequest, request_id: String) raises -> String: - var result = execute_query_rewrite( - request.input.clone(), request.context.copy() - ) - return _dispatch_capability_result(request_id, request.trace_id, result) - - -def _dispatch_semantic_rank(request: WireRequest, request_id: String) raises -> String: - var result = execute_semantic_rank( - request.input.clone(), request.context.copy() - ) - return _dispatch_capability_result(request_id, request.trace_id, result) - - -def _dispatch_explain_result(request: WireRequest, request_id: String) raises -> String: - var result = execute_explain_result( - request.input.clone(), request.context.copy() +def _dispatch_business_capability( + request: WireRequest, request_id: String +) raises -> String: + var result = execute_backend_capability( + request.capability, request.input.clone(), request.context.copy() ) return _dispatch_capability_result(request_id, request.trace_id, result) @@ -173,12 +159,12 @@ def handle_request(request: WireRequest) raises -> String: meta=None, ) ) - elif request.capability == "query_rewrite": - return _dispatch_query_rewrite(request.copy(), request_id) - elif request.capability == "semantic_rank": - return _dispatch_semantic_rank(request.copy(), request_id) - elif request.capability == "explain_result": - return _dispatch_explain_result(request.copy(), request_id) + elif ( + request.capability == "query_rewrite" + or request.capability == "semantic_rank" + or request.capability == "explain_result" + ): + return _dispatch_business_capability(request.copy(), request_id) elif is_deferred_capability(request.capability): return encode_error(_disabled_response(request)) elif is_known_business_capability(request.capability): diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo @@ -2,6 +2,11 @@ from std.testing import assert_equal, assert_true, assert_raises, TestSuite from mojson import Value, loads +from hyf_core.backends.selector import ( + execute_capability as execute_core_capability, + resolve_backend, +) +from hyf_core.request_context import default_request_context from hyf_stdio.codec import decode_request, encode_error, encode_success from hyf_stdio.envelope import WireErrorResponse, WireSuccessResponse from hyf_stdio.errors import WireError @@ -211,6 +216,48 @@ def test_disabled_capability_returns_capability_disabled() raises: assert_equal(result["error"]["code"].string_value(), "capability_disabled") +def test_backend_selector_routes_deterministic_wave() raises: + var context = default_request_context() + var selection = resolve_backend(context) + + assert_equal(selection.backend_name, "heuristic") + assert_equal(selection.available, True) + + var result = execute_core_capability( + "query_rewrite", + loads('{"text":"eggs near me with weekend pickup"}'), + context, + ) + + assert_true(result.success) + assert_equal( + result.success.value().meta.value().backend, + "heuristic", + ) + assert_equal( + result.success.value().meta.value().execution_mode, + "deterministic", + ) + + +def test_backend_selector_reports_assisted_unavailable() raises: + var context = default_request_context() + context.execution_mode_preference = "assisted" + + var selection = resolve_backend(context) + assert_equal(selection.backend_name, "assisted_execution") + assert_equal(selection.available, False) + + var result = execute_core_capability( + "query_rewrite", + loads('{"text":"eggs near me"}'), + context, + ) + + assert_true(result.failure) + assert_equal(result.failure.value().error.code, "backend_unavailable") + + def test_query_rewrite_returns_deterministic_output() raises: var result = _dispatch( '{"version":1,"request_id":"rewrite-1","trace_id":"trace-rewrite-1","capability":"query_rewrite","input":{"text":"eggs near me with weekend pickup"}}'