hyf

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

commit 833296344231724ac46fe6f7b1c8fe6ed70d4fe5
parent c26a9264e6ec0f7a8de8f3389c03228f4d74dd1e
Author: triesap <tyson@radroots.org>
Date:   Fri, 19 Jun 2026 03:56:49 -0700

provider: classify unknown max transport failures

- add unknown transport outcomes for generic max-local client failures
- keep timeout classification tied to elapsed request budget exhaustion
- extend the mojo max-local stub with malformed response modes
- cover health and chat unknown transport boundaries in provider tests

Diffstat:
Mpixi.toml | 2+-
Msrc/hyf_provider/client.mojo | 2+-
Mtests/max_local_process_helper.mojo | 8++++++++
Mtests/test_provider_adapter.mojo | 45+++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/pixi.toml b/pixi.toml @@ -23,7 +23,7 @@ test-unit = "mojo -I src tests/test_hyf.mojo" test-runtime = "mojo -I src tests/test_runtime_paths.mojo" test-repo-local-process = "mojo -I src tests/test_repo_local_process_contract.mojo" test-stdio = "mojo -I src tests/test_stdio_contract.mojo" -test-provider-adapter = "mojo -I src tests/test_provider_adapter.mojo" +test-provider-adapter = "mojo -I src -I tests tests/test_provider_adapter.mojo" smoke-max-local = "mojo -I src -I tests tests/max_local_operator_smoke.mojo" test-runtime-contract = { depends-on = [ "test-runtime", diff --git a/src/hyf_provider/client.mojo b/src/hyf_provider/client.mojo @@ -73,7 +73,7 @@ def _transport_exception_reason( ) -> String: if _elapsed_ms_since(start_ns) >= request_timeout_ms: return "timeout" - return "connection_failed" + return "unknown_transport" def make_max_local_http_client(config: MaxLocalProviderConfig) -> HttpClient: diff --git a/tests/max_local_process_helper.mojo b/tests/max_local_process_helper.mojo @@ -117,11 +117,17 @@ def _send(mut stream: TcpStream, status: Int, body: String) raises: stream.write_all(Span[UInt8, _](response.as_bytes())) +def _send_raw(mut stream: TcpStream, response: String) raises: + stream.write_all(Span[UInt8, _](response.as_bytes())) + + def _handle_health(mut stream: TcpStream, mode: String) raises: if mode == "health_non_2xx": _send(stream, 503, '{"status":"unavailable"}') elif mode == "health_timeout": usleep(1_000_000) + elif mode == "health_malformed_http": + _send_raw(stream, "not an http response\r\n\r\n") elif mode == "query_rewrite_remaining_deadline_timeout": usleep(200_000) _send(stream, 200, '{"status":"ok"}') @@ -168,6 +174,8 @@ def _handle_chat_completions(mut stream: TcpStream, mode: String) raises: elif mode == "query_rewrite_remaining_deadline_timeout": usleep(400_000) _send(stream, 200, _chat_completion(_query_rewrite_analysis())) + elif mode == "query_rewrite_malformed_http": + _send_raw(stream, "not an http response\r\n\r\n") else: _send(stream, 500, '{"error":"unsupported_mode"}') diff --git a/tests/test_provider_adapter.mojo b/tests/test_provider_adapter.mojo @@ -26,6 +26,10 @@ from hyf_runtime.config import ( HyfServiceRuntimeConfig, default_loaded_runtime_config, ) +from max_local_process_helper import ( + reserve_loopback_port, + spawn_max_local_stub, +) def _provider_runtime_config() -> HyfLoadedRuntimeConfig: @@ -64,6 +68,15 @@ def _provider_config() -> MaxLocalProviderConfig: ) +def _provider_config_for_port(port: Int) -> MaxLocalProviderConfig: + return MaxLocalProviderConfig( + base_url="http://127.0.0.1:" + String(port) + "/v1/", + health_url="http://127.0.0.1:" + String(port) + "/health", + model="max-local-query-rewrite", + request_timeout_ms=15000, + ) + + def _invalid_base_url_provider_config() -> MaxLocalProviderConfig: return MaxLocalProviderConfig( base_url="ftp://127.0.0.1:8000/v1/", @@ -247,6 +260,38 @@ def test_max_local_transport_boundary_rejects_invalid_health_url() raises: assert_equal(outcome.failure.value().reason, "invalid_url") +def test_max_local_transport_boundary_reports_unknown_chat_transport() raises: + var provider_port = reserve_loopback_port() + var provider_stub = spawn_max_local_stub( + provider_port, "query_rewrite_malformed_http", 1 + ) + var outcome = post_max_local_chat_completion( + _provider_config_for_port(provider_port), loads("{}") + ) + + assert_true(outcome.failure) + assert_true(not outcome.response) + assert_equal(outcome.failure.value().kind, "transport") + assert_equal(outcome.failure.value().reason, "unknown_transport") + + provider_stub.wait() + + +def test_max_local_transport_boundary_reports_unknown_health_transport() raises: + var provider_port = reserve_loopback_port() + var provider_stub = spawn_max_local_stub( + provider_port, "health_malformed_http", 1 + ) + var outcome = get_max_local_health(_provider_config_for_port(provider_port)) + + assert_true(outcome.failure) + assert_true(not outcome.response) + assert_equal(outcome.failure.value().kind, "transport") + assert_equal(outcome.failure.value().reason, "unknown_transport") + + provider_stub.wait() + + def test_query_rewrite_request_body_sets_schema_contract() raises: var context = default_request_context() context.return_provenance = True