@mastra/react 1.13.0-alpha.7 → 1.13.1-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/datasets/index.cjs +1 -5
- package/dist/hooks/datasets/index.cjs.map +1 -1
- package/dist/hooks/datasets/index.js +1 -5
- package/dist/hooks/datasets/index.js.map +1 -1
- package/dist/hooks/datasets/use-dataset-experiments.d.ts.map +1 -1
- package/dist/hooks/traces/index.cjs +1 -1
- package/dist/hooks/traces/index.cjs.map +1 -1
- package/dist/hooks/traces/index.js +1 -1
- package/dist/hooks/traces/index.js.map +1 -1
- package/dist/hooks/traces/use-traces.d.ts +11 -0
- package/dist/hooks/traces/use-traces.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -383,8 +383,6 @@ const datasetExperimentQueryOptions = (client, datasetId, experimentId) => (0, _
|
|
|
383
383
|
experimentId
|
|
384
384
|
],
|
|
385
385
|
queryFn: () => client.getDatasetExperiment(datasetId, experimentId),
|
|
386
|
-
gcTime: 0,
|
|
387
|
-
staleTime: 0,
|
|
388
386
|
refetchInterval: (query) => isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false
|
|
389
387
|
});
|
|
390
388
|
/**
|
|
@@ -448,12 +446,10 @@ const allDatasetExperimentResultsQueryOptions = (client, datasetId, experimentId
|
|
|
448
446
|
*/
|
|
449
447
|
const useDatasetExperiment = ({ datasetId, experimentId, queryOptions }) => {
|
|
450
448
|
const client = require_mastra_client_context.useMastraClient();
|
|
451
|
-
const { queryKey, queryFn,
|
|
449
|
+
const { queryKey, queryFn, refetchInterval } = datasetExperimentQueryOptions(client, datasetId, experimentId);
|
|
452
450
|
return (0, _tanstack_react_query.useQuery)({
|
|
453
451
|
queryKey,
|
|
454
452
|
queryFn,
|
|
455
|
-
gcTime,
|
|
456
|
-
staleTime,
|
|
457
453
|
refetchInterval,
|
|
458
454
|
...queryOptions
|
|
459
455
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["useMastraClient","useQuery","PER_PAGE","useInView","useInfiniteQuery","useMastraClient","useQueryClient","useMutation","useMastraClient","useQuery","useInView","useInfiniteQuery","useMastraClient","useQuery","tanstackQueryOptions","useMastraClient","useQuery","useCombineByIds","useQueries","useInView","useInfiniteQuery","useMastraClient","useQuery","useMastraClient","useInfiniteQuery","useMastraClient","useQuery","useMastraClient","useQuery"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n// The datasetIds filter accepts at most 100 ids per request.\nconst DATASET_IDS_PER_REQUEST = 100;\n\n/**\n * Datasets matching the given ids, in one request per 100 ids, e.g. to name the datasets of listed\n * experiments without paging through every dataset. Ids without a dataset are absent from the result.\n */\nexport const useDatasetsByIds = ({\n datasetIds,\n}: {\n datasetIds: readonly string[];\n}): UseQueryResult<DatasetRecord[], Error> => {\n const client = useMastraClient();\n const uniqueIds = [...new Set(datasetIds)].toSorted();\n\n return useQuery({\n queryKey: ['datasets', 'by-ids', uniqueIds],\n enabled: uniqueIds.length > 0,\n queryFn: async () => {\n const batches: string[][] = [];\n for (let index = 0; index < uniqueIds.length; index += DATASET_IDS_PER_REQUEST) {\n batches.push(uniqueIds.slice(index, index + DATASET_IDS_PER_REQUEST));\n }\n const responses = await Promise.all(batches.map(batch => client.listDatasets({ datasetIds: batch })));\n return responses.flatMap(response => response.datasets);\n },\n // Loading more experiments adds ids; keep the names already resolved meanwhile.\n placeholderData: previousData => previousData,\n });\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Hook to compare two to ten dataset experiments item by item against a baseline.\n * @param datasetId - ID of the dataset\n * @param experimentIds - IDs of the experiments to compare\n * @param baselineId - ID of the baseline experiment; must be one of `experimentIds` (defaults to the first)\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIds,\n baselineId,\n queryOptions,\n}: {\n datasetId: string;\n experimentIds: string[];\n baselineId?: string;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIds, baselineId],\n queryFn: () => client.compareExperiments({ datasetId, experimentIds, baselineId }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { queryOptions as tanstackQueryOptions, useInfiniteQuery, useQueries, useQuery } from '@tanstack/react-query';\nimport type {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { useCombineByIds } from '../shared/combine-by-ids';\nimport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport { useInView } from '../shared/use-in-view';\n\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\ntype DatasetExperimentQueryKey = string[];\ntype ExperimentStatusQueryKey = (string | undefined)[];\n\nconst POLL_INTERVAL_MS = 2000;\nconst RESULTS_PER_PAGE = 100;\nconst SCORES_PER_PAGE = 100;\n\nconst isInProgress = (status: string | undefined) => status === 'running' || status === 'pending';\n\n/**\n * Key, fetcher and polling policy of the `dataset-experiment` query, shared by the single and\n * multi-experiment hooks so they hit the same cache entry.\n * Polls every 2 seconds while the experiment is 'running' or 'pending'.\n */\nexport const datasetExperimentQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n): UseQueryOptions<DatasetExperimentResponse, Error, DatasetExperimentResponse, DatasetExperimentQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => (isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false),\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-scores` query: every score of an experiment, across all\n * pages, grouped by dataset item id. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const experimentScoresQueryOptions = (\n client: MastraClient,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<ExperimentScoresByEntity, Error, ExperimentScoresByEntity, ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage: SCORES_PER_PAGE });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: ExperimentScoresByEntity = {};\n for (const row of allScores) {\n (grouped[row.entityId] ??= []).push(row);\n }\n return grouped;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-results-all` query: every result of an experiment, across\n * all pages. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const allDatasetExperimentResultsQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<DatasetExperimentResult[], Error, DatasetExperimentResult[], ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-results-all', datasetId, experimentId, experimentStatus],\n queryFn: async (): Promise<DatasetExperimentResult[]> => {\n const allResults: DatasetExperimentResult[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listDatasetExperimentResults(datasetId, experimentId, {\n page,\n perPage: RESULTS_PER_PAGE,\n });\n allResults.push(...response.results);\n if (!response.pagination.hasMore || response.results.length === 0) break;\n page++;\n }\n\n return allResults;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/** An experiment id plus its status, which drives polling of its dependent queries. */\nexport interface ExperimentRef {\n id: string;\n status?: ExperimentStatus;\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData, DatasetExperimentQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, gcTime, staleTime, refetchInterval } = datasetExperimentQueryOptions(\n client,\n datasetId,\n experimentId,\n );\n return useQuery<DatasetExperimentResponse, Error, TData, DatasetExperimentQueryKey>({\n queryKey,\n queryFn,\n gcTime,\n staleTime,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches several experiments of one dataset in parallel, each polled while it runs.\n * The server 404s an experiment that does not belong to `datasetId`, which surfaces as `error`.\n */\nexport const useDatasetExperimentsQueries = ({\n datasetId,\n experimentIds,\n}: {\n datasetId: string;\n experimentIds: string[];\n}): ExperimentQueriesResult<DatasetExperimentResponse> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResponse>(experimentIds);\n return useQueries({\n queries: experimentIds.map(id => datasetExperimentQueryOptions(client, datasetId, id)),\n combine,\n });\n};\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Fetches every result (all pages) of several experiments of one dataset in parallel.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useAllDatasetExperimentResultsQueries = ({\n datasetId,\n experiments,\n}: {\n datasetId: string;\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<DatasetExperimentResult[]> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResult[]>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment =>\n allDatasetExperimentResultsQueryOptions(client, datasetId, experiment.id, experiment.status),\n ),\n combine,\n });\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData, ExperimentStatusQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = experimentScoresQueryOptions(client, experimentId, experimentStatus);\n return useQuery<ExperimentScoresByEntity, Error, TData, ExperimentStatusQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches every score of several experiments in parallel, each grouped by dataset item id.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useScoresByExperimentIdsQueries = ({\n experiments,\n}: {\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<ExperimentScoresByEntity> => {\n const client = useMastraClient();\n const combine = useCombineByIds<ExperimentScoresByEntity>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment => experimentScoresQueryOptions(client, experiment.id, experiment.status)),\n combine,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["useMastraClient","useQuery","PER_PAGE","useInView","useInfiniteQuery","useMastraClient","useQueryClient","useMutation","useMastraClient","useQuery","useInView","useInfiniteQuery","useMastraClient","useQuery","tanstackQueryOptions","useMastraClient","useQuery","useCombineByIds","useQueries","useInView","useInfiniteQuery","useMastraClient","useQuery","useMastraClient","useInfiniteQuery","useMastraClient","useQuery","useMastraClient","useQuery"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n// The datasetIds filter accepts at most 100 ids per request.\nconst DATASET_IDS_PER_REQUEST = 100;\n\n/**\n * Datasets matching the given ids, in one request per 100 ids, e.g. to name the datasets of listed\n * experiments without paging through every dataset. Ids without a dataset are absent from the result.\n */\nexport const useDatasetsByIds = ({\n datasetIds,\n}: {\n datasetIds: readonly string[];\n}): UseQueryResult<DatasetRecord[], Error> => {\n const client = useMastraClient();\n const uniqueIds = [...new Set(datasetIds)].toSorted();\n\n return useQuery({\n queryKey: ['datasets', 'by-ids', uniqueIds],\n enabled: uniqueIds.length > 0,\n queryFn: async () => {\n const batches: string[][] = [];\n for (let index = 0; index < uniqueIds.length; index += DATASET_IDS_PER_REQUEST) {\n batches.push(uniqueIds.slice(index, index + DATASET_IDS_PER_REQUEST));\n }\n const responses = await Promise.all(batches.map(batch => client.listDatasets({ datasetIds: batch })));\n return responses.flatMap(response => response.datasets);\n },\n // Loading more experiments adds ids; keep the names already resolved meanwhile.\n placeholderData: previousData => previousData,\n });\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Hook to compare two to ten dataset experiments item by item against a baseline.\n * @param datasetId - ID of the dataset\n * @param experimentIds - IDs of the experiments to compare\n * @param baselineId - ID of the baseline experiment; must be one of `experimentIds` (defaults to the first)\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIds,\n baselineId,\n queryOptions,\n}: {\n datasetId: string;\n experimentIds: string[];\n baselineId?: string;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIds, baselineId],\n queryFn: () => client.compareExperiments({ datasetId, experimentIds, baselineId }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { queryOptions as tanstackQueryOptions, useInfiniteQuery, useQueries, useQuery } from '@tanstack/react-query';\nimport type {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { useCombineByIds } from '../shared/combine-by-ids';\nimport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport { useInView } from '../shared/use-in-view';\n\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\ntype DatasetExperimentQueryKey = string[];\ntype ExperimentStatusQueryKey = (string | undefined)[];\n\nconst POLL_INTERVAL_MS = 2000;\nconst RESULTS_PER_PAGE = 100;\nconst SCORES_PER_PAGE = 100;\n\nconst isInProgress = (status: string | undefined) => status === 'running' || status === 'pending';\n\n/**\n * Key, fetcher and polling policy of the `dataset-experiment` query, shared by the single and\n * multi-experiment hooks so they hit the same cache entry.\n * Polls every 2 seconds while the experiment is 'running' or 'pending'.\n */\nexport const datasetExperimentQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n): UseQueryOptions<DatasetExperimentResponse, Error, DatasetExperimentResponse, DatasetExperimentQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n refetchInterval: query => (isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false),\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-scores` query: every score of an experiment, across all\n * pages, grouped by dataset item id. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const experimentScoresQueryOptions = (\n client: MastraClient,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<ExperimentScoresByEntity, Error, ExperimentScoresByEntity, ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage: SCORES_PER_PAGE });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: ExperimentScoresByEntity = {};\n for (const row of allScores) {\n (grouped[row.entityId] ??= []).push(row);\n }\n return grouped;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-results-all` query: every result of an experiment, across\n * all pages. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const allDatasetExperimentResultsQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<DatasetExperimentResult[], Error, DatasetExperimentResult[], ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-results-all', datasetId, experimentId, experimentStatus],\n queryFn: async (): Promise<DatasetExperimentResult[]> => {\n const allResults: DatasetExperimentResult[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listDatasetExperimentResults(datasetId, experimentId, {\n page,\n perPage: RESULTS_PER_PAGE,\n });\n allResults.push(...response.results);\n if (!response.pagination.hasMore || response.results.length === 0) break;\n page++;\n }\n\n return allResults;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/** An experiment id plus its status, which drives polling of its dependent queries. */\nexport interface ExperimentRef {\n id: string;\n status?: ExperimentStatus;\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData, DatasetExperimentQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = datasetExperimentQueryOptions(client, datasetId, experimentId);\n return useQuery<DatasetExperimentResponse, Error, TData, DatasetExperimentQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches several experiments of one dataset in parallel, each polled while it runs.\n * The server 404s an experiment that does not belong to `datasetId`, which surfaces as `error`.\n */\nexport const useDatasetExperimentsQueries = ({\n datasetId,\n experimentIds,\n}: {\n datasetId: string;\n experimentIds: string[];\n}): ExperimentQueriesResult<DatasetExperimentResponse> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResponse>(experimentIds);\n return useQueries({\n queries: experimentIds.map(id => datasetExperimentQueryOptions(client, datasetId, id)),\n combine,\n });\n};\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Fetches every result (all pages) of several experiments of one dataset in parallel.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useAllDatasetExperimentResultsQueries = ({\n datasetId,\n experiments,\n}: {\n datasetId: string;\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<DatasetExperimentResult[]> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResult[]>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment =>\n allDatasetExperimentResultsQueryOptions(client, datasetId, experiment.id, experiment.status),\n ),\n combine,\n });\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData, ExperimentStatusQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = experimentScoresQueryOptions(client, experimentId, experimentStatus);\n return useQuery<ExperimentScoresByEntity, Error, TData, ExperimentStatusQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches every score of several experiments in parallel, each grouped by dataset item id.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useScoresByExperimentIdsQueries = ({\n experiments,\n}: {\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<ExperimentScoresByEntity> => {\n const client = useMastraClient();\n const combine = useCombineByIds<ExperimentScoresByEntity>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment => experimentScoresQueryOptions(client, experiment.id, experiment.status)),\n combine,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
@@ -382,8 +382,6 @@ const datasetExperimentQueryOptions = (client, datasetId, experimentId) => query
|
|
|
382
382
|
experimentId
|
|
383
383
|
],
|
|
384
384
|
queryFn: () => client.getDatasetExperiment(datasetId, experimentId),
|
|
385
|
-
gcTime: 0,
|
|
386
|
-
staleTime: 0,
|
|
387
385
|
refetchInterval: (query) => isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false
|
|
388
386
|
});
|
|
389
387
|
/**
|
|
@@ -447,12 +445,10 @@ const allDatasetExperimentResultsQueryOptions = (client, datasetId, experimentId
|
|
|
447
445
|
*/
|
|
448
446
|
const useDatasetExperiment = ({ datasetId, experimentId, queryOptions }) => {
|
|
449
447
|
const client = useMastraClient();
|
|
450
|
-
const { queryKey, queryFn,
|
|
448
|
+
const { queryKey, queryFn, refetchInterval } = datasetExperimentQueryOptions(client, datasetId, experimentId);
|
|
451
449
|
return useQuery({
|
|
452
450
|
queryKey,
|
|
453
451
|
queryFn,
|
|
454
|
-
gcTime,
|
|
455
|
-
staleTime,
|
|
456
452
|
refetchInterval,
|
|
457
453
|
...queryOptions
|
|
458
454
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["PER_PAGE","tanstackQueryOptions"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n// The datasetIds filter accepts at most 100 ids per request.\nconst DATASET_IDS_PER_REQUEST = 100;\n\n/**\n * Datasets matching the given ids, in one request per 100 ids, e.g. to name the datasets of listed\n * experiments without paging through every dataset. Ids without a dataset are absent from the result.\n */\nexport const useDatasetsByIds = ({\n datasetIds,\n}: {\n datasetIds: readonly string[];\n}): UseQueryResult<DatasetRecord[], Error> => {\n const client = useMastraClient();\n const uniqueIds = [...new Set(datasetIds)].toSorted();\n\n return useQuery({\n queryKey: ['datasets', 'by-ids', uniqueIds],\n enabled: uniqueIds.length > 0,\n queryFn: async () => {\n const batches: string[][] = [];\n for (let index = 0; index < uniqueIds.length; index += DATASET_IDS_PER_REQUEST) {\n batches.push(uniqueIds.slice(index, index + DATASET_IDS_PER_REQUEST));\n }\n const responses = await Promise.all(batches.map(batch => client.listDatasets({ datasetIds: batch })));\n return responses.flatMap(response => response.datasets);\n },\n // Loading more experiments adds ids; keep the names already resolved meanwhile.\n placeholderData: previousData => previousData,\n });\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Hook to compare two to ten dataset experiments item by item against a baseline.\n * @param datasetId - ID of the dataset\n * @param experimentIds - IDs of the experiments to compare\n * @param baselineId - ID of the baseline experiment; must be one of `experimentIds` (defaults to the first)\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIds,\n baselineId,\n queryOptions,\n}: {\n datasetId: string;\n experimentIds: string[];\n baselineId?: string;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIds, baselineId],\n queryFn: () => client.compareExperiments({ datasetId, experimentIds, baselineId }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { queryOptions as tanstackQueryOptions, useInfiniteQuery, useQueries, useQuery } from '@tanstack/react-query';\nimport type {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { useCombineByIds } from '../shared/combine-by-ids';\nimport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport { useInView } from '../shared/use-in-view';\n\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\ntype DatasetExperimentQueryKey = string[];\ntype ExperimentStatusQueryKey = (string | undefined)[];\n\nconst POLL_INTERVAL_MS = 2000;\nconst RESULTS_PER_PAGE = 100;\nconst SCORES_PER_PAGE = 100;\n\nconst isInProgress = (status: string | undefined) => status === 'running' || status === 'pending';\n\n/**\n * Key, fetcher and polling policy of the `dataset-experiment` query, shared by the single and\n * multi-experiment hooks so they hit the same cache entry.\n * Polls every 2 seconds while the experiment is 'running' or 'pending'.\n */\nexport const datasetExperimentQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n): UseQueryOptions<DatasetExperimentResponse, Error, DatasetExperimentResponse, DatasetExperimentQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n gcTime: 0,\n staleTime: 0,\n refetchInterval: query => (isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false),\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-scores` query: every score of an experiment, across all\n * pages, grouped by dataset item id. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const experimentScoresQueryOptions = (\n client: MastraClient,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<ExperimentScoresByEntity, Error, ExperimentScoresByEntity, ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage: SCORES_PER_PAGE });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: ExperimentScoresByEntity = {};\n for (const row of allScores) {\n (grouped[row.entityId] ??= []).push(row);\n }\n return grouped;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-results-all` query: every result of an experiment, across\n * all pages. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const allDatasetExperimentResultsQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<DatasetExperimentResult[], Error, DatasetExperimentResult[], ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-results-all', datasetId, experimentId, experimentStatus],\n queryFn: async (): Promise<DatasetExperimentResult[]> => {\n const allResults: DatasetExperimentResult[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listDatasetExperimentResults(datasetId, experimentId, {\n page,\n perPage: RESULTS_PER_PAGE,\n });\n allResults.push(...response.results);\n if (!response.pagination.hasMore || response.results.length === 0) break;\n page++;\n }\n\n return allResults;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/** An experiment id plus its status, which drives polling of its dependent queries. */\nexport interface ExperimentRef {\n id: string;\n status?: ExperimentStatus;\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData, DatasetExperimentQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, gcTime, staleTime, refetchInterval } = datasetExperimentQueryOptions(\n client,\n datasetId,\n experimentId,\n );\n return useQuery<DatasetExperimentResponse, Error, TData, DatasetExperimentQueryKey>({\n queryKey,\n queryFn,\n gcTime,\n staleTime,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches several experiments of one dataset in parallel, each polled while it runs.\n * The server 404s an experiment that does not belong to `datasetId`, which surfaces as `error`.\n */\nexport const useDatasetExperimentsQueries = ({\n datasetId,\n experimentIds,\n}: {\n datasetId: string;\n experimentIds: string[];\n}): ExperimentQueriesResult<DatasetExperimentResponse> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResponse>(experimentIds);\n return useQueries({\n queries: experimentIds.map(id => datasetExperimentQueryOptions(client, datasetId, id)),\n combine,\n });\n};\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Fetches every result (all pages) of several experiments of one dataset in parallel.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useAllDatasetExperimentResultsQueries = ({\n datasetId,\n experiments,\n}: {\n datasetId: string;\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<DatasetExperimentResult[]> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResult[]>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment =>\n allDatasetExperimentResultsQueryOptions(client, datasetId, experiment.id, experiment.status),\n ),\n combine,\n });\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData, ExperimentStatusQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = experimentScoresQueryOptions(client, experimentId, experimentStatus);\n return useQuery<ExperimentScoresByEntity, Error, TData, ExperimentStatusQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches every score of several experiments in parallel, each grouped by dataset item id.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useScoresByExperimentIdsQueries = ({\n experiments,\n}: {\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<ExperimentScoresByEntity> => {\n const client = useMastraClient();\n const combine = useCombineByIds<ExperimentScoresByEntity>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment => experimentScoresQueryOptions(client, experiment.id, experiment.status)),\n combine,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["PER_PAGE","tanstackQueryOptions"],"sources":["../../../src/hooks/datasets/use-dataset-items.ts","../../../src/hooks/datasets/use-dataset-mutations.ts","../../../src/hooks/datasets/use-datasets.ts","../../../src/hooks/datasets/use-compare-experiments.ts","../../../src/hooks/datasets/use-dataset-experiments.ts","../../../src/hooks/datasets/use-dataset-item-versions.ts","../../../src/hooks/datasets/use-dataset-versions.ts","../../../src/hooks/datasets/use-experiments.ts","../../../src/hooks/datasets/use-workflow-schema.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport { useQuery, useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\n/**\n * Hook to fetch a single dataset item by ID\n */\ntype DatasetItemResponse = Awaited<ReturnType<MastraClient['getDatasetItem']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItem = <TData = DatasetItemResponse>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset-item', datasetId, itemId],\n queryFn: () => client.getDatasetItem(datasetId, itemId),\n retry: false, // Don't retry 404s for deleted items\n ...queryOptions,\n });\n};\n\nconst PER_PAGE = 10;\n\ntype ListDatasetItemsResponse = Awaited<ReturnType<MastraClient['listDatasetItems']>>;\n\nexport type UseDatasetItemsResult = Omit<\n UseInfiniteQueryResult<InfiniteData<ListDatasetItemsResponse>, Error>,\n 'data'\n> & {\n data: ListDatasetItemsResponse['items'];\n total: number | undefined;\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list items in a dataset with infinite scroll pagination and optional search\n * @param version - Optional version timestamp to view historical snapshot\n */\nexport type DatasetItemsOrderBy = NonNullable<NonNullable<Parameters<MastraClient['listDatasetItems']>[1]>['orderBy']>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItems = ({\n datasetId,\n search,\n version,\n orderBy,\n queryOptions,\n}: {\n datasetId: string;\n search?: string;\n version?: number | null;\n orderBy?: DatasetItemsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<\n ListDatasetItemsResponse,\n InfiniteData<ListDatasetItemsResponse, number>,\n QueryKey,\n number\n >;\n}): UseDatasetItemsResult => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-items', datasetId, search, version, orderBy],\n queryFn: async ({ pageParam }) => {\n const res = await client.listDatasetItems(datasetId, {\n page: pageParam,\n perPage: PER_PAGE,\n search: search || undefined,\n version: version || undefined,\n orderBy,\n });\n return res;\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.items?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n retry: false,\n ...queryOptions,\n });\n\n const items = query.data?.pages.flatMap(page => page?.items ?? []) ?? [];\n const total = query.data?.pages[0]?.pagination?.total;\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, data: items, total, setEndOfListElement };\n};\n","import type {\n CreateDatasetParams,\n UpdateDatasetParams,\n AddDatasetItemParams,\n UpdateDatasetItemParams,\n TriggerDatasetExperimentParams,\n UpdateDatasetExperimentParams,\n UpdateExperimentResultParams,\n BatchInsertDatasetItemsParams,\n BatchDeleteDatasetItemsParams,\n MastraClient,\n} from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype DatasetItemMutationVariables = {\n datasetId: string;\n itemId: string;\n};\n\ntype ClientResult<K extends keyof MastraClient> = MastraClient[K] extends (...args: any[]) => Promise<infer R>\n ? R\n : never;\n\nexport interface DatasetMutationsQueryOptions {\n createDataset?: MastraMutationOptions<ClientResult<'createDataset'>, CreateDatasetParams>;\n updateDataset?: MastraMutationOptions<ClientResult<'updateDataset'>, UpdateDatasetParams>;\n deleteDataset?: MastraMutationOptions<ClientResult<'deleteDataset'>, string>;\n addItem?: MastraMutationOptions<ClientResult<'addDatasetItem'>, AddDatasetItemParams>;\n updateItem?: MastraMutationOptions<ClientResult<'updateDatasetItem'>, UpdateDatasetItemParams>;\n deleteItem?: MastraMutationOptions<ClientResult<'deleteDatasetItem'>, DatasetItemMutationVariables>;\n purgeItem?: MastraMutationOptions<ClientResult<'purgeDatasetItem'>, DatasetItemMutationVariables>;\n deleteItems?: MastraMutationOptions<\n ClientResult<'batchDeleteDatasetItems'>,\n { datasetId: string; itemIds: string[] }\n >;\n batchInsertItems?: MastraMutationOptions<ClientResult<'batchInsertDatasetItems'>, BatchInsertDatasetItemsParams>;\n batchDeleteItems?: MastraMutationOptions<ClientResult<'batchDeleteDatasetItems'>, BatchDeleteDatasetItemsParams>;\n triggerExperiment?: MastraMutationOptions<ClientResult<'triggerDatasetExperiment'>, TriggerDatasetExperimentParams>;\n deleteExperiment?: MastraMutationOptions<ClientResult<'deleteExperiment'>, string>;\n updateExperiment?: MastraMutationOptions<ClientResult<'updateDatasetExperiment'>, UpdateDatasetExperimentParams>;\n updateExperimentResult?: MastraMutationOptions<\n ClientResult<'updateDatasetExperimentResult'>,\n UpdateExperimentResultParams\n >;\n}\n\n/**\n * Hook providing mutation functions for datasets, items, and runs\n * All mutations invalidate relevant query caches on success.\n * `queryOptions` is keyed by returned mutation name and spread last; a user `onSuccess` replaces the internal invalidation.\n */\nexport const useDatasetMutations = ({ queryOptions }: { queryOptions?: DatasetMutationsQueryOptions } = {}) => {\n const client = useMastraClient();\n const queryClient = useQueryClient();\n\n const createDataset = useMutation({\n mutationFn: (params: CreateDatasetParams) => client.createDataset(params),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.createDataset,\n });\n\n const updateDataset = useMutation({\n mutationFn: (params: UpdateDatasetParams) => client.updateDataset(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n },\n ...queryOptions?.updateDataset,\n });\n\n const deleteDataset = useMutation({\n mutationFn: (datasetId: string) => client.deleteDataset(datasetId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['datasets'] });\n },\n ...queryOptions?.deleteDataset,\n });\n\n const addItem = useMutation({\n mutationFn: (params: AddDatasetItemParams) => client.addDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.addItem,\n });\n\n const updateItem = useMutation({\n mutationFn: (params: UpdateDatasetItemParams) => client.updateDatasetItem(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.updateItem,\n });\n\n const deleteItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.deleteDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItem,\n });\n\n const purgeItem = useMutation({\n mutationFn: ({ datasetId, itemId }: DatasetItemMutationVariables) => client.purgeDatasetItem(datasetId, itemId),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-item', variables.datasetId, variables.itemId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-item-versions', variables.datasetId, variables.itemId],\n });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.purgeItem,\n });\n\n // Batch insert items using the batch endpoint\n const batchInsertItems = useMutation({\n mutationFn: (params: BatchInsertDatasetItemsParams) => client.batchInsertDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchInsertItems,\n });\n\n // Batch delete items using the batch endpoint\n const batchDeleteItems = useMutation({\n mutationFn: (params: BatchDeleteDatasetItemsParams) => client.batchDeleteDatasetItems(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.batchDeleteItems,\n });\n\n // @deprecated - use batchDeleteItems mutation instead\n const deleteItems = useMutation({\n mutationFn: async ({ datasetId, itemIds }: { datasetId: string; itemIds: string[] }) => {\n return client.batchDeleteDatasetItems({ datasetId, itemIds });\n },\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-items', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset', variables.datasetId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-versions', variables.datasetId] });\n },\n ...queryOptions?.deleteItems,\n });\n\n const triggerExperiment = useMutation({\n mutationFn: (params: TriggerDatasetExperimentParams) => client.triggerDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n },\n ...queryOptions?.triggerExperiment,\n });\n\n const deleteExperiment = useMutation({\n mutationFn: (experimentId: string) => client.deleteExperiment(experimentId),\n onSuccess: () => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.deleteExperiment,\n });\n\n const updateExperiment = useMutation({\n mutationFn: (params: UpdateDatasetExperimentParams) => client.updateDatasetExperiment(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiments'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiments', variables.datasetId] });\n void queryClient.invalidateQueries({\n queryKey: ['dataset-experiment', variables.datasetId, variables.experimentId],\n });\n },\n ...queryOptions?.updateExperiment,\n });\n\n const updateExperimentResult = useMutation({\n mutationFn: (params: UpdateExperimentResultParams) => client.updateDatasetExperimentResult(params),\n onSuccess: (_, variables) => {\n void queryClient.invalidateQueries({ queryKey: ['experiment-results', variables.experimentId] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-experiment-results'] });\n void queryClient.invalidateQueries({ queryKey: ['review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-review-items'] });\n void queryClient.invalidateQueries({ queryKey: ['dataset-completed-items'] });\n void queryClient.invalidateQueries({ queryKey: ['experiment-review-summary'] });\n },\n ...queryOptions?.updateExperimentResult,\n });\n\n return {\n createDataset,\n updateDataset,\n deleteDataset,\n addItem,\n updateItem,\n deleteItem,\n purgeItem,\n deleteItems,\n batchInsertItems,\n batchDeleteItems,\n triggerExperiment,\n deleteExperiment,\n updateExperiment,\n updateExperimentResult,\n };\n};\n","import type { ExperimentTargetType, ListDatasetsParams, MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey, UseInfiniteQueryResult, UseQueryResult } from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\nimport { useInView } from '../shared/use-in-view';\n\ntype ListDatasetsResponse = Awaited<ReturnType<MastraClient['listDatasets']>>;\ntype DatasetResponse = Awaited<ReturnType<MastraClient['getDataset']>>;\n\n/**\n * Hook to list all datasets with optional pagination\n */\nexport const useDatasets = <TData = ListDatasetsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListDatasetsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['datasets', pagination],\n queryFn: () => client.listDatasets(pagination),\n placeholderData: previousData => previousData,\n ...queryOptions,\n });\n};\n\nconst DATASETS_PER_PAGE = 20;\n\nexport interface DatasetTargetFilter {\n targetType?: ExperimentTargetType | '';\n targetId?: string;\n}\n\nexport type DatasetsOrderBy = NonNullable<ListDatasetsParams['orderBy']>;\n\ntype DatasetRecord = ListDatasetsResponse['datasets'][number];\n\nexport type UseInfiniteDatasetsResult<TData = DatasetRecord[]> = UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n};\n\n/**\n * Hook to list datasets with infinite scroll pagination, optionally scoped server-side to a target.\n * `data` defaults to the flattened dataset list; a user `select` replaces that flattening.\n */\nexport const useInfiniteDatasets = <TData = DatasetRecord[]>({\n filter,\n orderBy,\n queryOptions,\n}: {\n filter?: DatasetTargetFilter;\n orderBy?: DatasetsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ListDatasetsResponse, TData, QueryKey, number>;\n} = {}): UseInfiniteDatasetsResult<TData> => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n const targetType = filter?.targetType || undefined;\n const targetIds = filter?.targetId ? [filter.targetId] : undefined;\n\n const query = useInfiniteQuery({\n queryKey: ['datasets', 'infinite', { targetType, targetIds, orderBy }],\n queryFn: ({ pageParam }) =>\n client.listDatasets({ page: pageParam, perPage: DATASETS_PER_PAGE, targetType, targetIds, orderBy }),\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.datasets?.length || !lastPage.pagination?.hasMore) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n select: (data: InfiniteData<ListDatasetsResponse, number>) =>\n data.pages.flatMap(page => page?.datasets ?? []) as TData,\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n// The datasetIds filter accepts at most 100 ids per request.\nconst DATASET_IDS_PER_REQUEST = 100;\n\n/**\n * Datasets matching the given ids, in one request per 100 ids, e.g. to name the datasets of listed\n * experiments without paging through every dataset. Ids without a dataset are absent from the result.\n */\nexport const useDatasetsByIds = ({\n datasetIds,\n}: {\n datasetIds: readonly string[];\n}): UseQueryResult<DatasetRecord[], Error> => {\n const client = useMastraClient();\n const uniqueIds = [...new Set(datasetIds)].toSorted();\n\n return useQuery({\n queryKey: ['datasets', 'by-ids', uniqueIds],\n enabled: uniqueIds.length > 0,\n queryFn: async () => {\n const batches: string[][] = [];\n for (let index = 0; index < uniqueIds.length; index += DATASET_IDS_PER_REQUEST) {\n batches.push(uniqueIds.slice(index, index + DATASET_IDS_PER_REQUEST));\n }\n const responses = await Promise.all(batches.map(batch => client.listDatasets({ datasetIds: batch })));\n return responses.flatMap(response => response.datasets);\n },\n // Loading more experiments adds ids; keep the names already resolved meanwhile.\n placeholderData: previousData => previousData,\n });\n};\n\n/**\n * Hook to fetch a single dataset by ID\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDataset = <TData = DatasetResponse>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraQueryOptions<DatasetResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['dataset', datasetId],\n queryFn: () => client.getDataset(datasetId),\n ...queryOptions,\n });\n};\n","import type { CompareExperimentsResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\n/**\n * Hook to compare two to ten dataset experiments item by item against a baseline.\n * @param datasetId - ID of the dataset\n * @param experimentIds - IDs of the experiments to compare\n * @param baselineId - ID of the baseline experiment; must be one of `experimentIds` (defaults to the first)\n * @param queryOptions - TanStack Query options, spread last to override defaults\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useCompareExperiments = <TData = CompareExperimentsResponse>({\n datasetId,\n experimentIds,\n baselineId,\n queryOptions,\n}: {\n datasetId: string;\n experimentIds: string[];\n baselineId?: string;\n queryOptions?: MastraQueryOptions<CompareExperimentsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['compare-experiments', datasetId, experimentIds, baselineId],\n queryFn: () => client.compareExperiments({ datasetId, experimentIds, baselineId }),\n ...queryOptions,\n });\n};\n","import type { ClientScoreRowData, DatasetExperimentResult, MastraClient } from '@mastra/client-js';\nimport type { ExperimentStatus } from '@mastra/core/storage';\nimport { queryOptions as tanstackQueryOptions, useInfiniteQuery, useQueries, useQuery } from '@tanstack/react-query';\nimport type {\n InfiniteData,\n QueryKey,\n UseInfiniteQueryResult,\n UseQueryOptions,\n UseQueryResult,\n} from '@tanstack/react-query';\nimport { useEffect } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { useCombineByIds } from '../shared/combine-by-ids';\nimport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport type { MastraInfiniteQueryOptions, MastraQueryOptions } from '../shared/query-options';\n\nexport type { ExperimentQueriesResult } from '../shared/combine-by-ids';\nimport { useInView } from '../shared/use-in-view';\n\ntype DatasetExperimentResponse = Awaited<ReturnType<MastraClient['getDatasetExperiment']>>;\ntype ExperimentResultsPage = Awaited<ReturnType<MastraClient['listDatasetExperimentResults']>>;\ntype ExperimentScoresByEntity = Record<string, ClientScoreRowData[]>;\ntype DatasetExperimentQueryKey = string[];\ntype ExperimentStatusQueryKey = (string | undefined)[];\n\nconst POLL_INTERVAL_MS = 2000;\nconst RESULTS_PER_PAGE = 100;\nconst SCORES_PER_PAGE = 100;\n\nconst isInProgress = (status: string | undefined) => status === 'running' || status === 'pending';\n\n/**\n * Key, fetcher and polling policy of the `dataset-experiment` query, shared by the single and\n * multi-experiment hooks so they hit the same cache entry.\n * Polls every 2 seconds while the experiment is 'running' or 'pending'.\n */\nexport const datasetExperimentQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n): UseQueryOptions<DatasetExperimentResponse, Error, DatasetExperimentResponse, DatasetExperimentQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment', datasetId, experimentId],\n queryFn: () => client.getDatasetExperiment(datasetId, experimentId),\n refetchInterval: query => (isInProgress(query.state.data?.status) ? POLL_INTERVAL_MS : false),\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-scores` query: every score of an experiment, across all\n * pages, grouped by dataset item id. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const experimentScoresQueryOptions = (\n client: MastraClient,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<ExperimentScoresByEntity, Error, ExperimentScoresByEntity, ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-scores', experimentId, experimentStatus],\n queryFn: async (): Promise<ExperimentScoresByEntity> => {\n const allScores: ClientScoreRowData[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listScoresByRunId({ runId: experimentId, page, perPage: SCORES_PER_PAGE });\n allScores.push(...response.scores);\n if (!response.pagination.hasMore) break;\n page++;\n }\n\n const grouped: ExperimentScoresByEntity = {};\n for (const row of allScores) {\n (grouped[row.entityId] ??= []).push(row);\n }\n return grouped;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/**\n * Key and fetcher of the `dataset-experiment-results-all` query: every result of an experiment, across\n * all pages. Polls every 2 seconds while `experimentStatus` is in progress.\n */\nexport const allDatasetExperimentResultsQueryOptions = (\n client: MastraClient,\n datasetId: string,\n experimentId: string,\n experimentStatus: ExperimentStatus | undefined,\n): UseQueryOptions<DatasetExperimentResult[], Error, DatasetExperimentResult[], ExperimentStatusQueryKey> =>\n tanstackQueryOptions({\n queryKey: ['dataset-experiment-results-all', datasetId, experimentId, experimentStatus],\n queryFn: async (): Promise<DatasetExperimentResult[]> => {\n const allResults: DatasetExperimentResult[] = [];\n let page = 0;\n\n while (true) {\n const response = await client.listDatasetExperimentResults(datasetId, experimentId, {\n page,\n perPage: RESULTS_PER_PAGE,\n });\n allResults.push(...response.results);\n if (!response.pagination.hasMore || response.results.length === 0) break;\n page++;\n }\n\n return allResults;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n });\n\n/** An experiment id plus its status, which drives polling of its dependent queries. */\nexport interface ExperimentRef {\n id: string;\n status?: ExperimentStatus;\n}\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperiment = <TData = DatasetExperimentResponse>({\n datasetId,\n experimentId,\n queryOptions,\n}: {\n datasetId: string;\n experimentId: string;\n queryOptions?: MastraQueryOptions<DatasetExperimentResponse, TData, DatasetExperimentQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = datasetExperimentQueryOptions(client, datasetId, experimentId);\n return useQuery<DatasetExperimentResponse, Error, TData, DatasetExperimentQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches several experiments of one dataset in parallel, each polled while it runs.\n * The server 404s an experiment that does not belong to `datasetId`, which surfaces as `error`.\n */\nexport const useDatasetExperimentsQueries = ({\n datasetId,\n experimentIds,\n}: {\n datasetId: string;\n experimentIds: string[];\n}): ExperimentQueriesResult<DatasetExperimentResponse> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResponse>(experimentIds);\n return useQueries({\n queries: experimentIds.map(id => datasetExperimentQueryOptions(client, datasetId, id)),\n combine,\n });\n};\n\nexport type ExperimentResultsOrderBy = NonNullable<\n NonNullable<Parameters<MastraClient['listDatasetExperimentResults']>[2]>['orderBy']\n>;\n\ninterface UseDatasetExperimentResultsParams<TData = DatasetExperimentResult[]> {\n datasetId: string;\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n orderBy?: ExperimentResultsOrderBy;\n queryOptions?: MastraInfiniteQueryOptions<ExperimentResultsPage, TData, QueryKey, number>;\n}\n\n/**\n * Hook to list results for a dataset experiment with infinite scroll pagination.\n * Polls every 2 seconds while experiment status is 'pending' or 'running'.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetExperimentResults = <TData = DatasetExperimentResult[]>({\n datasetId,\n experimentId,\n experimentStatus,\n orderBy,\n queryOptions,\n}: UseDatasetExperimentResultsParams<TData>): UseInfiniteQueryResult<TData, Error> & {\n setEndOfListElement: (element: HTMLDivElement | null) => void;\n} => {\n const client = useMastraClient();\n const { inView: isEndOfListInView, setRef: setEndOfListElement } = useInView();\n\n const query = useInfiniteQuery({\n queryKey: ['dataset-experiment-results', datasetId, experimentId, experimentStatus, orderBy],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetExperimentResults(datasetId, experimentId, {\n page: pageParam,\n perPage: RESULTS_PER_PAGE,\n orderBy,\n });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (!lastPage?.results?.length) {\n return undefined;\n }\n const totalFetched = (lastPageParam + 1) * RESULTS_PER_PAGE;\n const total = lastPage?.pagination?.total ?? 0;\n if (totalFetched >= total) {\n return undefined;\n }\n return lastPageParam + 1;\n },\n refetchInterval: isInProgress(experimentStatus) ? POLL_INTERVAL_MS : false,\n select: (data: InfiniteData<ExperimentResultsPage, number>) => {\n return data.pages.flatMap(page => page?.results ?? []) as TData;\n },\n ...queryOptions,\n });\n\n useEffect(() => {\n if (isEndOfListInView && query.hasNextPage && !query.isFetchingNextPage) {\n void query.fetchNextPage();\n }\n }, [isEndOfListInView, query]);\n\n return { ...query, setEndOfListElement };\n};\n\n/**\n * Fetches every result (all pages) of several experiments of one dataset in parallel.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useAllDatasetExperimentResultsQueries = ({\n datasetId,\n experiments,\n}: {\n datasetId: string;\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<DatasetExperimentResult[]> => {\n const client = useMastraClient();\n const combine = useCombineByIds<DatasetExperimentResult[]>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment =>\n allDatasetExperimentResultsQueryOptions(client, datasetId, experiment.id, experiment.status),\n ),\n combine,\n });\n};\n\n/**\n * Hook to fetch all scores for an experiment, transformed to Record<entityId, ClientScoreRowData[]>\n * Paginates through all pages to ensure no scores are silently dropped.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useScoresByExperimentId = <TData = ExperimentScoresByEntity>({\n experimentId,\n experimentStatus,\n queryOptions,\n}: {\n experimentId: string;\n experimentStatus?: ExperimentStatus;\n queryOptions?: MastraQueryOptions<ExperimentScoresByEntity, TData, ExperimentStatusQueryKey>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const { queryKey, queryFn, refetchInterval } = experimentScoresQueryOptions(client, experimentId, experimentStatus);\n return useQuery<ExperimentScoresByEntity, Error, TData, ExperimentStatusQueryKey>({\n queryKey,\n queryFn,\n refetchInterval,\n ...queryOptions,\n });\n};\n\n/**\n * Fetches every score of several experiments in parallel, each grouped by dataset item id.\n * Each experiment is polled while its `status` is in progress.\n */\nexport const useScoresByExperimentIdsQueries = ({\n experiments,\n}: {\n experiments: ExperimentRef[];\n}): ExperimentQueriesResult<ExperimentScoresByEntity> => {\n const client = useMastraClient();\n const combine = useCombineByIds<ExperimentScoresByEntity>(experiments.map(experiment => experiment.id));\n return useQueries({\n queries: experiments.map(experiment => experimentScoresQueryOptions(client, experiment.id, experiment.status)),\n combine,\n });\n};\n","import type { DatasetItemVersionResponse } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport type DatasetItemVersion = DatasetItemVersionResponse & {\n validTo: number | null;\n isDeleted: boolean;\n isLatest: boolean;\n};\n\n/**\n * Hook to fetch full item history (SCD-2 rows).\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersions = <TData = DatasetItemVersion[]>({\n datasetId,\n itemId,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n queryOptions?: MastraQueryOptions<DatasetItemVersion[], TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-versions', datasetId, itemId],\n queryFn: async (): Promise<DatasetItemVersion[]> => {\n const res = await client.getItemHistory(datasetId, itemId);\n\n return (res?.history ?? []).map(\n (version, index): DatasetItemVersion => ({\n id: version.id,\n datasetId: version.datasetId,\n datasetVersion: version.datasetVersion,\n input: version.input,\n groundTruth: version.groundTruth,\n expectedTrajectory: version.expectedTrajectory,\n toolMocks: version.toolMocks ?? undefined,\n scorerIds: version.scorerIds ?? undefined,\n requestContext: version.requestContext ?? undefined,\n metadata: version.metadata ?? undefined,\n validTo: version.validTo,\n isDeleted: version.isDeleted,\n createdAt: version.createdAt,\n updatedAt: version.updatedAt,\n isLatest: index === 0,\n }),\n );\n },\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a specific version of a dataset item.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetItemVersion = <TData = DatasetItemVersion>({\n datasetId,\n itemId,\n datasetVersion,\n latestVersion,\n queryOptions,\n}: {\n datasetId: string;\n itemId: string;\n datasetVersion: number;\n latestVersion?: number;\n queryOptions?: MastraQueryOptions<DatasetItemVersion, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['dataset-item-version', datasetId, itemId, datasetVersion],\n queryFn: async (): Promise<DatasetItemVersion> => {\n const v = await client.getDatasetItemVersion(datasetId, itemId, datasetVersion);\n\n return {\n id: v.id,\n datasetId: v.datasetId,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n expectedTrajectory: v.expectedTrajectory,\n toolMocks: v.toolMocks ?? undefined,\n scorerIds: v.scorerIds ?? undefined,\n requestContext: v.requestContext ?? undefined,\n metadata: v.metadata ?? undefined,\n validTo: null,\n isDeleted: false,\n createdAt: v.createdAt,\n updatedAt: v.updatedAt,\n isLatest: latestVersion != null ? datasetVersion === latestVersion : false,\n };\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useInfiniteQuery } from '@tanstack/react-query';\nimport type { InfiniteData, QueryKey } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraInfiniteQueryOptions } from '../shared/query-options';\n\nexport interface DatasetVersion {\n id?: string;\n datasetId?: string;\n version: number;\n createdAt?: Date | string;\n isCurrent: boolean;\n}\n\ntype DatasetVersionsPage = Awaited<ReturnType<MastraClient['listDatasetVersions']>>;\n\nconst PER_PAGE = 10;\n\n/**\n * Hook to fetch dataset versions from the API with infinite pagination.\n * `data` defaults to the flattened `DatasetVersion[]`; a user `select` replaces that.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useDatasetVersions = <TData = DatasetVersion[]>({\n datasetId,\n queryOptions,\n}: {\n datasetId: string;\n queryOptions?: MastraInfiniteQueryOptions<DatasetVersionsPage, TData, QueryKey, number>;\n}) => {\n const client = useMastraClient();\n\n return useInfiniteQuery({\n queryKey: ['dataset-versions', datasetId],\n queryFn: async ({ pageParam }) => {\n return client.listDatasetVersions(datasetId, { page: pageParam, perPage: PER_PAGE });\n },\n initialPageParam: 0,\n getNextPageParam: (lastPage, _, lastPageParam) => {\n if (lastPage?.pagination?.hasMore) {\n return lastPageParam + 1;\n }\n return undefined;\n },\n select: (data: InfiniteData<DatasetVersionsPage, number>) => {\n return data.pages\n .flatMap(page => page?.versions ?? [])\n .map(\n (v, index): DatasetVersion => ({\n id: v.id,\n datasetId: v.datasetId,\n version: v.version,\n createdAt: v.createdAt,\n isCurrent: index === 0,\n }),\n ) as TData;\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ListExperimentsResponse = Awaited<ReturnType<MastraClient['listExperiments']>>;\ntype GetExperimentResponse = Awaited<ReturnType<MastraClient['getExperiment']>>;\n\n/**\n * Hook to list all experiments across all datasets with optional pagination\n */\nexport const useExperiments = <TData = ListExperimentsResponse>({\n pagination,\n queryOptions,\n}: {\n pagination?: { page?: number; perPage?: number };\n queryOptions?: MastraQueryOptions<ListExperimentsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiments', pagination],\n queryFn: () => client.listExperiments(pagination),\n ...queryOptions,\n });\n};\n\n/**\n * Hook to fetch a single experiment by ID without knowing its dataset\n */\nexport const useExperiment = <TData = GetExperimentResponse>({\n experimentId,\n queryOptions,\n}: {\n experimentId: string;\n queryOptions?: MastraQueryOptions<GetExperimentResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['experiment', experimentId],\n queryFn: () => client.getExperiment(experimentId),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype WorkflowSchemaResponse = Awaited<ReturnType<ReturnType<MastraClient['getWorkflow']>['getSchema']>>;\n\n/**\n * Hook to fetch workflow input/output schema by workflow ID.\n * Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.\n *\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport function useWorkflowSchema<TData = WorkflowSchemaResponse>({\n workflowId,\n queryOptions,\n}: {\n workflowId: string | null;\n queryOptions?: MastraQueryOptions<WorkflowSchemaResponse, TData>;\n}): UseQueryResult<TData, Error> {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['workflow-schema', workflowId],\n queryFn: async () => {\n if (!workflowId) throw new Error('No workflow selected');\n return client.getWorkflow(workflowId).getSchema();\n },\n staleTime: 5 * 60 * 1000, // Cache for 5 minutes\n ...queryOptions,\n });\n}\n"],"mappings":"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"}
|