/**
 * workflow/core/ensembleExecutor.ts
 * Parallel execution engine for ensemble workflows
 */
import type { EnsembleResponse, ExecutionConfig, ModelGroup, EnsembleExecutionResult, ExecuteEnsembleOptions } from "../../types/index.js";
/**
 * Execute ensemble of models in parallel
 * @param options - Execution options including prompt and models
 * @returns Ensemble execution result with all responses and metrics
 */
export declare function executeEnsemble(options: ExecuteEnsembleOptions): Promise<EnsembleExecutionResult>;
/**
 * Filter successful responses from ensemble result
 * @param responses - Array of ensemble responses
 * @returns Array of successful responses
 */
export declare function getSuccessfulResponses(responses: EnsembleResponse[]): EnsembleResponse[];
/**
 * Get response by model identifier
 * @param responses - Array of ensemble responses
 * @param provider - Provider name
 * @param model - Model name
 * @returns Response for specified model or undefined
 */
export declare function getResponseByModel(responses: EnsembleResponse[], provider: string, model: string): EnsembleResponse | undefined;
/**
 * Calculate total tokens used across all responses
 * @param responses - Array of ensemble responses
 * @returns Total token count
 */
export declare function calculateTotalTokens(responses: EnsembleResponse[]): number;
/**
 * Sort responses by response time
 * @param responses - Array of ensemble responses
 * @param ascending - Sort in ascending order (default: true)
 * @returns Sorted array of responses
 */
export declare function sortByResponseTime(responses: EnsembleResponse[], ascending?: boolean): EnsembleResponse[];
/**
 * Get fastest successful response
 * @param responses - Array of ensemble responses
 * @returns Fastest successful response or undefined
 */
export declare function getFastestResponse(responses: EnsembleResponse[]): EnsembleResponse | undefined;
/**
 * Execute model groups sequentially (layers)
 * Each group executes according to its executionStrategy
 * @param groups - Array of model groups to execute
 * @param prompt - User prompt
 * @param executionConfig - Execution configuration
 * @param systemPrompt - Direct system prompt override
 * @param workflowDefaultSystemPrompt - Workflow-level default system prompt
 * @returns Ensemble execution result with all responses
 */
export declare function executeModelGroups(groups: ModelGroup[], prompt: string, _executionConfig?: ExecutionConfig, systemPrompt?: string, workflowDefaultSystemPrompt?: string): Promise<EnsembleExecutionResult>;
