@@ -50,6 +50,30 @@ declare module 'vitest' {
5050
5151const createVersionId = customAlphabet ( '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' , 10 ) ;
5252
53+ type EvalDataSourceBase = { input : unknown ; expected : unknown } ;
54+ type EvalDataSource =
55+ | readonly EvalDataSourceBase [ ]
56+ | Promise < readonly EvalDataSourceBase [ ] >
57+ | ( ( ) => readonly EvalDataSourceBase [ ] | Promise < readonly EvalDataSourceBase [ ] > ) ;
58+
59+ type ResolveEvalData < TData extends EvalDataSource > = Awaited <
60+ TData extends ( ...args : any [ ] ) => infer TResult ? TResult : TData
61+ > ;
62+
63+ type InferEvalDataInput < TData extends EvalDataSource > =
64+ ResolveEvalData < TData > extends readonly ( infer TRecord ) [ ]
65+ ? TRecord extends { input : infer TInput }
66+ ? TInput
67+ : never
68+ : never ;
69+
70+ type InferEvalDataExpected < TData extends EvalDataSource > =
71+ ResolveEvalData < TData > extends readonly ( infer TRecord ) [ ]
72+ ? TRecord extends { expected : infer TExpected }
73+ ? TExpected
74+ : never
75+ : never ;
76+
5377type RunTaskFailureDetails = {
5478 duration : number ;
5579 outOfScopeFlags : OutOfScopeFlagAccess [ ] ;
@@ -111,17 +135,24 @@ function getRunTaskFailureDetails(error: unknown): RunTaskFailureDetails | undef
111135 * ```
112136 */
113137export function Eval <
114- TInput ,
115- TExpected ,
116- TOutput ,
138+ TData extends EvalDataSource ,
139+ TInput extends string | Record < string , any > = InferEvalDataInput < TData > ,
140+ TExpected extends string | Record < string , any > = InferEvalDataExpected < TData > ,
141+ TOutput extends string | Record < string , any > = string | Record < string , any > ,
117142 Name extends string = string ,
118143 Capability extends string = string ,
119144 Step extends string = string ,
120145> (
121146 name : ValidateName < Name > ,
122- params : Omit < EvalParams < TInput , TExpected , TOutput > , 'capability' | 'step' > & {
147+ params : Omit <
148+ EvalParams < TInput , TExpected , TOutput > ,
149+ 'capability' | 'step' | 'data' | 'task' | 'scorers'
150+ > & {
123151 capability : ValidateName < Capability > ;
124152 step ?: ValidateName < Step > | undefined ;
153+ data : TData ;
154+ task : EvalTask < TInput , TExpected , TOutput > ;
155+ scorers : ReadonlyArray < ScorerLike < TInput , TExpected , TOutput > > ;
125156 } ,
126157) : void {
127158 // Record eval name for validation
0 commit comments