commit 856b0e22e424151eaa9868fa282d61aec6a3f29b
parent b10c6d6cafbb8c7ff809061fca0e4d1e402fcd79
Author: triesap <tyson@radroots.org>
Date: Mon, 21 Sep 2026 13:56:45 +0000
core: add culinary-use semantic scoring
Diffstat:
2 files changed, 31 insertions(+), 0 deletions(-)
diff --git a/src/hyf_application/match_semantic.mojo b/src/hyf_application/match_semantic.mojo
@@ -19,3 +19,18 @@ def gated_semantic_suitability(
def unknown_evidence_is_midpoint_score() -> Bool:
return False
+
+
+from hyf_assist.evaluator import TypedAnswer, normalize_score
+
+
+def culinary_use_score(
+ answer: TypedAnswer, levels: Int, evidence_count: Int, required_evidence: Int
+) raises -> Float64:
+ if not evidence_sufficient(evidence_count, required_evidence):
+ raise Error("evidence_insufficient")
+ return normalize_score(answer, levels)
+
+
+def culinary_score_affects_feasibility() -> Bool:
+ return False
diff --git a/tests/test_application.mojo b/tests/test_application.mojo
@@ -626,3 +626,19 @@ def test_semantic_suitability_gated_on_evidence() raises:
assert_equal(gated_semantic_suitability(3, 0, 1).result, "unknown")
assert_equal(gated_semantic_suitability(3, 0, 1).reason, "evidence_insufficient")
assert_true(not unknown_evidence_is_midpoint_score())
+
+
+from hyf_application.match_semantic import (
+ culinary_score_affects_feasibility,
+ culinary_use_score,
+)
+from hyf_assist.evaluator import typed_score
+
+
+def test_culinary_use_semantic_scoring_gated() raises:
+ var answer = typed_score("culinary_fit", 2, 3, 1.0)
+ assert_equal(culinary_use_score(answer, 3, 1, 1), 1.0)
+ assert_equal(culinary_use_score(typed_score("culinary_fit", 1, 3, 1.0), 3, 1, 1), 0.5)
+ with assert_raises():
+ _ = culinary_use_score(answer, 3, 0, 1)
+ assert_true(not culinary_score_affects_feasibility())