UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

80 lines (67 loc) 2.54 kB
/** * Workflow Builder Service * * Coordinator service for routing workflow requests to specific implementations * Maintains clean separation between coordination and business logic */ import { PromptBuilder } from '@saintno/comfyui-sdk'; import debug from 'debug'; import { getWorkflowBuilder } from '@/server/services/comfyui/config/workflowRegistry'; import { ComfyUIClientService } from '@/server/services/comfyui/core/comfyUIClientService'; import { ModelResolverService } from '@/server/services/comfyui/core/modelResolverService'; import { WorkflowError } from '@/server/services/comfyui/errors'; import type { WorkflowDetectionResult } from '@/server/services/comfyui/utils/workflowDetector'; const log = debug('lobe-image:comfyui:workflow-builder'); /** * Workflow context for builders */ export interface WorkflowContext { clientService: ComfyUIClientService; modelResolverService: ModelResolverService; variant?: string; } /** * Workflow Builder Service - Coordinator Only * Routes workflow requests to appropriate implementations */ export class WorkflowBuilderService { private context: WorkflowContext; constructor(context: WorkflowContext) { this.context = context; } /** * Build workflow based on model detection result * Uses the configuration-driven workflow builder lookup */ async buildWorkflow( modelId: string, detectionResult: WorkflowDetectionResult, modelFileName: string, params: Record<string, any>, ): Promise<PromptBuilder<any, any, any>> { log('Building workflow for:', modelId, 'architecture:', detectionResult.architecture); const { isSupported, architecture, variant } = detectionResult; if (!isSupported) { throw new WorkflowError( WorkflowError.Reasons.UNSUPPORTED_MODEL, `Unsupported model architecture: ${architecture}`, { architecture, modelId, variant }, ); } // Get workflow builder from configuration const workflowBuilder = getWorkflowBuilder(architecture, variant); if (!workflowBuilder) { throw new WorkflowError( WorkflowError.Reasons.UNSUPPORTED_MODEL, `No workflow builder found for architecture: ${architecture}, variant: ${variant}`, { architecture, modelId, variant }, ); } // Create context with variant for this specific workflow build const contextWithVariant: WorkflowContext = { ...this.context, variant, }; return workflowBuilder(modelFileName, params, contextWithVariant); } }