Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. import type { MutationOptions } from '@tanstack/react-query'
  2. import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
  3. import { del, get, patch, post } from './base'
  4. import { DatasourceType } from '@/models/pipeline'
  5. import type {
  6. ConversionResponse,
  7. DatasourceNodeSingleRunRequest,
  8. DatasourceNodeSingleRunResponse,
  9. DeleteTemplateResponse,
  10. ExportTemplateDSLResponse,
  11. ImportPipelineDSLConfirmResponse,
  12. ImportPipelineDSLRequest,
  13. ImportPipelineDSLResponse,
  14. OnlineDocumentPreviewRequest,
  15. OnlineDocumentPreviewResponse,
  16. PipelineCheckDependenciesResponse,
  17. PipelineExecutionLogRequest,
  18. PipelineExecutionLogResponse,
  19. PipelinePreProcessingParamsRequest,
  20. PipelinePreProcessingParamsResponse,
  21. PipelineProcessingParamsRequest,
  22. PipelineProcessingParamsResponse,
  23. PipelineTemplateByIdRequest,
  24. PipelineTemplateByIdResponse,
  25. PipelineTemplateListParams,
  26. PipelineTemplateListResponse,
  27. PublishedPipelineInfoResponse,
  28. PublishedPipelineRunPreviewResponse,
  29. PublishedPipelineRunRequest,
  30. PublishedPipelineRunResponse,
  31. UpdateTemplateInfoRequest,
  32. UpdateTemplateInfoResponse,
  33. } from '@/models/pipeline'
  34. import type { DataSourceItem } from '@/app/components/workflow/block-selector/types'
  35. import type { ToolCredential } from '@/app/components/tools/types'
  36. import type { IconInfo } from '@/models/datasets'
  37. import { useInvalid } from './use-base'
  38. const NAME_SPACE = 'pipeline'
  39. export const PipelineTemplateListQueryKeyPrefix = [NAME_SPACE, 'template-list']
  40. export const usePipelineTemplateList = (params: PipelineTemplateListParams) => {
  41. return useQuery<PipelineTemplateListResponse>({
  42. queryKey: [...PipelineTemplateListQueryKeyPrefix, params.type],
  43. queryFn: () => {
  44. return get<PipelineTemplateListResponse>('/rag/pipeline/templates', { params })
  45. },
  46. })
  47. }
  48. export const useInvalidCustomizedTemplateList = () => {
  49. return useInvalid([...PipelineTemplateListQueryKeyPrefix, 'customized'])
  50. }
  51. export const usePipelineTemplateById = (params: PipelineTemplateByIdRequest, enabled: boolean) => {
  52. const { template_id, type } = params
  53. return useQuery<PipelineTemplateByIdResponse>({
  54. queryKey: [NAME_SPACE, 'template', template_id],
  55. queryFn: () => {
  56. return get<PipelineTemplateByIdResponse>(`/rag/pipeline/templates/${template_id}`, {
  57. params: {
  58. type,
  59. },
  60. })
  61. },
  62. enabled,
  63. })
  64. }
  65. export const useUpdateTemplateInfo = (
  66. mutationOptions: MutationOptions<UpdateTemplateInfoResponse, Error, UpdateTemplateInfoRequest> = {},
  67. ) => {
  68. return useMutation({
  69. mutationKey: [NAME_SPACE, 'template-update'],
  70. mutationFn: (request: UpdateTemplateInfoRequest) => {
  71. const { template_id, ...rest } = request
  72. return patch<UpdateTemplateInfoResponse>(`/rag/pipeline/customized/templates/${template_id}`, {
  73. body: rest,
  74. })
  75. },
  76. ...mutationOptions,
  77. })
  78. }
  79. export const useDeleteTemplate = (
  80. mutationOptions: MutationOptions<DeleteTemplateResponse, Error, string> = {},
  81. ) => {
  82. return useMutation({
  83. mutationKey: [NAME_SPACE, 'template-delete'],
  84. mutationFn: (templateId: string) => {
  85. return del<DeleteTemplateResponse>(`/rag/pipeline/customized/templates/${templateId}`)
  86. },
  87. ...mutationOptions,
  88. })
  89. }
  90. export const useExportTemplateDSL = (
  91. mutationOptions: MutationOptions<ExportTemplateDSLResponse, Error, string> = {},
  92. ) => {
  93. return useMutation({
  94. mutationKey: [NAME_SPACE, 'template-dsl-export'],
  95. mutationFn: (templateId: string) => {
  96. return post<ExportTemplateDSLResponse>(`/rag/pipeline/customized/templates/${templateId}`)
  97. },
  98. ...mutationOptions,
  99. })
  100. }
  101. export const useImportPipelineDSL = (
  102. mutationOptions: MutationOptions<ImportPipelineDSLResponse, Error, ImportPipelineDSLRequest> = {},
  103. ) => {
  104. return useMutation({
  105. mutationKey: [NAME_SPACE, 'dsl-import'],
  106. mutationFn: (request: ImportPipelineDSLRequest) => {
  107. return post<ImportPipelineDSLResponse>('/rag/pipelines/imports', { body: request })
  108. },
  109. ...mutationOptions,
  110. })
  111. }
  112. export const useImportPipelineDSLConfirm = (
  113. mutationOptions: MutationOptions<ImportPipelineDSLConfirmResponse, Error, string> = {},
  114. ) => {
  115. return useMutation({
  116. mutationKey: [NAME_SPACE, 'dsl-import-confirm'],
  117. mutationFn: (importId: string) => {
  118. return post<ImportPipelineDSLConfirmResponse>(`/rag/pipelines/imports/${importId}/confirm`)
  119. },
  120. ...mutationOptions,
  121. })
  122. }
  123. export const useCheckPipelineDependencies = (
  124. mutationOptions: MutationOptions<PipelineCheckDependenciesResponse, Error, string> = {},
  125. ) => {
  126. return useMutation({
  127. mutationKey: [NAME_SPACE, 'check-dependencies'],
  128. mutationFn: (pipelineId: string) => {
  129. return get<PipelineCheckDependenciesResponse>(`/rag/pipelines/imports/${pipelineId}/check-dependencies`)
  130. },
  131. ...mutationOptions,
  132. })
  133. }
  134. export const useDraftPipelineProcessingParams = (params: PipelineProcessingParamsRequest, enabled = true) => {
  135. const { pipeline_id, node_id } = params
  136. return useQuery<PipelineProcessingParamsResponse>({
  137. queryKey: [NAME_SPACE, 'draft-pipeline-processing-params', pipeline_id, node_id],
  138. queryFn: () => {
  139. return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`, {
  140. params: {
  141. node_id,
  142. },
  143. })
  144. },
  145. staleTime: 0,
  146. enabled,
  147. })
  148. }
  149. export const usePublishedPipelineProcessingParams = (params: PipelineProcessingParamsRequest) => {
  150. const { pipeline_id, node_id } = params
  151. return useQuery<PipelineProcessingParamsResponse>({
  152. queryKey: [NAME_SPACE, 'published-pipeline-processing-params', pipeline_id, node_id],
  153. queryFn: () => {
  154. return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, {
  155. params: {
  156. node_id,
  157. },
  158. })
  159. },
  160. staleTime: 0,
  161. })
  162. }
  163. export const useDataSourceList = (enabled: boolean, onSuccess?: (v: DataSourceItem[]) => void) => {
  164. return useQuery<DataSourceItem[]>({
  165. enabled,
  166. queryKey: [NAME_SPACE, 'datasource'],
  167. staleTime: 0,
  168. queryFn: async () => {
  169. const data = await get<DataSourceItem[]>('/rag/pipelines/datasource-plugins')
  170. onSuccess?.(data)
  171. return data
  172. },
  173. retry: false,
  174. })
  175. }
  176. export const useInvalidDataSourceList = () => {
  177. return useInvalid([NAME_SPACE, 'datasource'])
  178. }
  179. export const publishedPipelineInfoQueryKeyPrefix = [NAME_SPACE, 'published-pipeline']
  180. export const usePublishedPipelineInfo = (pipelineId: string) => {
  181. return useQuery<PublishedPipelineInfoResponse>({
  182. queryKey: [...publishedPipelineInfoQueryKeyPrefix, pipelineId],
  183. queryFn: () => {
  184. return get<PublishedPipelineInfoResponse>(`/rag/pipelines/${pipelineId}/workflows/publish`)
  185. },
  186. enabled: !!pipelineId,
  187. })
  188. }
  189. export const useRunPublishedPipeline = (
  190. mutationOptions: MutationOptions<PublishedPipelineRunPreviewResponse | PublishedPipelineRunResponse, Error, PublishedPipelineRunRequest> = {},
  191. ) => {
  192. return useMutation({
  193. mutationKey: [NAME_SPACE, 'run-published-pipeline'],
  194. mutationFn: (request: PublishedPipelineRunRequest) => {
  195. const { pipeline_id: pipelineId, is_preview, ...rest } = request
  196. return post<PublishedPipelineRunPreviewResponse | PublishedPipelineRunResponse>(`/rag/pipelines/${pipelineId}/workflows/published/run`, {
  197. body: {
  198. ...rest,
  199. is_preview,
  200. response_mode: 'blocking',
  201. },
  202. })
  203. },
  204. ...mutationOptions,
  205. })
  206. }
  207. export const useDataSourceCredentials = (provider: string, pluginId: string, onSuccess: (value: ToolCredential[]) => void) => {
  208. return useQuery({
  209. queryKey: [NAME_SPACE, 'datasource-credentials', provider, pluginId],
  210. queryFn: async () => {
  211. const result = await get<{ result: ToolCredential[] }>(`/auth/plugin/datasource?provider=${provider}&plugin_id=${pluginId}`)
  212. onSuccess(result.result)
  213. return result.result
  214. },
  215. enabled: !!provider && !!pluginId,
  216. retry: 2,
  217. })
  218. }
  219. export const useUpdateDataSourceCredentials = (
  220. ) => {
  221. const queryClient = useQueryClient()
  222. return useMutation({
  223. mutationKey: [NAME_SPACE, 'update-datasource-credentials'],
  224. mutationFn: ({
  225. provider,
  226. pluginId,
  227. credentials,
  228. name,
  229. }: { provider: string; pluginId: string; credentials: Record<string, any>; name: string; }) => {
  230. return post('/auth/plugin/datasource', {
  231. body: {
  232. provider,
  233. plugin_id: pluginId,
  234. credentials,
  235. name,
  236. },
  237. }).then(() => {
  238. queryClient.invalidateQueries({
  239. queryKey: [NAME_SPACE, 'datasource'],
  240. })
  241. })
  242. },
  243. })
  244. }
  245. export const useDraftPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => {
  246. const { pipeline_id, node_id } = params
  247. return useQuery<PipelinePreProcessingParamsResponse>({
  248. queryKey: [NAME_SPACE, 'draft-pipeline-pre-processing-params', pipeline_id, node_id],
  249. queryFn: () => {
  250. return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/pre-processing/parameters`, {
  251. params: {
  252. node_id,
  253. },
  254. })
  255. },
  256. staleTime: 0,
  257. enabled,
  258. })
  259. }
  260. export const usePublishedPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => {
  261. const { pipeline_id, node_id } = params
  262. return useQuery<PipelinePreProcessingParamsResponse>({
  263. queryKey: [NAME_SPACE, 'published-pipeline-pre-processing-params', pipeline_id, node_id],
  264. queryFn: () => {
  265. return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/pre-processing/parameters`, {
  266. params: {
  267. node_id,
  268. },
  269. })
  270. },
  271. staleTime: 0,
  272. enabled,
  273. })
  274. }
  275. export const useExportPipelineDSL = () => {
  276. return useMutation({
  277. mutationKey: [NAME_SPACE, 'export-pipeline-dsl'],
  278. mutationFn: ({
  279. pipelineId,
  280. include = false,
  281. }: { pipelineId: string; include?: boolean }) => {
  282. return get<ExportTemplateDSLResponse>(`/rag/pipelines/${pipelineId}/exports?include_secret=${include}`)
  283. },
  284. })
  285. }
  286. export const usePublishAsCustomizedPipeline = () => {
  287. return useMutation({
  288. mutationKey: [NAME_SPACE, 'publish-as-customized-pipeline'],
  289. mutationFn: ({
  290. pipelineId,
  291. name,
  292. icon_info,
  293. description,
  294. }: {
  295. pipelineId: string,
  296. name: string,
  297. icon_info: IconInfo,
  298. description?: string,
  299. }) => {
  300. return post(`/rag/pipelines/${pipelineId}/customized/publish`, {
  301. body: {
  302. name,
  303. icon_info,
  304. description,
  305. },
  306. })
  307. },
  308. })
  309. }
  310. export const usePipelineExecutionLog = (params: PipelineExecutionLogRequest) => {
  311. const { dataset_id, document_id } = params
  312. return useQuery<PipelineExecutionLogResponse>({
  313. queryKey: [NAME_SPACE, 'pipeline-execution-log', dataset_id, document_id],
  314. queryFn: () => {
  315. return get<PipelineExecutionLogResponse>(`/datasets/${dataset_id}/documents/${document_id}/pipeline-execution-log`)
  316. },
  317. staleTime: 0,
  318. })
  319. }
  320. export const usePreviewOnlineDocument = () => {
  321. return useMutation({
  322. mutationKey: [NAME_SPACE, 'preview-online-document'],
  323. mutationFn: (params: OnlineDocumentPreviewRequest) => {
  324. const { pipelineId, datasourceNodeId, workspaceID, pageID, pageType, credentialId } = params
  325. return post<OnlineDocumentPreviewResponse>(
  326. `/rag/pipelines/${pipelineId}/workflows/published/datasource/nodes/${datasourceNodeId}/preview`,
  327. {
  328. body: {
  329. datasource_type: DatasourceType.onlineDocument,
  330. credential_id: credentialId,
  331. inputs: {
  332. workspace_id: workspaceID,
  333. page_id: pageID,
  334. type: pageType,
  335. },
  336. },
  337. },
  338. )
  339. },
  340. })
  341. }
  342. export const useConvertDatasetToPipeline = () => {
  343. return useMutation({
  344. mutationKey: [NAME_SPACE, 'convert-dataset-to-pipeline'],
  345. mutationFn: (datasetId: string) => {
  346. return post<ConversionResponse>(`/rag/pipelines/transform/datasets/${datasetId}`)
  347. },
  348. })
  349. }
  350. export const useDatasourceSingleRun = (
  351. mutationOptions: MutationOptions<DatasourceNodeSingleRunResponse, Error, DatasourceNodeSingleRunRequest> = {},
  352. ) => {
  353. return useMutation({
  354. mutationKey: [NAME_SPACE, 'datasource-node-single-run'],
  355. mutationFn: (params: DatasourceNodeSingleRunRequest) => {
  356. const { pipeline_id: pipelineId, ...rest } = params
  357. return post<DatasourceNodeSingleRunResponse>(`/rag/pipelines/${pipelineId}/workflows/draft/datasource/variables-inspect`, {
  358. body: rest,
  359. })
  360. },
  361. ...mutationOptions,
  362. })
  363. }