import { api } from "@/src/utils/api";
import { cn } from "@/src/utils/tailwind";
import { MemoizedIOTableCell } from "@/src/components/ui/IOTableCell";
import { IOTableCell } from "@/src/components/ui/IOTableCell";
import { useTrpcError } from "@/src/hooks/useTrpcError";
import { NotFoundCard } from "@/src/features/datasets/components/NotFoundCard";
export const DatasetItemIOCell = ({
projectId,
datasetId,
datasetItemId,
io,
datasetItemVersion,
singleLine = false,
}: {
projectId: string;
datasetId: string;
datasetItemId: string;
io: "expectedOutput" | "input";
datasetItemVersion?: Date;
singleLine?: boolean;
}) => {
const datasetItem = api.datasets.itemById.useQuery(
{
projectId: projectId,
datasetId: datasetId,
datasetItemId: datasetItemId,
version: datasetItemVersion,
},
{
trpc: {
context: {
skipBatch: true,
},
},
refetchOnMount: false, // prevents refetching loops
},
);
return (
);
};
const silentHttpCodes = [404];
export const TraceObservationIOCell = ({
traceId,
projectId,
observationId,
io,
fromTimestamp,
singleLine = false,
}: {
traceId: string;
projectId: string;
observationId?: string;
io: "input" | "output";
fromTimestamp: Date;
singleLine?: boolean;
}) => {
// Subtract 1 day from the fromTimestamp as a buffer in case the trace happened before the run
const fromTimestampModified = new Date(
fromTimestamp.getTime() - 24 * 60 * 60 * 1000,
);
// conditionally fetch the trace or observation depending on the presence of observationId
const trace = api.traces.byId.useQuery(
{ traceId, projectId, fromTimestamp: fromTimestampModified },
{
enabled: observationId === undefined,
refetchOnMount: false, // prevents refetching loops
staleTime: 60 * 1000, // 1 minute
meta: { silentHttpCodes },
},
);
const observation = api.observations.byId.useQuery(
{
observationId: observationId as string, // disabled when observationId is undefined
projectId,
traceId,
},
{
enabled: observationId !== undefined,
refetchOnMount: false, // prevents refetching loops
staleTime: 60 * 1000, // 1 minute
meta: { silentHttpCodes },
},
);
const isLoading = !!observationId ? observation.isLoading : trace.isLoading;
const { isSilentError } = useTrpcError(
!!observationId ? observation.error : trace.error,
silentHttpCodes,
);
const data = observationId === undefined ? trace.data : observation.data;
return isSilentError ? (
) : (
);
};