dify/web/service/workflow-generator.ts
Crazywoola 7865ffd429
chore: Improve workflow generator accessibility and API contracts (#38838)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-13 09:15:54 +00:00

55 lines
2.1 KiB
TypeScript

import type {
WorkflowGeneratePayload,
WorkflowGeneratePlanEventResponse,
WorkflowGenerateResponse,
WorkflowInstructionSuggestionsPayload,
} from '@dify/contracts/api/console/workflow-generate/types.gen'
// The generated client handles JSON endpoints. Streaming remains on the
// generator-specific SSE adapter until oRPC supports this event framing.
import { consoleClient, streamWorkflowGeneration } from './client'
export type GenerateWorkflowBody = WorkflowGeneratePayload
export type GenerateWorkflowResponse = WorkflowGenerateResponse
export type WorkflowGenPlan = WorkflowGeneratePlanEventResponse
export type WorkflowInstructionSuggestionsBody = WorkflowInstructionSuggestionsPayload
export type GenerateWorkflowOptions = {
getAbortController?: (controller: AbortController) => void
}
export function generateWorkflow(body: GenerateWorkflowBody, options?: GenerateWorkflowOptions) {
const controller = new AbortController()
options?.getAbortController?.(controller)
return consoleClient.workflowGenerate.post({ body }, { signal: controller.signal })
}
export type GenerateWorkflowStreamCallbacks = {
onPlan?: (plan: WorkflowGenPlan) => void
onResult?: (result: GenerateWorkflowResponse) => void
onError?: (message: string) => void
onCompleted?: () => void
getAbortController?: (controller: AbortController) => void
}
export function generateWorkflowStream(
body: GenerateWorkflowBody,
callbacks: GenerateWorkflowStreamCallbacks,
) {
return streamWorkflowGeneration('/workflow-generate/stream', body, {
onPlan: (data) => callbacks.onPlan?.(data as WorkflowGenPlan),
onResult: (data) => callbacks.onResult?.(data as GenerateWorkflowResponse),
onError: callbacks.onError,
onCompleted: callbacks.onCompleted,
getAbortController: callbacks.getAbortController,
})
}
export function fetchWorkflowInstructionSuggestions(
body: WorkflowInstructionSuggestionsBody,
options?: GenerateWorkflowOptions,
) {
const controller = new AbortController()
options?.getAbortController?.(controller)
return consoleClient.workflowGenerate.suggestions.post({ body }, { signal: controller.signal })
}