hyf

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

scripted.mojo (1553B)


      1 from std.collections import List
      2 
      3 from hyf_assist.evaluator import (
      4     SemanticEvaluatorRequest,
      5     SemanticEvaluatorResponse,
      6     TypedAnswer,
      7 )
      8 
      9 
     10 @fieldwise_init
     11 struct ScriptedEvaluator(Copyable, Movable):
     12     var model: String
     13     var answers: List[TypedAnswer]
     14     var max_calls: Int
     15     var call_count: Int
     16 
     17 
     18 def scripted_evaluator(
     19     model: String, answers: List[TypedAnswer], max_calls: Int
     20 ) raises -> ScriptedEvaluator:
     21     if model.strip() == "":
     22         raise Error("scripted evaluator requires a model")
     23     if max_calls <= 0:
     24         raise Error("scripted evaluator max_calls must be positive")
     25     var copied = List[TypedAnswer]()
     26     for answer in answers:
     27         copied.append(answer.copy())
     28     return ScriptedEvaluator(
     29         model=String(model),
     30         answers=copied^,
     31         max_calls=max_calls,
     32         call_count=0,
     33     )
     34 
     35 
     36 def scripted_evaluate(
     37     mut evaluator: ScriptedEvaluator, request: SemanticEvaluatorRequest
     38 ) raises -> SemanticEvaluatorResponse:
     39     if request.state.strip() == "":
     40         raise Error("scripted evaluator requires non-empty state")
     41     if request.question_bundle.strip() == "":
     42         raise Error("scripted evaluator requires a question bundle")
     43     if evaluator.call_count >= evaluator.max_calls:
     44         raise Error("unexpected_scripted_call")
     45     evaluator.call_count += 1
     46     var answers = List[TypedAnswer]()
     47     for answer in evaluator.answers:
     48         answers.append(answer.copy())
     49     return SemanticEvaluatorResponse(
     50         model=String(evaluator.model), answers=answers^
     51     )