/** * workflow/config.ts * Configuration schemas, validation, and defaults * * Uses Zod for runtime validation and type safety */ import { z } from "zod"; import { AIProviderName } from "../constants/enums.js"; import type { JsonValue, ConditioningConfig, ExecutionConfig, JudgeConfig, WorkflowModelConfig, ModelGroup, WorkflowConfig, WorkflowValidation } from "../types/index.js"; export declare const MIN_SCORE = 0; export declare const MAX_SCORE = 100; export declare const MAX_REASONING_LENGTH = 200; export declare const PLACEHOLDER_PROVIDER = "none"; export declare const PLACEHOLDER_MODEL = "none"; export declare const WORKFLOW_CREATION_DATE = "2025-11-29T00:00:00.000Z"; /** * Model configuration schema */ export declare const ModelConfigSchema: z.ZodObject<{ provider: z.ZodType>; model: z.ZodString; weight: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; systemPrompt: z.ZodOptional; timeout: z.ZodOptional; topP: z.ZodOptional; topK: z.ZodOptional; presencePenalty: z.ZodOptional; frequencyPenalty: z.ZodOptional; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>; /** * Judge configuration schema * NOTE: Testing phase enforces 0-100 score scale */ export declare const JudgeConfigSchema: z.ZodObject<{ provider: z.ZodType>; model: z.ZodString; criteria: z.ZodArray; outputFormat: z.ZodEnum<{ scores: "scores"; detailed: "detailed"; ranking: "ranking"; best: "best"; }>; customPrompt: z.ZodOptional; systemPrompt: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; timeout: z.ZodOptional; blindEvaluation: z.ZodOptional; includeReasoning: z.ZodBoolean; scoreScale: z.ZodObject<{ min: z.ZodLiteral<0>; max: z.ZodLiteral<100>; }, z.core.$strip>; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>; /** * Conditioning configuration schema */ export declare const ConditioningConfigSchema: z.ZodObject<{ useConfidence: z.ZodBoolean; confidenceThresholds: z.ZodOptional>; toneAdjustment: z.ZodOptional>; includeMetadata: z.ZodOptional; metadataFields: z.ZodOptional>; addConfidenceStatement: z.ZodOptional; addModelAttribution: z.ZodOptional; addExecutionTime: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>; /** * Model group schema for layer-based execution */ export declare const ModelGroupSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodOptional; description: z.ZodOptional; models: z.ZodArray>; model: z.ZodString; weight: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; systemPrompt: z.ZodOptional; timeout: z.ZodOptional; topP: z.ZodOptional; topK: z.ZodOptional; presencePenalty: z.ZodOptional; frequencyPenalty: z.ZodOptional; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; executionStrategy: z.ZodEnum<{ parallel: "parallel"; sequential: "sequential"; }>; continueOnFailure: z.ZodDefault>; minSuccessful: z.ZodDefault>; parallelism: z.ZodOptional; timeout: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>; /** * Execution configuration schema */ export declare const ExecutionConfigSchema: z.ZodObject<{ timeout: z.ZodOptional; modelTimeout: z.ZodOptional; judgeTimeout: z.ZodOptional; retries: z.ZodOptional; retryDelay: z.ZodOptional; retryableErrors: z.ZodOptional>; parallelism: z.ZodOptional; earlyTermination: z.ZodOptional; minResponses: z.ZodOptional; maxCost: z.ZodOptional; costThreshold: z.ZodOptional; enableMetrics: z.ZodOptional; enableTracing: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>; export declare const WorkflowConfigSchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; description: z.ZodOptional; version: z.ZodOptional; type: z.ZodEnum<{ custom: "custom"; chain: "chain"; adaptive: "adaptive"; ensemble: "ensemble"; }>; models: z.ZodArray>; model: z.ZodString; weight: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; systemPrompt: z.ZodOptional; timeout: z.ZodOptional; topP: z.ZodOptional; topK: z.ZodOptional; presencePenalty: z.ZodOptional; frequencyPenalty: z.ZodOptional; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; modelGroups: z.ZodOptional; description: z.ZodOptional; models: z.ZodArray>; model: z.ZodString; weight: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; systemPrompt: z.ZodOptional; timeout: z.ZodOptional; topP: z.ZodOptional; topK: z.ZodOptional; presencePenalty: z.ZodOptional; frequencyPenalty: z.ZodOptional; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; executionStrategy: z.ZodEnum<{ parallel: "parallel"; sequential: "sequential"; }>; continueOnFailure: z.ZodDefault>; minSuccessful: z.ZodDefault>; parallelism: z.ZodOptional; timeout: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>>; defaultSystemPrompt: z.ZodOptional; defaultJudgePrompt: z.ZodOptional; judge: z.ZodOptional>; model: z.ZodString; criteria: z.ZodArray; outputFormat: z.ZodEnum<{ scores: "scores"; detailed: "detailed"; ranking: "ranking"; best: "best"; }>; customPrompt: z.ZodOptional; systemPrompt: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; timeout: z.ZodOptional; blindEvaluation: z.ZodOptional; includeReasoning: z.ZodBoolean; scoreScale: z.ZodObject<{ min: z.ZodLiteral<0>; max: z.ZodLiteral<100>; }, z.core.$strip>; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; judges: z.ZodOptional>; model: z.ZodString; criteria: z.ZodArray; outputFormat: z.ZodEnum<{ scores: "scores"; detailed: "detailed"; ranking: "ranking"; best: "best"; }>; customPrompt: z.ZodOptional; systemPrompt: z.ZodOptional; temperature: z.ZodOptional; maxTokens: z.ZodOptional; timeout: z.ZodOptional; blindEvaluation: z.ZodOptional; includeReasoning: z.ZodBoolean; scoreScale: z.ZodObject<{ min: z.ZodLiteral<0>; max: z.ZodLiteral<100>; }, z.core.$strip>; label: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>>; conditioning: z.ZodOptional>; toneAdjustment: z.ZodOptional>; includeMetadata: z.ZodOptional; metadataFields: z.ZodOptional>; addConfidenceStatement: z.ZodOptional; addModelAttribution: z.ZodOptional; addExecutionTime: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; execution: z.ZodOptional; modelTimeout: z.ZodOptional; judgeTimeout: z.ZodOptional; retries: z.ZodOptional; retryDelay: z.ZodOptional; retryableErrors: z.ZodOptional>; parallelism: z.ZodOptional; earlyTermination: z.ZodOptional; minResponses: z.ZodOptional; maxCost: z.ZodOptional; costThreshold: z.ZodOptional; enableMetrics: z.ZodOptional; enableTracing: z.ZodOptional; metadata: z.ZodOptional>>>; }, z.core.$strip>>; tags: z.ZodOptional>; metadata: z.ZodOptional>>>; createdAt: z.ZodOptional; updatedAt: z.ZodOptional; }, z.core.$strip>; /** * Default conditioning configuration * NOTE: Testing phase - stub only, no actual conditioning applied */ export declare const DEFAULT_CONDITIONING_CONFIG: ConditioningConfig; /** * Default execution configuration */ export declare const DEFAULT_EXECUTION_CONFIG: ExecutionConfig; /** * Default score scale (0-100 for testing phase) */ export declare const DEFAULT_SCORE_SCALE: { readonly min: 0; readonly max: 100; }; /** * Check if workflow uses layer-based execution (modelGroups) * @param config - Workflow configuration * @returns True if modelGroups is defined and has groups */ export declare function usesModelGroups(config: WorkflowConfig): boolean; /** * Get all models from workflow (either from flat array or groups) * @param config - Workflow configuration * @returns Array of all model configs */ export declare function getAllModels(config: WorkflowConfig): WorkflowModelConfig[]; /** * Get model groups (converts flat models to single group if needed) * @param config - Workflow configuration * @returns Array of model groups */ export declare function getModelGroups(config: WorkflowConfig): ModelGroup[]; /** * Default judge configuration values */ export declare const DEFAULT_JUDGE_CONFIG: { temperature: number; outputFormat: "detailed"; blindEvaluation: boolean; includeReasoning: boolean; scoreScale: { readonly min: 0; readonly max: 100; }; }; /** * Merge configuration with defaults * @param config - Workflow configuration to merge * @returns Complete workflow configuration with defaults applied */ export declare function mergeWithDefaults(config: WorkflowConfig): WorkflowConfig; /** * Validate workflow configuration * @param config - Partial workflow configuration to validate * @returns Validation result with parsed data or error details */ export declare function validateWorkflowConfig(config: Partial): WorkflowValidation; /** * Create workflow configuration from partial * @param partial - Partial configuration with required fields (id, name, type, models) * @returns Complete workflow configuration with defaults applied */ export declare function createWorkflowConfig(partial: Partial & Pick): WorkflowConfig; /** * Validate model configuration * @param config - Partial model configuration to validate * @returns Validation result with parsed data or error details */ export declare function validateModelConfig(config: Partial): WorkflowValidation; /** * Validate judge configuration * @param config - Partial judge configuration to validate * @returns Validation result with parsed data or error details */ export declare function validateJudgeConfig(config: Partial): WorkflowValidation; /** * Check if workflow has judge configuration * @param config - Workflow configuration to check * @returns True if workflow has at least one judge configured */ export declare function hasJudge(config: WorkflowConfig): boolean; /** * Get all judges from workflow configuration * @param config - Workflow configuration * @returns Array of all judge configurations (empty if none) */ export declare function getAllJudges(config: WorkflowConfig): JudgeConfig[]; /** * Calculate estimated workflow cost (placeholder) * TODO: Implement actual provider-specific pricing * @param config - Workflow configuration * @param estimatedTokens - Estimated number of tokens for the request * @returns Estimated cost in USD */ export declare function estimateWorkflowCost(config: WorkflowConfig, estimatedTokens: number): number;