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 )