import React from "react"; import { FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription, } from "@/src/components/ui/form"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/src/components/ui/select"; import { Popover, PopoverContent, PopoverTrigger, } from "@/src/components/ui/popover"; import { Card, CardDescription, CardHeader, CardTitle, } from "@/src/components/ui/card"; import { Button } from "@/src/components/ui/button"; import { Info, CircleCheck } from "lucide-react"; import { type DatasetStepProps } from "@/src/features/experiments/types/stepProps"; import { StepHeader } from "@/src/features/experiments/components/shared/StepHeader"; import { api } from "@/src/utils/api"; import { format } from "date-fns"; export const DatasetStep: React.FC = ({ projectId, formState, datasetState, promptInfo, }) => { const { form } = formState; const { datasets, selectedDatasetId, expectedColumnsForDataset: expectedColumns, validationResult, } = datasetState; const { selectedPromptName, selectedPromptVersion } = promptInfo; // Fetch dataset versions when a dataset is selected const { data: datasetVersions } = api.datasets.listDatasetVersions.useQuery( { projectId, datasetId: selectedDatasetId || "", }, { enabled: !!selectedDatasetId, }, ); return (
( Dataset
{selectedPromptName && selectedPromptVersion !== null && (

Expected Dataset Structure

Based on prompt {selectedPromptName} v {selectedPromptVersion}

Input variables:

    {expectedColumns.inputVariables.map((variable) => (
  • {variable}
  • ))}

Expected output:

  • {expectedColumns.outputVariableName} ( {expectedColumns.outputVariableType})
)}
)} /> {selectedDatasetId && datasetVersions && datasetVersions.length > 0 && ( ( Dataset Version (Optional) Run the experiment using the dataset state at a specific point in time. Defaults to the latest version. )} /> )} {selectedDatasetId && ( <> {validationResult?.isValid === false && ( Invalid configuration {validationResult?.message} )} {validationResult?.isValid === true && ( Valid configuration
Matches between dataset items and prompt variables/placeholders
    {Object.entries(validationResult.variablesMap ?? {}).map( ([variable, count]) => (
  • {variable}: {count} /{" "} {validationResult?.isValid ? validationResult.totalItems : "unknown"}
  • ), )}
Items missing all required variables and placeholders will be excluded from the dataset run.
)} )}
); };