import type { MutationOptions } from '@tanstack/react-query' import { useMutation, useQuery } from '@tanstack/react-query' import { del, get, patch, post } from './base' import type { DeleteTemplateResponse, ExportTemplateDSLResponse, ImportPipelineDSLConfirmResponse, ImportPipelineDSLRequest, ImportPipelineDSLResponse, PipelineCheckDependenciesResponse, PipelineDatasourceNodeRunRequest, PipelineDatasourceNodeRunResponse, PipelineProcessingParamsRequest, PipelineProcessingParamsResponse, PipelineTemplateByIdResponse, PipelineTemplateListParams, PipelineTemplateListResponse, PublishedPipelineInfoResponse, UpdateTemplateInfoRequest, UpdateTemplateInfoResponse, } from '@/models/pipeline' import type { ToolWithProvider } from '@/app/components/workflow/types' const NAME_SPACE = 'pipeline' export const usePipelineTemplateList = (params: PipelineTemplateListParams) => { return useQuery({ queryKey: [NAME_SPACE, 'template', 'list'], queryFn: () => { return get('/rag/pipeline/templates', { params }) }, }) } export const usePipelineTemplateById = (templateId: string, enabled: boolean) => { return useQuery({ queryKey: [NAME_SPACE, 'template', templateId], queryFn: () => { return get(`/rag/pipeline/templates/${templateId}`) }, enabled, }) } export const useUpdateTemplateInfo = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'template', 'update'], mutationFn: (request: UpdateTemplateInfoRequest) => { const { template_id, ...rest } = request return patch(`/rag/customized/templates/${template_id}`, { body: rest, }) }, ...mutationOptions, }) } export const useDeleteTemplate = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'template', 'delete'], mutationFn: (templateId: string) => { return del(`/rag/customized/templates/${templateId}`) }, ...mutationOptions, }) } export const useExportTemplateDSL = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'dsl-export'], mutationFn: (templateId: string) => { return get(`/rag/customized/templates/${templateId}`) }, ...mutationOptions, }) } export const useImportPipelineDSL = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'dsl-import'], mutationFn: (request: ImportPipelineDSLRequest) => { return post('/rag/pipelines/imports', { body: request }) }, ...mutationOptions, }) } export const useImportPipelineDSLConfirm = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'dsl-import-confirm'], mutationFn: (importId: string) => { return post(`/rag/pipelines/imports/${importId}/confirm`) }, ...mutationOptions, }) } export const useCheckPipelineDependencies = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'check-dependencies'], mutationFn: (pipelineId: string) => { return post(`/rag/pipelines/imports/${pipelineId}/check-dependencies`) }, ...mutationOptions, }) } export const useDatasourceNodeRun = ( mutationOptions: MutationOptions = {}, ) => { return useMutation({ mutationKey: [NAME_SPACE, 'datasource-node-run'], mutationFn: (request: PipelineDatasourceNodeRunRequest) => { const { pipeline_id, node_id, ...rest } = request return post(`/rag/pipelines/${pipeline_id}/workflows/published/nodes/${node_id}/run`, { body: rest, }) }, ...mutationOptions, }) } export const useDraftPipelineProcessingParams = (params: PipelineProcessingParamsRequest) => { const { pipeline_id, node_id } = params return useQuery({ queryKey: [NAME_SPACE, 'pipeline-processing-params', pipeline_id], queryFn: () => { return get(`/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`, { params: { node_id, }, }) }, staleTime: 0, }) } export const usePublishedPipelineProcessingParams = (params: PipelineProcessingParamsRequest) => { const { pipeline_id, node_id } = params return useQuery({ queryKey: [NAME_SPACE, 'pipeline-processing-params', pipeline_id], queryFn: () => { return get(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, { params: { node_id, }, }) }, }) } export const useDataSourceList = (enabled: boolean, onSuccess: (v: ToolWithProvider[]) => void) => { return useQuery({ enabled, queryKey: [NAME_SPACE, 'datasource'], queryFn: async () => { const data = await get('/rag/pipelines/datasource-plugins') onSuccess(data) return data }, retry: false, }) } export const usePublishedPipelineInfo = (pipelineId: string) => { return useQuery({ queryKey: [NAME_SPACE, 'published-pipeline', pipelineId], queryFn: () => { return get(`/rag/pipelines/${pipelineId}/workflows/publish`) }, enabled: !!pipelineId, }) }