hyf

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

commit 9b6de82c9f2adc9478d4d77c39a1b9a77ca4f4c5
parent c18af0d6b2ba7c027fd4088a9c3ffc85cabbef22
Author: triesap <tyson@radroots.org>
Date:   Wed,  8 Apr 2026 18:10:02 +0000

tests: add checked-in hyf verification lane

- add pixi run test and a mojo test module covering protocol and wire encode/decode behavior
- expose a pure stdio request-dispatch helper so tests can exercise routing without subprocess glue
- cover truthful control-plane responses, deferred capability handling, and first-wave mode-a outputs
- verify both pixi run test and pixi run run from the hyf repo root

Diffstat:
Mpixi.toml | 1+
Msrc/hyf_stdio/server.mojo | 141++++++++++++++++++++++++++++++++++++++++---------------------------------------
Atests/test_hyf.mojo | 225+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 298 insertions(+), 69 deletions(-)

diff --git a/pixi.toml b/pixi.toml @@ -17,3 +17,4 @@ mojson = { path = "../../../../vendor/mojo/mojson" } [tasks] run = "mojo run src/main.mojo" +test = "mojo -I src tests/test_hyf.mojo" diff --git a/src/hyf_stdio/server.mojo b/src/hyf_stdio/server.mojo @@ -11,7 +11,7 @@ from hyf_core.capabilities.registry import ( ) 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, CapabilitySuccess +from hyf_core.errors import CapabilityFailure, CapabilityResult, CapabilitySuccess from hyf_stdio.codec import decode_request, encode_error, encode_success from hyf_stdio.control.capabilities import build_capabilities_output from hyf_stdio.control.status import build_status_output @@ -90,40 +90,89 @@ def _wire_success_from_core_success( ) -def _write_query_rewrite(request: WireRequest, request_id: String) raises: - var result = execute_query_rewrite( - request.input.clone(), request.context.copy() - ) +def _dispatch_capability_result( + request_id: String, result: CapabilityResult +) raises -> String: if result.failure: - _write_error(_wire_error_from_core_failure(request_id, result.failure.value())) - return - _write_success( + return encode_error( + _wire_error_from_core_failure(request_id, result.failure.value()) + ) + return encode_success( _wire_success_from_core_success(request_id, result.success.value()) ) -def _write_semantic_rank(request: WireRequest, request_id: String) raises: - var result = execute_semantic_rank( +def _dispatch_query_rewrite(request: WireRequest, request_id: String) raises -> String: + var result = execute_query_rewrite( request.input.clone(), request.context.copy() ) - if result.failure: - _write_error(_wire_error_from_core_failure(request_id, result.failure.value())) - return - _write_success( - _wire_success_from_core_success(request_id, result.success.value()) + return _dispatch_capability_result(request_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, result) -def _write_explain_result(request: WireRequest, request_id: String) raises: +def _dispatch_explain_result(request: WireRequest, request_id: String) raises -> String: var result = execute_explain_result( request.input.clone(), request.context.copy() ) - if result.failure: - _write_error(_wire_error_from_core_failure(request_id, result.failure.value())) - return - _write_success( - _wire_success_from_core_success(request_id, result.success.value()) - ) + return _dispatch_capability_result(request_id, result) + + +def handle_request(request: WireRequest) raises -> String: + var request_id = String(request.request_id) + try: + if request.capability == "sys.status": + return encode_success( + WireSuccessResponse( + request_id=request_id, + output=build_status_output(), + meta=None, + ) + ) + elif request.capability == "sys.capabilities": + return encode_success( + WireSuccessResponse( + request_id=request_id, + output=build_capabilities_output(), + 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 is_deferred_capability(request.capability): + return encode_error(_disabled_response(request)) + elif is_known_business_capability(request.capability): + return encode_error(_unavailable_response(request)) + return encode_error(_unsupported_response(request)) + except e: + return encode_error( + WireErrorResponse( + request_id=request_id, + error=internal_error(String(e)), + ) + ) + + +def handle_request_line(line: String) raises -> String: + try: + var request = decode_request(line) + return handle_request(request^) + except e: + return encode_error( + WireErrorResponse( + request_id="", + error=invalid_request_error(String(e)), + ) + ) def run_stdio_server() raises: @@ -133,53 +182,7 @@ def run_stdio_server() raises: try: var line = _read_request_line() - try: - var request = decode_request(line) - var request_id = String(request.request_id) - - try: - if request.capability == "sys.status": - _write_success( - WireSuccessResponse( - request_id=request_id, - output=build_status_output(), - meta=None, - ) - ) - elif request.capability == "sys.capabilities": - _write_success( - WireSuccessResponse( - request_id=request_id, - output=build_capabilities_output(), - meta=None, - ) - ) - elif request.capability == "query_rewrite": - _write_query_rewrite(request^, request_id) - elif request.capability == "semantic_rank": - _write_semantic_rank(request^, request_id) - elif request.capability == "explain_result": - _write_explain_result(request^, request_id) - elif is_deferred_capability(request.capability): - _write_error(_disabled_response(request)) - elif is_known_business_capability(request.capability): - _write_error(_unavailable_response(request)) - else: - _write_error(_unsupported_response(request)) - except e: - _write_error( - WireErrorResponse( - request_id=request_id, - error=internal_error(String(e)), - ) - ) - except e: - _write_error( - WireErrorResponse( - request_id="", - error=invalid_request_error(String(e)), - ) - ) + print(handle_request_line(line)) except e: if String(e) == "EOF": return diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo @@ -0,0 +1,225 @@ +from std.testing import assert_equal, assert_true, assert_raises, TestSuite + +from mojson import Value, loads + +from hyf_stdio.codec import decode_request, encode_error, encode_success +from hyf_stdio.envelope import WireErrorResponse, WireSuccessResponse +from hyf_stdio.errors import WireError +from hyf_stdio.server import handle_request_line + + +def _dispatch(line: String) raises -> Value: + return loads(handle_request_line(line)) + + +def _business_capability(result: Value, capability_id: String) raises -> Value: + for capability in result["output"]["business_capabilities"].array_items(): + if capability["id"].string_value() == capability_id: + return capability.clone() + raise Error("missing capability '" + capability_id + "' in response") + + +def test_decode_request_parses_context_and_input() raises: + var request = decode_request( + '{"request_id":"req-1","capability":"query_rewrite","context":{"consumer":"radroots-cli","return_provenance":true},"input":{"query":"eggs near me"}}' + ) + + assert_equal(request.request_id, "req-1") + assert_equal(request.capability, "query_rewrite") + assert_equal(request.context.consumer, "radroots-cli") + assert_equal(request.context.mode_preference, "a") + assert_equal(request.context.return_provenance, True) + assert_equal(request.input["query"].string_value(), "eggs near me") + + +def test_decode_request_rejects_unexpected_field() raises: + with assert_raises(): + _ = decode_request( + '{"request_id":"req-1","capability":"query_rewrite","input":{"query":"eggs"},"unexpected":true}' + ) + + +def test_encode_success_and_error_shapes() raises: + var output = loads("{}") + output.set("kind", Value("ok")) + + var meta = loads("{}") + meta.set("mode", Value("a")) + + var success = loads( + encode_success( + WireSuccessResponse( + request_id="req-success", + output=output.copy(), + meta=meta.copy(), + ) + ) + ) + assert_equal(success["request_id"].string_value(), "req-success") + assert_equal(success["ok"].bool_value(), True) + assert_equal(success["output"]["kind"].string_value(), "ok") + assert_equal(success["meta"]["mode"].string_value(), "a") + + var failure = loads( + encode_error( + WireErrorResponse( + request_id="req-error", + error=WireError(code="invalid_request", message="bad request"), + ) + ) + ) + assert_equal(failure["request_id"].string_value(), "req-error") + assert_equal(failure["ok"].bool_value(), False) + assert_equal(failure["error"]["code"].string_value(), "invalid_request") + assert_equal(failure["error"]["message"].string_value(), "bad request") + + +def test_handle_request_line_returns_invalid_request_for_bad_line() raises: + var result = _dispatch("") + assert_equal(result["request_id"].string_value(), "") + assert_equal(result["ok"].bool_value(), False) + assert_equal(result["error"]["code"].string_value(), "invalid_request") + + +def test_status_reports_registered_mode_a_ready() raises: + var result = _dispatch( + '{"request_id":"status-1","capability":"sys.status","input":{}}' + ) + + assert_equal(result["ok"].bool_value(), True) + assert_equal( + result["output"]["implementation_status"].string_value(), + "bootstrap_registered_mode_a_ready", + ) + assert_equal( + result["output"]["backend_reachability"]["mode_a_deterministic"].string_value(), + "available", + ) + assert_equal( + Int( + result["output"]["counts"]["mode_a_registered_business_capabilities"].int_value() + ), + 3, + ) + assert_equal( + Int( + result["output"]["counts"]["mode_a_implemented_business_capabilities"].int_value() + ), + 3, + ) + + +def test_capabilities_report_implemented_and_disabled_states() raises: + var result = _dispatch( + '{"request_id":"caps-1","capability":"sys.capabilities","input":{}}' + ) + + var query_rewrite = _business_capability(result, "query_rewrite") + var semantic_rank = _business_capability(result, "semantic_rank") + var explain_result = _business_capability(result, "explain_result") + var filter_extraction = _business_capability(result, "filter_extraction") + + assert_equal(query_rewrite["implemented"].bool_value(), True) + assert_equal(query_rewrite["callable"].bool_value(), True) + assert_equal( + semantic_rank["implementation_status"].string_value(), "implemented" + ) + assert_equal( + explain_result["implementation_status"].string_value(), "implemented" + ) + assert_equal(filter_extraction["mode_a"].string_value(), "disabled") + assert_equal( + filter_extraction["disabled_reason"].string_value(), + "deferred_bootstrap_capability", + ) + + +def test_disabled_capability_returns_capability_disabled() raises: + var result = _dispatch( + '{"request_id":"disabled-1","capability":"filter_extraction","input":{}}' + ) + + assert_equal(result["ok"].bool_value(), False) + assert_equal(result["request_id"].string_value(), "disabled-1") + assert_equal(result["error"]["code"].string_value(), "capability_disabled") + + +def test_query_rewrite_returns_deterministic_output() raises: + var result = _dispatch( + '{"request_id":"rewrite-1","capability":"query_rewrite","input":{"text":"eggs near me with weekend pickup"}}' + ) + + assert_equal(result["ok"].bool_value(), True) + assert_equal( + result["output"]["rewritten_text"].string_value(), + "eggs", + ) + assert_equal( + result["output"]["extracted_filters"]["fulfillment"].string_value(), + "pickup", + ) + assert_equal(result["meta"]["backend"].string_value(), "heuristic") + + +def test_semantic_rank_returns_ranked_ids_and_reasons() raises: + var result = _dispatch( + '{"request_id":"rank-1","capability":"semantic_rank","input":{"query":"eggs near me with weekend pickup","candidates":[{"id":"lst_7ak2","title":"Pasture eggs","farm":"La Huerta del Sur","delivery":"pickup","distance_km":3.2,"freshness_minutes":2},{"id":"lst_8k1p","title":"Free range eggs","farm":"Santa Elena","delivery":"delivery","distance_km":8.7,"freshness_minutes":18}]}}' + ) + + assert_equal(result["ok"].bool_value(), True) + assert_equal( + result["output"]["ranked_ids"][0].string_value(), + "lst_7ak2", + ) + assert_equal( + result["output"]["ranked_ids"][1].string_value(), + "lst_8k1p", + ) + assert_equal( + result["output"]["reasons"]["lst_7ak2"][1].string_value(), + "pickup match", + ) + assert_equal( + result["output"]["scored_candidates"][0]["score"].int_value(), + 102, + ) + + +def test_explain_result_returns_deterministic_summary_and_provenance() raises: + var result = _dispatch( + '{"request_id":"explain-1","capability":"explain_result","context":{"consumer":"radroots-cli","return_provenance":true},"input":{"query":"eggs near me with weekend pickup","candidate":{"id":"lst_7ak2","title":"Pasture eggs","farm":"La Huerta del Sur","delivery":"pickup","distance_km":3.2,"freshness_minutes":2}}}' + ) + + assert_equal(result["ok"].bool_value(), True) + assert_equal( + result["output"]["explanation_kind"].string_value(), + "deterministic", + ) + assert_true( + result["output"]["summary"].string_value().find("pickup match") >= 0 + ) + assert_equal( + result["meta"]["provenance"]["kind"].string_value(), + "deterministic", + ) + assert_equal( + result["meta"]["provenance"]["source_refs"][1]["source_kind"].string_value(), + "candidate", + ) + + +def test_semantic_rank_invalid_input_returns_invalid_request() raises: + var result = _dispatch( + '{"request_id":"rank-bad-1","capability":"semantic_rank","input":{"query":"eggs near me with weekend pickup","candidates":[]}}' + ) + + assert_equal(result["ok"].bool_value(), False) + assert_equal(result["request_id"].string_value(), "rank-bad-1") + assert_equal(result["error"]["code"].string_value(), "invalid_request") + assert_true( + result["error"]["message"].string_value().find("must not be empty") >= 0 + ) + + +def main() raises: + TestSuite.discover_tests[__functions_in_module()]().run()