commit 9cb37af4ec8e8b01340d28ed7b99dc2c3a08f5ef
parent 46cf5906392d873058f27416b72dacfc0b03639c
Author: triesap <tyson@radroots.org>
Date: Sun, 12 Apr 2026 01:25:11 +0000
assist: route query_rewrite through fake bridge
Diffstat:
15 files changed, 515 insertions(+), 28 deletions(-)
diff --git a/src/hyf_assist/bridge.mojo b/src/hyf_assist/bridge.mojo
@@ -1,8 +1,17 @@
from mojson import Value, loads
+from hyf_core.capabilities.query_analysis import (
+ ExtractedFilters,
+ QueryAnalysis,
+ analyze_query_text,
+ copy_string_list,
+)
+from hyf_core.request_context import RequestContext
from hyf_assist.contract import (
+ AssistQueryRewriteResult,
AssistBridgeStatus,
assist_bridge_contract_version,
+ assist_bridge_fake_endpoint_prefix,
assist_bridge_runtime_id,
assist_bridge_supported_business_capabilities,
)
@@ -13,13 +22,25 @@ from hyf_runtime.config import (
)
+def _fake_bridge_endpoint_is_reachable(endpoint: String) -> Bool:
+ var trimmed = String(endpoint).strip()
+ return trimmed.startswith(assist_bridge_fake_endpoint_prefix())
+
+
def resolve_assist_bridge_status(
config: HyfLoadedRuntimeConfig,
) -> AssistBridgeStatus:
var configured = assist_bridge_configured(config)
var state = "disabled_by_runtime_config"
+ var reachable = False
if assisted_execution_enabled(config):
- state = "unavailable" if configured else "unconfigured"
+ if configured:
+ reachable = _fake_bridge_endpoint_is_reachable(
+ config.effective.assist.endpoint
+ )
+ state = "ready" if reachable else "unavailable"
+ else:
+ state = "unconfigured"
return AssistBridgeStatus(
id=assist_bridge_runtime_id(),
@@ -29,7 +50,7 @@ def resolve_assist_bridge_status(
endpoint=String(config.effective.assist.endpoint),
backend_kind="fake",
configured=configured,
- reachable=False,
+ reachable=reachable,
state=state,
fallback_contract="deterministic_baseline_preserved",
supported_business_capabilities=assist_bridge_supported_business_capabilities(),
@@ -86,3 +107,45 @@ def serialize_assist_bridge_status_value(
capabilities.append(Value(String(capability)))
value.set("supported_business_capabilities", capabilities)
return value^
+
+
+def execute_query_rewrite_via_assist_bridge(
+ bridge_status: AssistBridgeStatus,
+ text: String,
+ context: RequestContext,
+) raises -> AssistQueryRewriteResult:
+ if not bridge_status.reachable:
+ raise Error(
+ "assist bridge '" + String(bridge_status.id) + "' is unavailable"
+ )
+
+ var analysis = analyze_query_text(text, context)
+ var normalization_signals = copy_string_list(
+ analysis.normalization_signals
+ )
+ normalization_signals.append("assist_bridge_fake")
+ var ranking_hints = copy_string_list(analysis.ranking_hints)
+ ranking_hints.append("assist_bridge_route")
+
+ return AssistQueryRewriteResult(
+ analysis=QueryAnalysis(
+ original_text=String(analysis.original_text),
+ normalized_text=String(analysis.normalized_text),
+ rewritten_text=String(analysis.rewritten_text),
+ query_terms=copy_string_list(analysis.query_terms),
+ normalization_signals=normalization_signals^,
+ ranking_hints=ranking_hints^,
+ extracted_filters=ExtractedFilters(
+ local_intent=analysis.extracted_filters.local_intent,
+ fulfillment=String(
+ analysis.extracted_filters.fulfillment
+ ),
+ time_window=String(analysis.extracted_filters.time_window),
+ ),
+ ),
+ provider="fake",
+ route="assist_bridge.query_rewrite.fake",
+ model="fake_query_rewrite_v1",
+ latency_ms=1,
+ schema_version=1,
+ )
diff --git a/src/hyf_assist/contract.mojo b/src/hyf_assist/contract.mojo
@@ -1,5 +1,7 @@
from std.collections import List
+from hyf_core.capabilities.query_analysis import QueryAnalysis
+
def assist_bridge_contract_version() -> Int:
return 1
@@ -15,6 +17,10 @@ def assist_bridge_supported_business_capabilities() -> List[String]:
return capabilities^
+def assist_bridge_fake_endpoint_prefix() -> String:
+ return "hyf-assistd://fake"
+
+
@fieldwise_init
struct AssistBridgeStatus(Copyable, Movable):
var id: String
@@ -28,3 +34,13 @@ struct AssistBridgeStatus(Copyable, Movable):
var state: String
var fallback_contract: String
var supported_business_capabilities: List[String]
+
+
+@fieldwise_init
+struct AssistQueryRewriteResult(Copyable, Movable):
+ var analysis: QueryAnalysis
+ var provider: String
+ var route: String
+ var model: String
+ var latency_ms: Int
+ var schema_version: Int
diff --git a/src/hyf_core/backends/selector.mojo b/src/hyf_core/backends/selector.mojo
@@ -4,6 +4,9 @@ from hyf_core.backends.heuristic_backend import (
backend_name as heuristic_backend_name,
execute_capability as execute_heuristic_capability,
)
+from hyf_core.capabilities.registry import (
+ execute_registered_business_capability_with_runtime_config,
+)
from hyf_core.errors import (
CapabilityResult,
backend_unavailable_error,
@@ -13,6 +16,7 @@ from hyf_core.request_context import (
RequestContext,
assisted_execution_requested,
)
+from hyf_runtime.config import HyfLoadedRuntimeConfig
@fieldwise_init
@@ -45,3 +49,17 @@ def execute_capability(
return execute_heuristic_capability(capability_id, input, context)
return failed_capability(backend_unavailable_error(selection.backend_name))
+
+
+def execute_capability_with_runtime_config(
+ capability_id: String,
+ input: Value,
+ context: RequestContext,
+ runtime_config: HyfLoadedRuntimeConfig,
+) raises -> CapabilityResult:
+ if assisted_execution_requested(context) and capability_id != "query_rewrite":
+ return failed_capability(backend_unavailable_error("assisted_execution"))
+
+ return execute_registered_business_capability_with_runtime_config(
+ capability_id, input, context, runtime_config
+ )
diff --git a/src/hyf_core/capabilities/query_analysis.mojo b/src/hyf_core/capabilities/query_analysis.mojo
@@ -1,4 +1,4 @@
-from std.collections import List
+from std.collections import List, Optional
from mojson import Value, loads
@@ -357,6 +357,12 @@ def build_deterministic_meta(
return CoreResponseMeta(
execution_mode="deterministic",
backend="heuristic",
+ provider=None,
+ route=None,
+ model=None,
+ latency_ms=None,
+ schema_version=Optional[Int](1),
+ prompt_version=None,
provenance=ExecutionProvenance(
kind="deterministic",
signal_tags=copy_string_list(signal_tags),
@@ -369,5 +375,11 @@ def build_deterministic_meta(
return CoreResponseMeta(
execution_mode="deterministic",
backend="heuristic",
+ provider=None,
+ route=None,
+ model=None,
+ latency_ms=None,
+ schema_version=Optional[Int](1),
+ prompt_version=None,
provenance=None,
)
diff --git a/src/hyf_core/capabilities/query_rewrite.mojo b/src/hyf_core/capabilities/query_rewrite.mojo
@@ -1,7 +1,12 @@
-from std.collections import List
+from std.collections import List, Optional
from mojson import Value, loads
+from hyf_assist.bridge import (
+ execute_query_rewrite_via_assist_bridge,
+ resolve_assist_bridge_status,
+)
+from hyf_assist.contract import AssistQueryRewriteResult
from hyf_core.capabilities.query_analysis import (
QueryAnalysis,
QueryRewriteRequest,
@@ -18,8 +23,14 @@ from hyf_core.errors import (
invalid_input_error,
successful_capability,
)
-from hyf_core.provenance import ProvenanceSourceRef
-from hyf_core.request_context import RequestContext
+from hyf_core.provenance import (
+ CoreResponseMeta,
+ ExecutionProvenance,
+ ProvenanceFallback,
+ ProvenanceSourceRef,
+)
+from hyf_core.request_context import RequestContext, assisted_execution_requested
+from hyf_runtime.config import HyfLoadedRuntimeConfig
def _build_output(analysis: QueryAnalysis) raises -> Value:
@@ -40,6 +51,80 @@ def _build_output(analysis: QueryAnalysis) raises -> Value:
return output^
+def _base_source_refs(
+ context: RequestContext, capability_name: String
+) -> List[ProvenanceSourceRef]:
+ var source_refs = List[ProvenanceSourceRef]()
+ source_refs.append(
+ ProvenanceSourceRef(
+ source_kind="local_input",
+ source_ref=capability_name + ":input",
+ )
+ )
+ if context.scope:
+ source_refs.append(
+ ProvenanceSourceRef(
+ source_kind="request_scope",
+ source_ref="request_context.scope",
+ )
+ )
+ return source_refs^
+
+
+def _build_assisted_meta(
+ context: RequestContext, result: AssistQueryRewriteResult
+) -> CoreResponseMeta:
+ var provenance: Optional[ExecutionProvenance] = None
+ if context.return_provenance:
+ provenance = ExecutionProvenance(
+ kind="assisted",
+ signal_tags=query_signal_tags(result.analysis),
+ source_refs=_base_source_refs(context, "query_rewrite"),
+ fallback=None,
+ evidence_set_id=None,
+ )
+
+ return CoreResponseMeta(
+ execution_mode="assisted",
+ backend="assist_bridge",
+ provider=Optional[String](String(result.provider)),
+ route=Optional[String](String(result.route)),
+ model=Optional[String](String(result.model)),
+ latency_ms=Optional[Int](result.latency_ms),
+ schema_version=Optional[Int](result.schema_version),
+ prompt_version=None,
+ provenance=provenance^,
+ )
+
+
+def _build_deterministic_fallback_meta(
+ context: RequestContext, analysis: QueryAnalysis, reason: String
+) -> CoreResponseMeta:
+ var provenance: Optional[ExecutionProvenance] = None
+ if context.return_provenance:
+ provenance = ExecutionProvenance(
+ kind="deterministic",
+ signal_tags=query_signal_tags(analysis),
+ source_refs=_base_source_refs(context, "query_rewrite"),
+ fallback=ProvenanceFallback(
+ fallback_kind="assist_bridge", reason=String(reason)
+ ),
+ evidence_set_id=None,
+ )
+
+ return CoreResponseMeta(
+ execution_mode="deterministic",
+ backend="heuristic",
+ provider=None,
+ route=None,
+ model=None,
+ latency_ms=None,
+ schema_version=Optional[Int](1),
+ prompt_version=None,
+ provenance=provenance^,
+ )
+
+
def execute_query_rewrite(
input: Value, context: RequestContext
) raises -> CapabilityResult:
@@ -59,3 +144,34 @@ def execute_query_rewrite(
)
except e:
return failed_capability(invalid_input_error(String(e)))
+
+
+def execute_query_rewrite_with_runtime_config(
+ input: Value,
+ context: RequestContext,
+ runtime_config: HyfLoadedRuntimeConfig,
+) raises -> CapabilityResult:
+ try:
+ var request: QueryRewriteRequest = parse_query_rewrite_request(input)
+ if assisted_execution_requested(context):
+ var bridge_status = resolve_assist_bridge_status(runtime_config)
+ if bridge_status.reachable:
+ var assisted_result = execute_query_rewrite_via_assist_bridge(
+ bridge_status, request.text, context
+ )
+ return successful_capability(
+ _build_output(assisted_result.analysis),
+ meta=_build_assisted_meta(context, assisted_result),
+ )
+
+ var fallback_analysis = analyze_query_text(request.text, context)
+ return successful_capability(
+ _build_output(fallback_analysis),
+ meta=_build_deterministic_fallback_meta(
+ context, fallback_analysis, bridge_status.state
+ ),
+ )
+
+ return execute_query_rewrite(input, context)
+ except e:
+ return failed_capability(invalid_input_error(String(e)))
diff --git a/src/hyf_core/capabilities/registry.mojo b/src/hyf_core/capabilities/registry.mojo
@@ -4,6 +4,9 @@ from mojson import Value
from hyf_core.capabilities.explain_result import execute_explain_result
from hyf_core.capabilities.query_rewrite import execute_query_rewrite
+from hyf_core.capabilities.query_rewrite import (
+ execute_query_rewrite_with_runtime_config,
+)
from hyf_core.capabilities.semantic_rank import execute_semantic_rank
from hyf_core.errors import (
CapabilityResult,
@@ -11,6 +14,7 @@ from hyf_core.errors import (
failed_capability,
)
from hyf_core.request_context import RequestContext
+from hyf_runtime.config import HyfLoadedRuntimeConfig
@fieldwise_init
@@ -193,3 +197,18 @@ def execute_registered_business_capability(
)
return failed_capability(capability_not_implemented_error(capability_id))
+
+
+def execute_registered_business_capability_with_runtime_config(
+ capability_id: String,
+ input: Value,
+ context: RequestContext,
+ runtime_config: HyfLoadedRuntimeConfig,
+) raises -> CapabilityResult:
+ if capability_id == "query_rewrite":
+ return execute_query_rewrite_with_runtime_config(
+ input, context, runtime_config
+ )
+ return execute_registered_business_capability(
+ capability_id, input, context
+ )
diff --git a/src/hyf_core/metadata.mojo b/src/hyf_core/metadata.mojo
@@ -41,5 +41,5 @@ def current_build_identity() raises -> HyfBuildIdentity:
protocol_version=hyf_protocol_version(),
default_execution_mode="deterministic",
deterministic_execution_available=True,
- assisted_execution_available=False,
+ assisted_execution_available=True,
)
diff --git a/src/hyf_core/provenance.mojo b/src/hyf_core/provenance.mojo
@@ -26,6 +26,12 @@ struct ExecutionProvenance(Copyable, Movable):
struct CoreResponseMeta(Copyable, Movable):
var execution_mode: String
var backend: String
+ var provider: Optional[String]
+ var route: Optional[String]
+ var model: Optional[String]
+ var latency_ms: Optional[Int]
+ var schema_version: Optional[Int]
+ var prompt_version: Optional[String]
var provenance: Optional[ExecutionProvenance]
@@ -33,5 +39,11 @@ def deterministic_response_meta() -> CoreResponseMeta:
return CoreResponseMeta(
execution_mode="deterministic",
backend="heuristic",
+ provider=None,
+ route=None,
+ model=None,
+ latency_ms=None,
+ schema_version=None,
+ prompt_version=None,
provenance=None,
)
diff --git a/src/hyf_stdio/control/status.mojo b/src/hyf_stdio/control/status.mojo
@@ -89,15 +89,15 @@ def build_status_output_with_runtime_context(
var execution_mode_request_behavior = loads("{}")
execution_mode_request_behavior.set("deterministic", Value("execute"))
+ var assisted_request_behavior = "bridge_unavailable"
+ if assist_bridge.state == "ready":
+ assisted_request_behavior = "execute"
+ elif assist_bridge.state == "disabled_by_runtime_config":
+ assisted_request_behavior = "disabled_by_runtime_config"
+ elif assist_bridge.state == "unconfigured":
+ assisted_request_behavior = "bridge_unconfigured"
execution_mode_request_behavior.set(
- "assisted",
- Value("disabled_by_runtime_config")
- if assist_bridge.state == "disabled_by_runtime_config"
- else (
- Value("bridge_unconfigured")
- if assist_bridge.state == "unconfigured"
- else Value("bridge_unavailable")
- ),
+ "assisted", Value(String(assisted_request_behavior))
)
output.set(
"execution_mode_request_behavior",
diff --git a/src/hyf_stdio/meta.mojo b/src/hyf_stdio/meta.mojo
@@ -50,6 +50,20 @@ 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)))
+ if meta.provider:
+ value.set("provider", Value(String(meta.provider.value())))
+ if meta.route:
+ value.set("route", Value(String(meta.route.value())))
+ if meta.model:
+ value.set("model", Value(String(meta.model.value())))
+ if meta.latency_ms:
+ value.set("latency_ms", Value(meta.latency_ms.value()))
+ if meta.schema_version:
+ value.set("schema_version", Value(meta.schema_version.value()))
+ if meta.prompt_version:
+ value.set(
+ "prompt_version", Value(String(meta.prompt_version.value()))
+ )
if meta.provenance:
value.set("provenance", _serialize_provenance(meta.provenance.value()))
return value^
diff --git a/src/hyf_stdio/server.mojo b/src/hyf_stdio/server.mojo
@@ -13,7 +13,7 @@ from hyf_runtime.startup import (
resolve_startup_context_from_process,
)
from hyf_core.backends.selector import (
- execute_capability as execute_backend_capability,
+ execute_capability_with_runtime_config as execute_backend_capability_with_runtime_config,
)
from hyf_core.capabilities.registry import (
canonical_business_capability,
@@ -177,16 +177,23 @@ def _dispatch_capability_result(
def _dispatch_business_capability(
- request: WireRequest, request_id: String
+ request: WireRequest,
+ request_id: String,
+ runtime_context: RuntimeStartupContext,
) raises -> String:
- var result = execute_backend_capability(
- request.capability, request.input.clone(), request.context.copy()
+ var result = execute_backend_capability_with_runtime_config(
+ request.capability,
+ request.input.clone(),
+ request.context.copy(),
+ runtime_context.config,
)
return _dispatch_capability_result(request_id, request.trace_id, result)
def _route_business_capability(
- request: WireRequest, request_id: String
+ request: WireRequest,
+ request_id: String,
+ runtime_context: RuntimeStartupContext,
) raises -> String:
var capability = canonical_business_capability(request.capability)
if not capability:
@@ -197,7 +204,9 @@ def _route_business_capability(
return encode_error(_disabled_response(request))
if descriptor.implemented and descriptor.callable:
- return _dispatch_business_capability(request, request_id)
+ return _dispatch_business_capability(
+ request, request_id, runtime_context
+ )
return encode_error(_unavailable_response(request))
@@ -246,7 +255,9 @@ def handle_request_with_runtime_context_and_control_builders[
meta=None,
)
)
- return _route_business_capability(request.copy(), request_id)
+ return _route_business_capability(
+ request.copy(), request_id, runtime_context
+ )
except e:
_emit_internal_diagnostic(
request_id,
diff --git a/tests/fixtures/v1/scenarios/assisted_backend_unavailable.json b/tests/fixtures/v1/scenarios/assisted_backend_unavailable.json
@@ -2,7 +2,7 @@
"fixture_id": "assisted_backend_unavailable",
"fixture_namespace": "radroots-canonical-hyf-v1",
"schema_version": 1,
- "description": "Explicit assisted execution requests fail with a bounded unavailable-backend error.",
+ "description": "Explicit assisted query rewrite requests fall back to deterministic execution when the assist bridge is unavailable.",
"request": {
"version": 1,
"request_id": "assisted-fixture-1",
@@ -15,8 +15,21 @@
}
},
"expected": {
- "ok": false,
- "error_code": "backend_unavailable",
- "message_contains": "assisted_execution"
+ "ok": true,
+ "equals": {
+ "version": 1,
+ "request_id": "assisted-fixture-1",
+ "output.rewritten_text": "apples",
+ "meta.execution_mode": "deterministic",
+ "meta.backend": "heuristic",
+ "meta.schema_version": 1
+ },
+ "absent_paths": [
+ "error",
+ "meta.provider",
+ "meta.route",
+ "meta.model",
+ "meta.provenance"
+ ]
}
}
diff --git a/tests/fixtures/v1/scenarios/status_ok.json b/tests/fixtures/v1/scenarios/status_ok.json
@@ -24,7 +24,7 @@
"output.build_identity.protocol_version": 1,
"output.build_identity.default_execution_mode": "deterministic",
"output.build_identity.deterministic_execution_available": true,
- "output.build_identity.assisted_execution_available": false,
+ "output.build_identity.assisted_execution_available": true,
"output.daemon": "hyfd",
"output.transport": "stdio",
"output.request_framing": "newline_delimited_json",
diff --git a/tests/test_hyf.mojo b/tests/test_hyf.mojo
@@ -845,7 +845,7 @@ def test_missing_input_returns_invalid_request() raises:
)
-def test_assisted_request_returns_backend_unavailable() raises:
+def test_assisted_request_falls_back_deterministically_when_bridge_is_unavailable() raises:
var result = _dispatch(
load_scenario_request_json(
"scenarios/assisted_backend_unavailable.json"
diff --git a/tests/test_stdio_contract.mojo b/tests/test_stdio_contract.mojo
@@ -32,6 +32,13 @@ def _has_key(value: Value, key: String) -> Bool:
return False
+def _array_contains_string(value: Value, expected: String) raises -> Bool:
+ for item in value.array_items():
+ if item.is_string() and item.string_value() == expected:
+ return True
+ return False
+
+
def test_status_success() raises:
var response = run_hyf_stdio(
load_scenario_request_json("scenarios/status_ok.json")
@@ -476,6 +483,192 @@ def test_capabilities_reports_configured_fake_bridge_truthfully() raises:
)
+def test_capabilities_reports_ready_fake_bridge_truthfully() raises:
+ with TemporaryDirectory() as temp_dir:
+ var startup_config_path = Path(temp_dir) / "explicit-hyf-config.toml"
+ startup_config_path.write_text(
+ '[service]\ntransport = "stdio"\n\n'
+ '[runtime]\ndefault_execution_mode = "deterministic"\nallow_assisted = true\n\n'
+ '[assist]\nbridge_enabled = true\ntransport = "stdio"\nendpoint = "hyf-assistd://fake-query-rewrite"\n'
+ )
+ with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"):
+ with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir):
+ var response = run_stdio_entrypoint(
+ "src/main.mojo",
+ load_scenario_request_json("scenarios/capabilities_ok.json"),
+ "--config",
+ startup_config_path.__fspath__(),
+ )
+
+ assert_true(response["ok"].bool_value())
+ assert_equal(
+ response["output"]["business_capabilities"][0][
+ "assisted_execution"
+ ].string_value(),
+ "enabled",
+ )
+ assert_equal(
+ response["output"]["business_capabilities"][0][
+ "assisted_backend_available"
+ ].bool_value(),
+ True,
+ )
+ assert_equal(
+ response["output"]["assisted_backend_capabilities"][0][
+ "state"
+ ].string_value(),
+ "ready",
+ )
+
+
+def test_status_reports_ready_fake_bridge_truthfully() raises:
+ with TemporaryDirectory() as temp_dir:
+ var startup_config_path = Path(temp_dir) / "explicit-hyf-config.toml"
+ startup_config_path.write_text(
+ '[service]\ntransport = "stdio"\n\n'
+ '[runtime]\ndefault_execution_mode = "deterministic"\nallow_assisted = true\n\n'
+ '[assist]\nbridge_enabled = true\ntransport = "stdio"\nendpoint = "hyf-assistd://fake-query-rewrite"\n'
+ )
+ with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"):
+ with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir):
+ var response = run_stdio_entrypoint(
+ "src/main.mojo",
+ load_scenario_request_json("scenarios/status_ok.json"),
+ "--config",
+ startup_config_path.__fspath__(),
+ )
+
+ assert_true(response["ok"].bool_value())
+ assert_equal(
+ response["output"]["build_identity"][
+ "assisted_execution_available"
+ ].bool_value(),
+ True,
+ )
+ assert_equal(
+ response["output"]["execution_mode_request_behavior"][
+ "assisted"
+ ].string_value(),
+ "execute",
+ )
+ assert_equal(
+ response["output"]["assist_bridge"]["state"]
+ .string_value(),
+ "ready",
+ )
+ assert_equal(
+ response["output"]["backend_reachability"][
+ "assisted_backend"
+ ].string_value(),
+ "ready",
+ )
+
+
+def test_query_rewrite_uses_fake_assist_bridge_when_requested() raises:
+ with TemporaryDirectory() as temp_dir:
+ var startup_config_path = Path(temp_dir) / "explicit-hyf-config.toml"
+ startup_config_path.write_text(
+ '[service]\ntransport = "stdio"\n\n'
+ '[runtime]\ndefault_execution_mode = "deterministic"\nallow_assisted = true\n\n'
+ '[assist]\nbridge_enabled = true\ntransport = "stdio"\nendpoint = "hyf-assistd://fake-query-rewrite"\n'
+ )
+ with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"):
+ with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir):
+ var response = run_stdio_entrypoint(
+ "src/main.mojo",
+ '{"version":1,"request_id":"rewrite-assisted-fake-1","trace_id":"rewrite-assisted-fake-1","capability":"query_rewrite","context":{"execution_mode_preference":"assisted","return_provenance":true},"input":{"query":"apples near me with weekend pickup"}}',
+ "--config",
+ startup_config_path.__fspath__(),
+ )
+
+ assert_true(response["ok"].bool_value())
+ assert_equal(
+ response["meta"]["execution_mode"].string_value(),
+ "assisted",
+ )
+ assert_equal(
+ response["meta"]["backend"].string_value(),
+ "assist_bridge",
+ )
+ assert_equal(
+ response["meta"]["provider"].string_value(),
+ "fake",
+ )
+ assert_equal(
+ response["meta"]["route"].string_value(),
+ "assist_bridge.query_rewrite.fake",
+ )
+ assert_equal(
+ response["meta"]["model"].string_value(),
+ "fake_query_rewrite_v1",
+ )
+ assert_equal(
+ Int(response["meta"]["schema_version"].int_value()),
+ 1,
+ )
+ assert_equal(
+ Int(response["meta"]["latency_ms"].int_value()), 1
+ )
+ assert_equal(
+ response["meta"]["provenance"]["kind"].string_value(),
+ "assisted",
+ )
+ assert_equal(
+ response["output"]["rewritten_text"].string_value(),
+ "apples",
+ )
+ assert_true(
+ _array_contains_string(
+ response["output"]["normalization_signals"],
+ "assist_bridge_fake",
+ )
+ )
+
+
+def test_query_rewrite_falls_back_deterministically_when_bridge_is_unavailable() raises:
+ with TemporaryDirectory() as temp_dir:
+ var startup_config_path = Path(temp_dir) / "explicit-hyf-config.toml"
+ startup_config_path.write_text(
+ '[service]\ntransport = "stdio"\n\n'
+ '[runtime]\ndefault_execution_mode = "deterministic"\nallow_assisted = true\n\n'
+ '[assist]\nbridge_enabled = true\ntransport = "stdio"\nendpoint = "hyf-assistd://local"\n'
+ )
+ with ScopedEnvVar(HYF_PATHS_PROFILE_ENV, "repo_local"):
+ with ScopedEnvVar(HYF_PATHS_REPO_LOCAL_ROOT_ENV, temp_dir):
+ var response = run_stdio_entrypoint(
+ "src/main.mojo",
+ '{"version":1,"request_id":"rewrite-assisted-fallback-1","trace_id":"rewrite-assisted-fallback-1","capability":"query_rewrite","context":{"execution_mode_preference":"assisted","return_provenance":true},"input":{"query":"apples near me with weekend pickup"}}',
+ "--config",
+ startup_config_path.__fspath__(),
+ )
+
+ assert_true(response["ok"].bool_value())
+ assert_equal(
+ response["meta"]["execution_mode"].string_value(),
+ "deterministic",
+ )
+ assert_equal(
+ response["meta"]["backend"].string_value(),
+ "heuristic",
+ )
+ assert_true(not _has_key(response["meta"], "provider"))
+ assert_equal(
+ response["meta"]["provenance"]["fallback"][
+ "fallback_kind"
+ ].string_value(),
+ "assist_bridge",
+ )
+ assert_equal(
+ response["meta"]["provenance"]["fallback"]["reason"]
+ .string_value(),
+ "unavailable",
+ )
+ assert_equal(
+ response["output"]["rewritten_text"].string_value(),
+ "apples",
+ )
+
+
def test_status_reports_configured_but_deferred_custody_truthfully() raises:
with TemporaryDirectory() as temp_dir:
var identity_dir = Path(temp_dir) / "secrets" / "services" / "hyf"