/** * A/B TESTING & EXPERIMENTATION - Model comparison framework * Traffic splitting, statistical significance, champion/challenger patterns */ export declare enum SplitStrategy { PERCENTAGE = "percentage", USER_ID = "user_id", SESSION_ID = "session_id", RANDOM = "random", WEIGHTED = "weighted" } export declare enum ExperimentStatus { DRAFT = "draft", ACTIVE = "active", PAUSED = "paused", COMPLETED = "completed", CANCELLED = "cancelled" } export interface Experiment { id: string; name: string; description?: string; status: ExperimentStatus; variants: Variant[]; split_strategy: SplitStrategy; start_date?: Date; end_date?: Date; metrics: MetricDefinition[]; targeting_rules?: TargetingRule[]; created_at: Date; updated_at: Date; } export interface Variant { id: string; name: string; config: VariantConfig; traffic_percentage: number; is_control: boolean; } export interface VariantConfig { model?: string; provider?: string; routing_strategy?: string; parameters?: Record; custom_config?: Record; } export interface MetricDefinition { name: string; type: 'conversion' | 'latency' | 'cost' | 'quality' | 'custom'; goal: 'minimize' | 'maximize'; primary: boolean; } export interface TargetingRule { id: string; type: 'user_attribute' | 'session_attribute' | 'custom'; attribute: string; operator: 'equals' | 'not_equals' | 'contains' | 'greater_than' | 'less_than' | 'in'; value: unknown; } export interface Assignment { experiment_id: string; variant_id: string; user_id: string; session_id?: string; assigned_at: Date; metadata?: Record; } export interface ExperimentResult { experiment_id: string; variant_id: string; variant_name: string; metrics: Record; sample_size: number; confidence_level?: number; is_significant?: boolean; recommendation?: 'winner' | 'loser' | 'inconclusive'; } export interface VariantMetrics { mean: number; median?: number; std_dev?: number; min?: number; max?: number; count: number; sum?: number; p95?: number; p99?: number; } export interface StatisticalTest { test_type: 't-test' | 'z-test' | 'chi-square'; p_value: number; confidence_level: number; is_significant: boolean; effect_size?: number; power?: number; } export declare class ExperimentManager { private experiments; private assignments; private metric_data; /** * Create a new experiment */ createExperiment(experiment: Omit): Experiment; /** * Get experiment by ID */ getExperiment(experiment_id: string): Experiment | null; /** * Update experiment */ updateExperiment(experiment_id: string, updates: Partial): Experiment | null; /** * Assign user to variant */ assign(experiment_id: string, user_id: string, session_id?: string): Assignment | null; /** * Get assignment for user */ getAssignment(experiment_id: string, user_id: string): Assignment | null; /** * Record metric value */ recordMetric(experiment_id: string, variant_id: string, metric_name: string, value: number): void; /** * Get experiment results */ getResults(experiment_id: string): ExperimentResult[]; /** * Perform statistical comparison */ compareVariants(experiment_id: string, control_variant_id: string, treatment_variant_id: string, metric_name: string, confidence_level?: number): StatisticalTest | null; /** * Get winning variant */ getWinner(experiment_id: string, metric_name: string): Variant | null; /** * List all experiments */ listExperiments(status?: ExperimentStatus): Experiment[]; private selectVariant; private selectByPercentage; private selectByHash; private hashString; private getAssignmentKey; private getMetricValues; private getVariantSampleSize; private calculateMetrics; private mean; private median; private percentile; private standardDeviation; private performTTest; private approximatePValue; private standardNormalCDF; private generateId; } //# sourceMappingURL=ab-testing.d.ts.map