diff --git a/genkit-tools/common/src/types/eval.ts b/genkit-tools/common/src/types/eval.ts index 75556d048a..d9631d13e6 100644 --- a/genkit-tools/common/src/types/eval.ts +++ b/genkit-tools/common/src/types/eval.ts @@ -48,6 +48,12 @@ export const EvalFlowInputSchema = z.union([ ]); export type EvalFlowInput = z.infer; +/** + * Alias for EvalFlowInput to be used in the DatasetStore related APIs. + * We may deprecate EvalFlowInput in favor of this in the future. + */ +export type Dataset = z.infer; + /** * A record that is ready for evaluation. * @@ -113,7 +119,7 @@ export const EvalRunSchema = z.object({ export type EvalRun = z.infer; /** - * Eval dataset store persistence interface. + * Eval store persistence interface. */ export interface EvalStore { /** @@ -135,3 +141,64 @@ export interface EvalStore { */ list(query?: ListEvalKeysRequest): Promise; } + +/** + * Metadata for Dataset objects containing version, create and update time, etc. + */ +export const DatasetMetadaSchema = z.object({ + /** autogenerated */ + datasetId: z.string(), + size: z.number(), + uri: z.string(), + /** 1 for v1, 2 for v2, etc */ + version: z.number(), + displayName: z.string().optional(), + createTime: z.string(), + updateTime: z.string(), +}); +export type DatasetMetadata = z.infer; + +export const UpdateDatasetRequestSchema = z.object({ + /** Supports upsert */ + patch: EvalFlowInputSchema, + displayName: z.string().optional(), +}); +export type UpdateDatasetRequest = z.infer; + +/** + * Eval dataset store persistence interface. + */ +export interface DatasetStore { + /** + * Create new dataset with the given data + * @param data data containing eval flow inputs + * @returns dataset metadata + */ + createDataset(data: Dataset): Promise; + + /** + * Update dataset + * @param req update requeest with new data + * @returns updated dataset metadata + */ + updateDataset(req: UpdateDatasetRequest): Promise; + + /** + * Get existing dataset + * @param id the ID of the dataset + * @returns dataset ready for inference + */ + getDataset(id: string): Promise; + + /** + * List all existing datasets + * @returns array of dataset metadata objects + */ + listDatasets(): Promise; + + /** + * Delete existing dataset + * @param id the ID of the dataset + */ + deleteDataset(id: string): Promise; +}