commit 593a74a12f44d1e0f9188e269781bbbf4456a473
parent b735c5353090c32b337d309f9eade01a8a44c630
Author: triesap <tyson@radroots.org>
Date: Thu, 18 Jun 2026 20:17:56 -0700
provider: remove parser sentinel matching
Diffstat:
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/src/hyf_provider/result.mojo b/src/hyf_provider/result.mojo
@@ -128,13 +128,15 @@ def parse_query_analysis_json(value: Value) raises -> QueryAnalysis:
raise Error("provider_schema_invalid")
+def _load_query_analysis_content_json(text: String) raises -> Value:
+ try:
+ return loads(text)
+ except:
+ raise Error("provider_invalid_json")
+
+
def parse_query_analysis_from_chat_completion(
response: Value,
) raises -> QueryAnalysis:
var text = extract_chat_completion_text(response)
- try:
- return parse_query_analysis_json(loads(text))
- except e:
- if String(e).find("provider_schema_invalid") >= 0:
- raise Error("provider_schema_invalid")
- raise Error("provider_invalid_json")
+ return parse_query_analysis_json(_load_query_analysis_content_json(text))
diff --git a/tests/test_provider_adapter.mojo b/tests/test_provider_adapter.mojo
@@ -76,18 +76,22 @@ def _analysis_json_text() -> String:
)
-def _chat_completion_response() raises -> Value:
+def _chat_completion_response_with_content(content: String) raises -> Value:
var response = loads("{}")
var choices = loads("[]")
var choice = loads("{}")
var message = loads("{}")
- message.set("content", Value(_analysis_json_text()))
+ message.set("content", Value(content))
choice.set("message", message)
choices.append(choice)
response.set("choices", choices)
return response^
+def _chat_completion_response() raises -> Value:
+ return _chat_completion_response_with_content(_analysis_json_text())
+
+
def _assert_query_rewrite_failure(
message: String, expected_kind: String, expected_reason: String
) raises:
@@ -104,6 +108,17 @@ def _assert_health_failure(
assert_equal(failure.reason, expected_reason)
+def _assert_chat_completion_parse_failure(
+ response: Value, expected_error: String
+) raises:
+ try:
+ _ = parse_query_analysis_from_chat_completion(response)
+ except e:
+ assert_equal(String(e), expected_error)
+ return
+ raise Error("expected chat completion parse failure")
+
+
def test_provider_config_maps_runtime_config() raises:
var config = max_local_provider_config_from_runtime(
_provider_runtime_config()
@@ -243,6 +258,20 @@ def test_chat_completion_response_parses_query_analysis() raises:
assert_equal(analysis.extracted_filters.local_intent, True)
+def test_chat_completion_response_rejects_invalid_json_content() raises:
+ _assert_chat_completion_parse_failure(
+ _chat_completion_response_with_content("not json"),
+ "provider_invalid_json",
+ )
+
+
+def test_chat_completion_response_rejects_schema_invalid_content() raises:
+ _assert_chat_completion_parse_failure(
+ _chat_completion_response_with_content('{"original_text":"eggs"}'),
+ "provider_schema_invalid",
+ )
+
+
def test_chat_completion_response_rejects_empty_choices() raises:
with assert_raises():
_ = parse_query_analysis_from_chat_completion(loads('{"choices":[]}'))