import { randomUUID } from 'node:crypto' import type { RunWorkflowPayload, WorkflowEnvironment, WorkflowGraph, WorkflowVersion } from './workflows.ts' import { buildWorkflowSpec } from './workflow-spec-builders.ts' export function buildRunInput( name: string, content: string, opts?: { id?: string type?: 'text' | 'file' required?: boolean files?: Array<{ fileUrl: string, name: string, vaultReference?: string }> }, ): Record { const type = opts?.type ?? 'text' const files = opts?.files ?? [] if (type === 'file' && files.length > 0) { return { ...(opts?.id && { id: opts.id }), name, type, required: opts?.required ?? true, content: { files: files.map(file => ({ file_url: file.fileUrl, file_name: file.name, vault_reference: file.vaultReference, })), }, files, } } return { ...(opts?.id && { id: opts.id }), name, type, required: opts?.required ?? true, content, files: [], } } export function buildRunPayload(params: { id?: string promptVersionId: string graph?: WorkflowGraph spec?: Record workflowSpec?: Record inputs?: Record promptId?: string environment?: WorkflowEnvironment version?: WorkflowVersion }): RunWorkflowPayload { const definition = (params.workflowSpec ?? params.spec ?? buildWorkflowSpec()) as RunWorkflowPayload['definition'] return { id: params.id ?? randomUUID(), definition, workflowSpec: params.workflowSpec, inputs: params.inputs ?? {}, promptVersionId: params.promptVersionId, graph: params.graph, ...(params.promptId && { promptId: params.promptId }), environment: params.environment ?? 'test-case', version: params.version ?? 'v3', } }