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:
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"}}'