hyf

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

commit 40f9e11eccf54fefa73f6f8c9f8431f30a05fb4c
parent 37beac1daf26d1c8952c38ffd189a993894a4c9e
Author: triesap <tyson@radroots.org>
Date:   Wed,  8 Apr 2026 21:02:52 +0000

core: make hyf response metadata truthful

Diffstat:
Msrc/hyf_core/capabilities/query_analysis.mojo | 2--
Msrc/hyf_core/capabilities/semantic_rank.mojo | 2+-
Msrc/hyf_core/provenance.mojo | 2--
Msrc/hyf_stdio/meta.mojo | 1-
Mtests/test_hyf.mojo | 12+++++++++++-
Mtests/test_stdio_contract.mojo | 21+++++++++++++++++++++
6 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/src/hyf_core/capabilities/query_analysis.mojo b/src/hyf_core/capabilities/query_analysis.mojo @@ -357,7 +357,6 @@ def build_deterministic_meta( return CoreResponseMeta( execution_mode="deterministic", backend="heuristic", - latency_ms=0, provenance=ExecutionProvenance( kind="deterministic", signal_tags=copy_string_list(signal_tags), @@ -370,6 +369,5 @@ def build_deterministic_meta( return CoreResponseMeta( execution_mode="deterministic", backend="heuristic", - latency_ms=0, provenance=None, ) diff --git a/src/hyf_core/capabilities/semantic_rank.mojo b/src/hyf_core/capabilities/semantic_rank.mojo @@ -32,7 +32,7 @@ def _build_scored_candidates( for evaluation in ranked: var candidate = loads("{}") candidate.set("id", Value(String(evaluation.candidate.id))) - candidate.set("score", Value(evaluation.score)) + candidate.set("heuristic_score", Value(evaluation.score)) candidate.set("matched_terms", string_array_value(evaluation.matched_terms)) candidate.set("reasons", string_array_value(evaluation.reasons)) candidate.set( diff --git a/src/hyf_core/provenance.mojo b/src/hyf_core/provenance.mojo @@ -26,7 +26,6 @@ struct ExecutionProvenance(Copyable, Movable): struct CoreResponseMeta(Copyable, Movable): var execution_mode: String var backend: String - var latency_ms: Int var provenance: Optional[ExecutionProvenance] @@ -34,6 +33,5 @@ def deterministic_response_meta() -> CoreResponseMeta: return CoreResponseMeta( execution_mode="deterministic", backend="heuristic", - latency_ms=0, provenance=None, ) diff --git a/src/hyf_stdio/meta.mojo b/src/hyf_stdio/meta.mojo @@ -50,7 +50,6 @@ def serialize_core_response_meta(meta: CoreResponseMeta) raises -> Value: var value = loads("{}") value.set("execution_mode", Value(String(meta.execution_mode))) value.set("backend", Value(String(meta.backend))) - value.set("latency_ms", Value(meta.latency_ms)) if meta.provenance: value.set("provenance", _serialize_provenance(meta.provenance.value())) return value^ diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo @@ -104,6 +104,7 @@ def test_encode_success_and_error_shapes() raises: success["meta"]["execution_mode"].string_value(), "deterministic", ) + assert_true(not _has_key(success["meta"], "latency_ms")) var failure = loads( encode_error( @@ -363,6 +364,7 @@ def test_query_rewrite_returns_deterministic_output() raises: "pickup", ) assert_equal(result["meta"]["backend"].string_value(), "heuristic") + assert_true(not _has_key(result["meta"], "latency_ms")) def test_query_rewrite_accepts_query_alias_with_same_behavior() raises: @@ -431,9 +433,13 @@ def test_semantic_rank_returns_ranked_ids_and_reasons() raises: "pickup match", ) assert_equal( - result["output"]["scored_candidates"][0]["score"].int_value(), + result["output"]["scored_candidates"][0]["heuristic_score"].int_value(), 102, ) + assert_true( + not _has_key(result["output"]["scored_candidates"][0], "score") + ) + assert_true(not _has_key(result["meta"], "latency_ms")) def test_semantic_rank_scope_listing_ids_remains_effective() raises: @@ -451,6 +457,9 @@ def test_semantic_rank_scope_listing_ids_remains_effective() raises: result["output"]["scored_candidates"][0]["scope_match"].bool_value(), True, ) + assert_true( + _has_key(result["output"]["scored_candidates"][0], "heuristic_score") + ) def test_semantic_rank_rejects_unknown_top_level_field() raises: @@ -507,6 +516,7 @@ def test_explain_result_returns_deterministic_summary_and_provenance() raises: result["meta"]["provenance"]["source_refs"][1]["source_kind"].string_value(), "candidate", ) + assert_true(not _has_key(result["meta"], "latency_ms")) def test_explain_result_accepts_result_alias() raises: diff --git a/tests/test_stdio_contract.mojo b/tests/test_stdio_contract.mojo @@ -16,6 +16,13 @@ def _run_hyf(request_json: String) raises -> Value: return loads(output) +def _has_key(value: Value, key: String) -> Bool: + for candidate in value.object_keys(): + if candidate == key: + return True + return False + + def test_status_success() raises: var response = _run_hyf( '{"version":1,"request_id":"status-proc-1","trace_id":"trace-status-proc-1","capability":"sys.status","input":{}}' @@ -66,6 +73,20 @@ def test_assisted_request_fails_explicitly() raises: assert_equal(response["error"]["code"].string_value(), "backend_unavailable") +def test_semantic_rank_exports_heuristic_score_without_latency() raises: + var response = _run_hyf( + '{"version":1,"request_id":"rank-proc-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_true(response["ok"].bool_value()) + assert_equal( + response["output"]["scored_candidates"][0]["heuristic_score"].int_value(), + 102, + ) + assert_true(not _has_key(response["output"]["scored_candidates"][0], "score")) + assert_true(not _has_key(response["meta"], "latency_ms")) + + def test_strict_query_rewrite_failure() raises: var response = _run_hyf( '{"version":1,"request_id":"rewrite-bad-proc-1","capability":"query_rewrite","input":{"text":"eggs near me","tone":"brief"}}'