Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

workflow.ts 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import type { Fetcher } from 'swr'
  2. import { get, post } from './base'
  3. import type { CommonResponse } from '@/models/common'
  4. import type {
  5. ChatRunHistoryResponse,
  6. ConversationVariableResponse,
  7. FetchWorkflowDraftResponse,
  8. NodesDefaultConfigsResponse,
  9. WorkflowRunHistoryResponse,
  10. } from '@/types/workflow'
  11. import type { BlockEnum } from '@/app/components/workflow/types'
  12. import type { VarInInspect } from '@/types/workflow'
  13. import type { FlowType } from '@/types/common'
  14. import { getFlowPrefix } from './utils'
  15. export const fetchWorkflowDraft = (url: string) => {
  16. return get(url, {}, { silent: true }) as Promise<FetchWorkflowDraftResponse>
  17. }
  18. export const syncWorkflowDraft = ({ url, params }: {
  19. url: string
  20. params: Pick<FetchWorkflowDraftResponse, 'graph' | 'features' | 'environment_variables' | 'conversation_variables'>
  21. }) => {
  22. return post<CommonResponse & { updated_at: number; hash: string }>(url, { body: params }, { silent: true })
  23. }
  24. export const fetchNodesDefaultConfigs: Fetcher<NodesDefaultConfigsResponse, string> = (url) => {
  25. return get<NodesDefaultConfigsResponse>(url)
  26. }
  27. export const fetchWorkflowRunHistory: Fetcher<WorkflowRunHistoryResponse, string> = (url) => {
  28. return get<WorkflowRunHistoryResponse>(url)
  29. }
  30. export const fetchChatRunHistory: Fetcher<ChatRunHistoryResponse, string> = (url) => {
  31. return get<ChatRunHistoryResponse>(url)
  32. }
  33. export const singleNodeRun = (flowType: FlowType, flowId: string, nodeId: string, params: object) => {
  34. return post(`${getFlowPrefix(flowType)}/${flowId}/workflows/draft/nodes/${nodeId}/run`, { body: params })
  35. }
  36. export const getIterationSingleNodeRunUrl = (flowType: FlowType, isChatFlow: boolean, flowId: string, nodeId: string) => {
  37. return `${getFlowPrefix(flowType)}/${flowId}/${isChatFlow ? 'advanced-chat/' : ''}workflows/draft/iteration/nodes/${nodeId}/run`
  38. }
  39. export const getLoopSingleNodeRunUrl = (flowType: FlowType, isChatFlow: boolean, flowId: string, nodeId: string) => {
  40. return `${getFlowPrefix(flowType)}/${flowId}/${isChatFlow ? 'advanced-chat/' : ''}workflows/draft/loop/nodes/${nodeId}/run`
  41. }
  42. export const fetchPublishedWorkflow: Fetcher<FetchWorkflowDraftResponse, string> = (url) => {
  43. return get<FetchWorkflowDraftResponse>(url)
  44. }
  45. export const stopWorkflowRun = (url: string) => {
  46. return post<CommonResponse>(url)
  47. }
  48. export const fetchNodeDefault = (appId: string, blockType: BlockEnum, query = {}) => {
  49. return get(`apps/${appId}/workflows/default-workflow-block-configs/${blockType}`, {
  50. params: { q: JSON.stringify(query) },
  51. })
  52. }
  53. export const fetchPipelineNodeDefault = (pipelineId: string, blockType: BlockEnum, query = {}) => {
  54. return get(`rag/pipelines/${pipelineId}/workflows/default-workflow-block-configs/${blockType}`, {
  55. params: { q: JSON.stringify(query) },
  56. })
  57. }
  58. // TODO: archived
  59. export const updateWorkflowDraftFromDSL = (appId: string, data: string) => {
  60. return post<FetchWorkflowDraftResponse>(`apps/${appId}/workflows/draft/import`, { body: { data } })
  61. }
  62. export const fetchCurrentValueOfConversationVariable: Fetcher<ConversationVariableResponse, {
  63. url: string
  64. params: { conversation_id: string }
  65. }> = ({ url, params }) => {
  66. return get<ConversationVariableResponse>(url, { params })
  67. }
  68. const fetchAllInspectVarsOnePage = async (flowType: FlowType, flowId: string, page: number): Promise<{ total: number, items: VarInInspect[] }> => {
  69. return get(`${getFlowPrefix(flowType)}/${flowId}/workflows/draft/variables`, {
  70. params: { page, limit: 100 },
  71. })
  72. }
  73. export const fetchAllInspectVars = async (flowType: FlowType, flowId: string): Promise<VarInInspect[]> => {
  74. const res = await fetchAllInspectVarsOnePage(flowType, flowId, 1)
  75. const { items, total } = res
  76. if (total <= 100)
  77. return items
  78. const pageCount = Math.ceil(total / 100)
  79. const promises = []
  80. for (let i = 2; i <= pageCount; i++)
  81. promises.push(fetchAllInspectVarsOnePage(flowType, flowId, i))
  82. const restData = await Promise.all(promises)
  83. restData.forEach(({ items: item }) => {
  84. items.push(...item)
  85. })
  86. return items
  87. }
  88. export const fetchNodeInspectVars = async (flowType: FlowType, flowId: string, nodeId: string): Promise<VarInInspect[]> => {
  89. const { items } = (await get(`${getFlowPrefix(flowType)}/${flowId}/workflows/draft/nodes/${nodeId}/variables`)) as { items: VarInInspect[] }
  90. return items
  91. }