query_rewrite.mojo (4156B)
1 from std.collections import List, Optional 2 3 from json import Value, loads 4 5 from hyf_core.capabilities.query_analysis import ( 6 QueryAnalysis, 7 QueryRewriteRequest, 8 analyze_query_text, 9 build_deterministic_meta, 10 parse_query_rewrite_request, 11 query_signal_tags, 12 serialize_extracted_filters, 13 string_array_value, 14 ) 15 from hyf_core.errors import ( 16 CapabilityResult, 17 failed_capability, 18 invalid_input_error, 19 successful_capability, 20 ) 21 from hyf_core.provenance import ( 22 CoreResponseMeta, 23 ExecutionProvenance, 24 ProvenanceFallback, 25 ProvenanceSourceRef, 26 ) 27 from hyf_core.request_context import ( 28 RequestContext, 29 assisted_execution_requested, 30 ) 31 32 33 def build_query_rewrite_output(analysis: QueryAnalysis) raises -> Value: 34 var output = loads("{}") 35 output.set("original_text", Value(String(analysis.original_text))) 36 output.set("normalized_text", Value(String(analysis.normalized_text))) 37 output.set("rewritten_text", Value(String(analysis.rewritten_text))) 38 output.set("query_terms", string_array_value(analysis.query_terms)) 39 output.set( 40 "normalization_signals", 41 string_array_value(analysis.normalization_signals), 42 ) 43 output.set("ranking_hints", string_array_value(analysis.ranking_hints)) 44 output.set( 45 "extracted_filters", 46 serialize_extracted_filters(analysis.extracted_filters), 47 ) 48 return output^ 49 50 51 def _base_source_refs( 52 context: RequestContext, capability_name: String 53 ) -> List[ProvenanceSourceRef]: 54 var source_refs = List[ProvenanceSourceRef]() 55 source_refs.append( 56 ProvenanceSourceRef( 57 source_kind="local_input", 58 source_ref=capability_name + ":input", 59 ) 60 ) 61 if context.scope: 62 source_refs.append( 63 ProvenanceSourceRef( 64 source_kind="request_scope", 65 source_ref="request_context.scope", 66 ) 67 ) 68 return source_refs^ 69 70 71 def build_query_rewrite_deterministic_fallback_meta( 72 context: RequestContext, 73 analysis: QueryAnalysis, 74 fallback_kind: String, 75 reason: String, 76 ) -> CoreResponseMeta: 77 var provenance: Optional[ExecutionProvenance] = None 78 if context.return_provenance: 79 provenance = ExecutionProvenance( 80 kind="deterministic", 81 signal_tags=query_signal_tags(analysis), 82 source_refs=_base_source_refs(context, "query_rewrite"), 83 fallback=ProvenanceFallback( 84 fallback_kind=String(fallback_kind), reason=String(reason) 85 ), 86 evidence_set_id=None, 87 ) 88 89 return CoreResponseMeta( 90 execution_mode="deterministic", 91 backend="heuristic", 92 provider=None, 93 route=None, 94 model=None, 95 latency_ms=None, 96 schema_version=Optional[Int](1), 97 prompt_version=None, 98 fallback_kind=Optional[String](String(fallback_kind)), 99 fallback_reason=Optional[String](String(reason)), 100 provenance=provenance^, 101 ) 102 103 104 def execute_query_rewrite( 105 input: Value, context: RequestContext 106 ) raises -> CapabilityResult: 107 try: 108 var request: QueryRewriteRequest = parse_query_rewrite_request(input) 109 var analysis = analyze_query_text(request.text, context) 110 if assisted_execution_requested(context): 111 return successful_capability( 112 build_query_rewrite_output(analysis), 113 meta=build_query_rewrite_deterministic_fallback_meta( 114 context, 115 analysis, 116 "assisted_execution", 117 "deferred_bootstrap_runtime", 118 ), 119 ) 120 121 var source_refs = List[ProvenanceSourceRef]() 122 return successful_capability( 123 build_query_rewrite_output(analysis), 124 meta=build_deterministic_meta( 125 context=context, 126 capability_name="query_rewrite", 127 signal_tags=query_signal_tags(analysis), 128 extra_source_refs=source_refs^, 129 ), 130 ) 131 except e: 132 return failed_capability(invalid_input_error(String(e)))