@mastra/react 1.13.0-alpha.3 → 1.13.0-alpha.5
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/{accumulator-BmD8-x9I.cjs → accumulator-Bjfckb5t.cjs} +5 -9
- package/dist/{accumulator-BmD8-x9I.cjs.map → accumulator-Bjfckb5t.cjs.map} +1 -1
- package/dist/{accumulator-D9jAph99.js → accumulator-DysrPe6U.js} +5 -9
- package/dist/{accumulator-D9jAph99.js.map → accumulator-DysrPe6U.js.map} +1 -1
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{combine-by-ids-CcaZKGT9.js → combine-by-ids-C-0oe4eH.js} +2 -3
- package/dist/{combine-by-ids-CcaZKGT9.js.map → combine-by-ids-C-0oe4eH.js.map} +1 -1
- package/dist/{combine-by-ids-D_lp6Dvq.cjs → combine-by-ids-ERVPXXBi.cjs} +2 -3
- package/dist/{combine-by-ids-D_lp6Dvq.cjs.map → combine-by-ids-ERVPXXBi.cjs.map} +1 -1
- package/dist/{experiments-CJw1N3FB.cjs → experiments-Duv0RgkM.cjs} +12 -19
- package/dist/{experiments-CJw1N3FB.cjs.map → experiments-Duv0RgkM.cjs.map} +1 -1
- package/dist/{experiments-B7vRMK5T.js → experiments-DyecjEut.js} +12 -19
- package/dist/{experiments-B7vRMK5T.js.map → experiments-DyecjEut.js.map} +1 -1
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs → feedback-refetch-interval-BBcT9r8s.cjs} +3 -4
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs.map → feedback-refetch-interval-BBcT9r8s.cjs.map} +1 -1
- package/dist/{feedback-refetch-interval-DLHzQoVV.js → feedback-refetch-interval-C12Nzb2r.js} +3 -4
- package/dist/{feedback-refetch-interval-DLHzQoVV.js.map → feedback-refetch-interval-C12Nzb2r.js.map} +1 -1
- package/dist/hooks/agents/index.cjs +19 -37
- package/dist/hooks/agents/index.cjs.map +1 -1
- package/dist/hooks/agents/index.js +19 -37
- package/dist/hooks/agents/index.js.map +1 -1
- package/dist/hooks/auth/index.cjs +11 -21
- package/dist/hooks/auth/index.cjs.map +1 -1
- package/dist/hooks/auth/index.js +11 -21
- package/dist/hooks/auth/index.js.map +1 -1
- package/dist/hooks/capabilities/index.cjs +11 -21
- package/dist/hooks/capabilities/index.cjs.map +1 -1
- package/dist/hooks/capabilities/index.js +11 -21
- package/dist/hooks/capabilities/index.js.map +1 -1
- package/dist/hooks/configuration/index.cjs +2 -3
- package/dist/hooks/configuration/index.js +2 -3
- package/dist/hooks/datasets/index.cjs +12 -21
- package/dist/hooks/datasets/index.cjs.map +1 -1
- package/dist/hooks/datasets/index.js +12 -21
- package/dist/hooks/datasets/index.js.map +1 -1
- package/dist/hooks/embedders/index.cjs +2 -3
- package/dist/hooks/embedders/index.js +2 -3
- package/dist/hooks/experiments/index.cjs +1 -1
- package/dist/hooks/experiments/index.js +1 -1
- package/dist/hooks/feedback/index.cjs +3 -4
- package/dist/hooks/feedback/index.js +3 -4
- package/dist/hooks/llm/index.cjs +2 -3
- package/dist/hooks/llm/index.js +2 -3
- package/dist/hooks/logs/index.cjs +4 -5
- package/dist/hooks/logs/index.js +4 -5
- package/dist/hooks/mcps/index.cjs +8 -15
- package/dist/hooks/mcps/index.cjs.map +1 -1
- package/dist/hooks/mcps/index.js +8 -15
- package/dist/hooks/mcps/index.js.map +1 -1
- package/dist/hooks/memory/index.cjs +5 -9
- package/dist/hooks/memory/index.cjs.map +1 -1
- package/dist/hooks/memory/index.js +5 -9
- package/dist/hooks/memory/index.js.map +1 -1
- package/dist/hooks/metrics/index.cjs +19 -36
- package/dist/hooks/metrics/index.cjs.map +1 -1
- package/dist/hooks/metrics/index.js +19 -36
- package/dist/hooks/metrics/index.js.map +1 -1
- package/dist/hooks/processors/index.cjs +2 -3
- package/dist/hooks/processors/index.js +2 -3
- package/dist/hooks/prompt-blocks/index.cjs +3 -5
- package/dist/hooks/prompt-blocks/index.cjs.map +1 -1
- package/dist/hooks/prompt-blocks/index.js +3 -5
- package/dist/hooks/prompt-blocks/index.js.map +1 -1
- package/dist/hooks/query/index.cjs +2 -3
- package/dist/hooks/query/index.js +2 -3
- package/dist/hooks/review/index.cjs +4 -6
- package/dist/hooks/review/index.cjs.map +1 -1
- package/dist/hooks/review/index.js +4 -6
- package/dist/hooks/review/index.js.map +1 -1
- package/dist/hooks/schedules/index.cjs +6 -10
- package/dist/hooks/schedules/index.cjs.map +1 -1
- package/dist/hooks/schedules/index.js +6 -10
- package/dist/hooks/schedules/index.js.map +1 -1
- package/dist/hooks/scores/index.cjs +8 -13
- package/dist/hooks/scores/index.cjs.map +1 -1
- package/dist/hooks/scores/index.js +8 -13
- package/dist/hooks/scores/index.js.map +1 -1
- package/dist/hooks/templates/index.cjs +2 -3
- package/dist/hooks/templates/index.js +2 -3
- package/dist/hooks/tool-providers/index.cjs +10 -19
- package/dist/hooks/tool-providers/index.cjs.map +1 -1
- package/dist/hooks/tool-providers/index.js +10 -19
- package/dist/hooks/tool-providers/index.js.map +1 -1
- package/dist/hooks/tools/index.cjs +3 -5
- package/dist/hooks/tools/index.cjs.map +1 -1
- package/dist/hooks/tools/index.js +3 -5
- package/dist/hooks/tools/index.js.map +1 -1
- package/dist/hooks/traces/index.cjs +71 -54
- package/dist/hooks/traces/index.cjs.map +1 -1
- package/dist/hooks/traces/index.d.ts +2 -0
- package/dist/hooks/traces/index.d.ts.map +1 -1
- package/dist/hooks/traces/index.js +70 -55
- package/dist/hooks/traces/index.js.map +1 -1
- package/dist/hooks/traces/use-span-aggregate.d.ts +16 -0
- package/dist/hooks/traces/use-span-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts +17 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts +4 -2
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts.map +1 -1
- package/dist/hooks/vectors/index.cjs +2 -3
- package/dist/hooks/vectors/index.js +2 -3
- package/dist/hooks/voice/index.cjs +3 -4
- package/dist/hooks/voice/index.js +3 -4
- package/dist/hooks/workflows/index.cjs +7 -11
- package/dist/hooks/workflows/index.cjs.map +1 -1
- package/dist/hooks/workflows/index.js +7 -11
- package/dist/hooks/workflows/index.js.map +1 -1
- package/dist/hooks/workspace/index.cjs +12 -22
- package/dist/hooks/workspace/index.cjs.map +1 -1
- package/dist/hooks/workspace/index.js +12 -22
- package/dist/hooks/workspace/index.js.map +1 -1
- package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
- package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
- package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
- package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
- package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
- package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
- package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
- package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
- package/dist/index.cjs +7 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
- package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
- package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
- package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
- package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
- package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
- package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
- package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
- package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
- package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
- package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
- package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
- package/dist/ui/index.cjs +15 -30
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.js +14 -28
- package/dist/ui/index.js.map +1 -1
- package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
- package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
- package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
- package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
- package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
- package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
- package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
- package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
- package/package.json +19 -19
|
@@ -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 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,9 +1,9 @@
|
|
|
1
|
-
import { n as useMastraClient } from "../../mastra-client-context-
|
|
2
|
-
import { t as useInView } from "../../use-in-view-
|
|
3
|
-
import { t as useCombineByIds } from "../../combine-by-ids-
|
|
1
|
+
import { n as useMastraClient } from "../../mastra-client-context-DQ5z_ze9.js";
|
|
2
|
+
import { t as useInView } from "../../use-in-view-CyjKdplM.js";
|
|
3
|
+
import { t as useCombineByIds } from "../../combine-by-ids-C-0oe4eH.js";
|
|
4
4
|
import { useEffect } from "react";
|
|
5
5
|
import { queryOptions, useInfiniteQuery, useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
6
|
-
|
|
6
|
+
// src/hooks/datasets/use-dataset-items.ts
|
|
7
7
|
/**
|
|
8
8
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
9
9
|
*/
|
|
@@ -65,8 +65,7 @@ const useDatasetItems = ({ datasetId, search, version, orderBy, queryOptions })
|
|
|
65
65
|
setEndOfListElement
|
|
66
66
|
};
|
|
67
67
|
};
|
|
68
|
-
|
|
69
|
-
//#region src/hooks/datasets/use-dataset-mutations.ts
|
|
68
|
+
// src/hooks/datasets/use-dataset-mutations.ts
|
|
70
69
|
/**
|
|
71
70
|
* Hook providing mutation functions for datasets, items, and runs
|
|
72
71
|
* All mutations invalidate relevant query caches on success.
|
|
@@ -247,8 +246,7 @@ const useDatasetMutations = ({ queryOptions } = {}) => {
|
|
|
247
246
|
})
|
|
248
247
|
};
|
|
249
248
|
};
|
|
250
|
-
|
|
251
|
-
//#region src/hooks/datasets/use-datasets.ts
|
|
249
|
+
// src/hooks/datasets/use-datasets.ts
|
|
252
250
|
/**
|
|
253
251
|
* Hook to list all datasets with optional pagination
|
|
254
252
|
*/
|
|
@@ -340,8 +338,7 @@ const useDataset = ({ datasetId, queryOptions }) => {
|
|
|
340
338
|
...queryOptions
|
|
341
339
|
});
|
|
342
340
|
};
|
|
343
|
-
|
|
344
|
-
//#region src/hooks/datasets/use-compare-experiments.ts
|
|
341
|
+
// src/hooks/datasets/use-compare-experiments.ts
|
|
345
342
|
/**
|
|
346
343
|
* Hook to compare two to ten dataset experiments item by item against a baseline.
|
|
347
344
|
* @param datasetId - ID of the dataset
|
|
@@ -368,8 +365,7 @@ const useCompareExperiments = ({ datasetId, experimentIds, baselineId, queryOpti
|
|
|
368
365
|
...queryOptions
|
|
369
366
|
});
|
|
370
367
|
};
|
|
371
|
-
|
|
372
|
-
//#region src/hooks/datasets/use-dataset-experiments.ts
|
|
368
|
+
// src/hooks/datasets/use-dataset-experiments.ts
|
|
373
369
|
const POLL_INTERVAL_MS = 2e3;
|
|
374
370
|
const RESULTS_PER_PAGE = 100;
|
|
375
371
|
const SCORES_PER_PAGE = 100;
|
|
@@ -557,8 +553,7 @@ const useScoresByExperimentIdsQueries = ({ experiments }) => {
|
|
|
557
553
|
combine
|
|
558
554
|
});
|
|
559
555
|
};
|
|
560
|
-
|
|
561
|
-
//#region src/hooks/datasets/use-dataset-item-versions.ts
|
|
556
|
+
// src/hooks/datasets/use-dataset-item-versions.ts
|
|
562
557
|
/**
|
|
563
558
|
* Hook to fetch full item history (SCD-2 rows).
|
|
564
559
|
*
|
|
@@ -631,8 +626,7 @@ const useDatasetItemVersion = ({ datasetId, itemId, datasetVersion, latestVersio
|
|
|
631
626
|
...queryOptions
|
|
632
627
|
});
|
|
633
628
|
};
|
|
634
|
-
|
|
635
|
-
//#region src/hooks/datasets/use-dataset-versions.ts
|
|
629
|
+
// src/hooks/datasets/use-dataset-versions.ts
|
|
636
630
|
const PER_PAGE = 10;
|
|
637
631
|
/**
|
|
638
632
|
* Hook to fetch dataset versions from the API with infinite pagination.
|
|
@@ -666,8 +660,7 @@ const useDatasetVersions = ({ datasetId, queryOptions }) => {
|
|
|
666
660
|
...queryOptions
|
|
667
661
|
});
|
|
668
662
|
};
|
|
669
|
-
|
|
670
|
-
//#region src/hooks/datasets/use-experiments.ts
|
|
663
|
+
// src/hooks/datasets/use-experiments.ts
|
|
671
664
|
/**
|
|
672
665
|
* Hook to list all experiments across all datasets with optional pagination
|
|
673
666
|
*/
|
|
@@ -690,8 +683,7 @@ const useExperiment = ({ experimentId, queryOptions }) => {
|
|
|
690
683
|
...queryOptions
|
|
691
684
|
});
|
|
692
685
|
};
|
|
693
|
-
|
|
694
|
-
//#region src/hooks/datasets/use-workflow-schema.ts
|
|
686
|
+
// src/hooks/datasets/use-workflow-schema.ts
|
|
695
687
|
/**
|
|
696
688
|
* Hook to fetch workflow input/output schema by workflow ID.
|
|
697
689
|
* Returns { inputSchema, outputSchema } where each is Record<string, unknown> | null.
|
|
@@ -710,7 +702,6 @@ function useWorkflowSchema({ workflowId, queryOptions }) {
|
|
|
710
702
|
...queryOptions
|
|
711
703
|
});
|
|
712
704
|
}
|
|
713
|
-
//#endregion
|
|
714
705
|
export { allDatasetExperimentResultsQueryOptions, datasetExperimentQueryOptions, experimentScoresQueryOptions, useAllDatasetExperimentResultsQueries, useCompareExperiments, useDataset, useDatasetExperiment, useDatasetExperimentResults, useDatasetExperimentsQueries, useDatasetItem, useDatasetItemVersion, useDatasetItemVersions, useDatasetItems, useDatasetMutations, useDatasetVersions, useDatasets, useDatasetsByIds, useExperiment, useExperiments, useInfiniteDatasets, useScoresByExperimentId, useScoresByExperimentIdsQueries, useWorkflowSchema };
|
|
715
706
|
|
|
716
707
|
//# sourceMappingURL=index.js.map
|