import React, { useState } from "react"; import { Button } from "@/src/components/ui/button"; import { Code2, Wand2, Cog, Zap } from "lucide-react"; import { api } from "@/src/utils/api"; import { Card, CardDescription, CardHeader, CardTitle, CardContent, CardFooter, } from "@/src/components/ui/card"; import { useHasProjectAccess } from "@/src/features/rbac/utils/checkProjectAccess"; import { DialogHeader, DialogTitle, DialogDescription, DialogBody, } from "@/src/components/ui/dialog"; import Link from "next/link"; import { usePostHogClientCapture } from "@/src/features/posthog-analytics/usePostHogClientCapture"; import { type CreateExperiment } from "@/src/features/experiments/types"; import { MultiStepExperimentForm } from "@/src/features/experiments/components/MultiStepExperimentForm"; import { RemoteExperimentUpsertForm } from "@/src/features/experiments/components/RemoteExperimentUpsertForm"; import { RemoteExperimentTriggerModal } from "@/src/features/experiments/components/RemoteExperimentTriggerModal"; import { Skeleton } from "@/src/components/ui/skeleton"; export const CreateExperimentsForm = ({ projectId, setFormOpen, defaultValues = {}, promptDefault, handleExperimentSettled, handleExperimentSuccess, showSDKRunInfoPage = false, }: { projectId: string; setFormOpen: (open: boolean) => void; defaultValues?: Partial>; promptDefault?: { name: string; version: number; }; handleExperimentSuccess?: (data?: { success: boolean; datasetId: string; runId: string; runName: string; }) => Promise; handleExperimentSettled?: (data?: { success: boolean; datasetId: string; runId: string; runName: string; }) => Promise; showSDKRunInfoPage?: boolean; }) => { const capture = usePostHogClientCapture(); const [showPromptForm, setShowPromptForm] = useState(false); const [showRemoteExperimentUpsertForm, setShowRemoteExperimentUpsertForm] = useState(false); const [ showRemoteExperimentTriggerModal, setShowRemoteExperimentTriggerModal, ] = useState(false); const hasExperimentWriteAccess = useHasProjectAccess({ projectId, scope: "promptExperiments:CUD", }); const datasetId = defaultValues.datasetId; const existingRemoteExperiment = api.datasets.getRemoteExperiment.useQuery( { projectId, datasetId: datasetId as string, }, { enabled: !!datasetId, }, ); if (!hasExperimentWriteAccess) { return null; } if (existingRemoteExperiment.isLoading && !!datasetId) { return ; } if ( showSDKRunInfoPage && !showPromptForm && !showRemoteExperimentUpsertForm && !showRemoteExperimentTriggerModal ) { return ( <> Run Experiment Experiments allow you to test iterations of your application or prompt on a dataset. Learn more about experiments{" "} here .
via User Interface Test single prompts and model configurations via Langfuse UI
  • Compare prompt versions
  • Compare model configurations
  • No code required
via SDK / API Start any dataset run via the Langfuse SDKs
  • Full control over dataset run execution
  • Custom evaluation logic
  • Integration with your codebase
{!!existingRemoteExperiment.data && datasetId && (
)} {!existingRemoteExperiment.data && ( )}
); } if ( showRemoteExperimentTriggerModal && datasetId && existingRemoteExperiment.data ) { return ( ); } if (showRemoteExperimentUpsertForm && datasetId) { return ( ); } return ( ); };