@@ -38,11 +38,7 @@ type Evaluator interface {
38
38
Evaluate (ctx context.Context , req * EvaluatorRequest ) (* EvaluatorResponse , error )
39
39
}
40
40
41
- type (
42
- evaluatorActionDef core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}]
43
-
44
- evaluatorAction = core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}]
45
- )
41
+ type evaluator core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}]
46
42
47
43
// Example is a single example that requires evaluation
48
44
type Example struct {
@@ -54,15 +50,12 @@ type Example struct {
54
50
TraceIds []string `json:"traceIds,omitempty"`
55
51
}
56
52
57
- // Dataset is a collection of [Example]
58
- type Dataset = []Example
59
-
60
53
// EvaluatorRequest is the data we pass to evaluate a dataset.
61
54
// The Options field is specific to the actual evaluator implementation.
62
55
type EvaluatorRequest struct {
63
- Dataset * Dataset `json:"dataset"`
64
- EvaluationId string `json:"evalRunId"`
65
- Options any `json:"options,omitempty"`
56
+ Dataset [] * Example `json:"dataset"`
57
+ EvaluationId string `json:"evalRunId"`
58
+ Options any `json:"options,omitempty"`
66
59
}
67
60
68
61
// ScoreStatus is an enum used to indicate if a Score has passed or failed. This
@@ -141,20 +134,18 @@ func DefineEvaluator(r *registry.Registry, provider, name string, options *Evalu
141
134
metadataMap ["evaluatorDisplayName" ] = options .DisplayName
142
135
metadataMap ["evaluatorDefinition" ] = options .Definition
143
136
144
- actionDef := (* evaluatorActionDef )(core .DefineAction (r , provider , name , atype .Evaluator , map [string ]any {"evaluator" : metadataMap }, func (ctx context.Context , req * EvaluatorRequest ) (output * EvaluatorResponse , err error ) {
137
+ actionDef := (* evaluator )(core .DefineAction (r , provider , name , atype .Evaluator , map [string ]any {"evaluator" : metadataMap }, func (ctx context.Context , req * EvaluatorRequest ) (output * EvaluatorResponse , err error ) {
145
138
var evalResponses []EvaluationResult
146
- dataset := * req .Dataset
147
- for i := 0 ; i < len (dataset ); i ++ {
148
- datapoint := dataset [i ]
139
+ for _ , datapoint := range req .Dataset {
149
140
if datapoint .TestCaseId == "" {
150
141
datapoint .TestCaseId = uuid .New ().String ()
151
142
}
152
143
_ , err := tracing .RunInNewSpan (ctx , r .TracingState (), fmt .Sprintf ("TestCase %s" , datapoint .TestCaseId ), "evaluator" , false , datapoint ,
153
- func (ctx context.Context , input Example ) (* EvaluatorCallbackResponse , error ) {
144
+ func (ctx context.Context , input * Example ) (* EvaluatorCallbackResponse , error ) {
154
145
traceId := trace .SpanContextFromContext (ctx ).TraceID ().String ()
155
146
spanId := trace .SpanContextFromContext (ctx ).SpanID ().String ()
156
147
callbackRequest := EvaluatorCallbackRequest {
157
- Input : input ,
148
+ Input : * input ,
158
149
Options : req .Options ,
159
150
}
160
151
evaluatorResponse , err := eval (ctx , & callbackRequest )
@@ -202,66 +193,40 @@ func DefineBatchEvaluator(r *registry.Registry, provider, name string, options *
202
193
metadataMap ["evaluatorDisplayName" ] = options .DisplayName
203
194
metadataMap ["evaluatorDefinition" ] = options .Definition
204
195
205
- return (* evaluatorActionDef )(core .DefineAction (r , provider , name , atype .Evaluator , map [string ]any {"evaluator" : metadataMap }, batchEval )), nil
206
- }
207
-
208
- // IsDefinedEvaluator reports whether an [Evaluator] is defined.
209
- func IsDefinedEvaluator (r * registry.Registry , provider , name string ) bool {
210
- return (* evaluatorActionDef )(core .LookupActionFor [* EvaluatorRequest , * EvaluatorResponse , struct {}](r , atype .Evaluator , provider , name )) != nil
196
+ return (* evaluator )(core .DefineAction (r , provider , name , atype .Evaluator , map [string ]any {"evaluator" : metadataMap }, batchEval )), nil
211
197
}
212
198
213
199
// LookupEvaluator looks up an [Evaluator] registered by [DefineEvaluator].
214
200
// It returns nil if the evaluator was not defined.
215
201
func LookupEvaluator (r * registry.Registry , provider , name string ) Evaluator {
216
- return (* evaluatorActionDef )(core .LookupActionFor [* EvaluatorRequest , * EvaluatorResponse , struct {}](r , atype .Evaluator , provider , name ))
217
- }
218
-
219
- // EvaluateOption configures params of the Embed call.
220
- type EvaluateOption func (req * EvaluatorRequest ) error
221
-
222
- // WithEvaluateDataset set the dataset on [EvaluatorRequest]
223
- func WithEvaluateDataset (dataset * Dataset ) EvaluateOption {
224
- return func (req * EvaluatorRequest ) error {
225
- req .Dataset = dataset
226
- return nil
227
- }
228
- }
229
-
230
- // WithEvaluateId set evaluation ID on [EvaluatorRequest]
231
- func WithEvaluateId (evaluationId string ) EvaluateOption {
232
- return func (req * EvaluatorRequest ) error {
233
- req .EvaluationId = evaluationId
234
- return nil
235
- }
236
- }
237
-
238
- // WithEvaluateOptions set evaluator options on [EvaluatorRequest]
239
- func WithEvaluateOptions (opts any ) EvaluateOption {
240
- return func (req * EvaluatorRequest ) error {
241
- req .Options = opts
242
- return nil
243
- }
202
+ return (* evaluator )(core .LookupActionFor [* EvaluatorRequest , * EvaluatorResponse , struct {}](r , atype .Evaluator , provider , name ))
244
203
}
245
204
246
205
// Evaluate calls the retrivers with provided options.
247
- func Evaluate (ctx context.Context , r Evaluator , opts ... EvaluateOption ) (* EvaluatorResponse , error ) {
248
- req := & EvaluatorRequest {}
249
- for _ , with := range opts {
250
- err := with ( req )
206
+ func Evaluate (ctx context.Context , r Evaluator , opts ... EvaluatorOption ) (* EvaluatorResponse , error ) {
207
+ evalOpts := & evaluatorOptions {}
208
+ for _ , opt := range opts {
209
+ err := opt . applyEvaluator ( evalOpts )
251
210
if err != nil {
252
211
return nil , err
253
212
}
254
213
}
214
+
215
+ req := & EvaluatorRequest {
216
+ Dataset : evalOpts .Dataset ,
217
+ EvaluationId : evalOpts .ID ,
218
+ Options : evalOpts .Config ,
219
+ }
220
+
255
221
return r .Evaluate (ctx , req )
256
222
}
257
223
258
- func (r * evaluatorActionDef ) Name () string { return (* evaluatorAction )(r ).Name () }
224
+ // Name returns the name of the evaluator.
225
+ func (e evaluator ) Name () string {
226
+ return (* core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}])(& e ).Name ()
227
+ }
259
228
260
229
// Evaluate runs the given [Evaluator].
261
- func (e * evaluatorActionDef ) Evaluate (ctx context.Context , req * EvaluatorRequest ) (* EvaluatorResponse , error ) {
262
- if e == nil {
263
- return nil , errors .New ("Evaluator called on a nil Evaluator; check that all evaluators are defined" )
264
- }
265
- a := (* core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}])(e )
266
- return a .Run (ctx , req , nil )
230
+ func (e evaluator ) Evaluate (ctx context.Context , req * EvaluatorRequest ) (* EvaluatorResponse , error ) {
231
+ return (* core.ActionDef [* EvaluatorRequest , * EvaluatorResponse , struct {}])(& e ).Run (ctx , req , nil )
267
232
}
0 commit comments