import { api } from "~/utils/api"; import { type PromptVariant, type Scenario } from "./types"; import { Center, Spinner, Text } from "@chakra-ui/react"; import { useExperiment } from "~/utils/hooks"; import { cellPadding } from "../constants"; const CellShell = ({ children }: { children: React.ReactNode }) => (
{children}
); export default function OutputCell({ scenario, variant, }: { scenario: Scenario; variant: PromptVariant; }) { const experiment = useExperiment(); const vars = api.templateVars.list.useQuery({ experimentId: experiment.data?.id ?? "" }).data; const scenarioVariables = scenario.variableValues as Record; const templateHasVariables = vars?.length === 0 || vars?.some((v) => scenarioVariables[v.label] !== undefined); let disabledReason: string | null = null; if (!templateHasVariables) disabledReason = "Add a value to the scenario variables to see output"; if (variant.config === null || Object.keys(variant.config).length === 0) disabledReason = "Save your prompt variant to see output"; const output = api.outputs.get.useQuery( { scenarioId: scenario.id, variantId: variant.id, }, { enabled: disabledReason === null } ); if (!vars) return null; if (disabledReason) return ( {disabledReason} ); if (output.isLoading) return ( ); if (!output.data) return ( Error retrieving output ); if (output.data.errorMessage) { return ( Error: {output.data.errorMessage} ); } return ( // @ts-expect-error TODO proper typing and error checks {output.data.output.choices[0].message.content} ); }