@@ -356,7 +356,7 @@ func (h *evalCommandHandler) runEvaluators(ctx context.Context, testCase map[str
356356func (h * evalCommandHandler ) runSingleEvaluator (ctx context.Context , evaluator prompt.Evaluator , testCase map [string ]interface {}, response string ) (EvaluationResult , error ) {
357357 switch {
358358 case evaluator .String != nil :
359- return h .runStringEvaluator (evaluator .Name , * evaluator .String , response )
359+ return h .runStringEvaluator (evaluator .Name , * evaluator .String , testCase , response )
360360 case evaluator .LLM != nil :
361361 return h .runLLMEvaluator (ctx , evaluator .Name , * evaluator .LLM , testCase , response )
362362 case evaluator .Uses != "" :
@@ -366,23 +366,39 @@ func (h *evalCommandHandler) runSingleEvaluator(ctx context.Context, evaluator p
366366 }
367367}
368368
369- func (h * evalCommandHandler ) runStringEvaluator (name string , eval prompt.StringEvaluator , response string ) (EvaluationResult , error ) {
369+ func (h * evalCommandHandler ) runStringEvaluator (name string , eval prompt.StringEvaluator , testCase map [ string ] interface {}, response string ) (EvaluationResult , error ) {
370370 var passed bool
371371 var details string
372372
373373 switch {
374374 case eval .Equals != "" :
375- passed = response == eval .Equals
376- details = fmt .Sprintf ("Expected exact match: '%s'" , eval .Equals )
375+ equals , err := h .templateString (eval .Equals , testCase )
376+ if err != nil {
377+ return EvaluationResult {}, fmt .Errorf ("failed to template message content: %w" , err )
378+ }
379+ passed = response == equals
380+ details = fmt .Sprintf ("Expected exact match: '%s'" , equals )
377381 case eval .Contains != "" :
378- passed = strings .Contains (strings .ToLower (response ), strings .ToLower (eval .Contains ))
379- details = fmt .Sprintf ("Expected to contain: '%s'" , eval .Contains )
382+ contains , err := h .templateString (eval .Contains , testCase )
383+ if err != nil {
384+ return EvaluationResult {}, fmt .Errorf ("failed to template message content: %w" , err )
385+ }
386+ passed = strings .Contains (strings .ToLower (response ), strings .ToLower (contains ))
387+ details = fmt .Sprintf ("Expected to contain: '%s'" , contains )
380388 case eval .StartsWith != "" :
381- passed = strings .HasPrefix (strings .ToLower (response ), strings .ToLower (eval .StartsWith ))
382- details = fmt .Sprintf ("Expected to start with: '%s'" , eval .StartsWith )
389+ startsWith , err := h .templateString (eval .StartsWith , testCase )
390+ if err != nil {
391+ return EvaluationResult {}, fmt .Errorf ("failed to template message content: %w" , err )
392+ }
393+ passed = strings .HasPrefix (strings .ToLower (response ), strings .ToLower (startsWith ))
394+ details = fmt .Sprintf ("Expected to start with: '%s'" , startsWith )
383395 case eval .EndsWith != "" :
384- passed = strings .HasSuffix (strings .ToLower (response ), strings .ToLower (eval .EndsWith ))
385- details = fmt .Sprintf ("Expected to end with: '%s'" , eval .EndsWith )
396+ endsWith , err := h .templateString (eval .EndsWith , testCase )
397+ if err != nil {
398+ return EvaluationResult {}, fmt .Errorf ("failed to template message content: %w" , err )
399+ }
400+ passed = strings .HasSuffix (strings .ToLower (response ), strings .ToLower (endsWith ))
401+ details = fmt .Sprintf ("Expected to end with: '%s'" , endsWith )
386402 default :
387403 return EvaluationResult {}, errors .New ("no string evaluation criteria specified" )
388404 }
0 commit comments