/** * ThinkHive SDK v3.0 - Evaluation Health API * * API for eval saturation monitoring, regression detection, and health reports */ export type SaturationType = 'ceiling' | 'floor' | 'healthy'; export type HealthStatus = 'healthy' | 'warning' | 'critical'; export type RegressionSeverity = 'minor' | 'moderate' | 'severe'; export interface EvalHealthSnapshot { id: string; companyId: string; agentId: string; criterionId?: string; snapshotDate: string; passRate?: string; evalCount?: number; meanScore?: string; saturationType?: SaturationType; daysAtSaturation?: number; trendDirection?: string; trendStrength?: string; healthStatus?: HealthStatus; healthScore?: string; createdAt: string; } export interface EvalRegression { id: string; companyId: string; agentId: string; criterionId?: string; severity: RegressionSeverity; baselinePassRate: string; currentPassRate: string; delta: string; deltaPercent?: string; baselinePeriodStart: string; baselinePeriodEnd: string; currentPeriodStart: string; currentPeriodEnd: string; baselineEvalCount?: number; currentEvalCount?: number; suspectedCauses?: unknown[]; isSignificant?: boolean; isResolved: boolean; isAcknowledged: boolean; resolvedAt?: string; resolvedBy?: string; resolutionType?: string; resolutionNotes?: string; acknowledgedAt?: string; acknowledgedBy?: string; detectedAt: string; createdAt: string; } export interface HealthReport { agentId: string; generatedAt: string; overallHealth: HealthStatus; overallScore: number; passRate: number; evalCount: number; saturationStatus: { type: SaturationType; daysAtSaturation: number; recommendation: string; }; regressionCount: number; activeRegressions: EvalRegression[]; trend: { direction: 'improving' | 'stable' | 'declining'; strength: number; description: string; }; recommendations: string[]; } export interface CreateSnapshotOptions { agentId: string; criterionId?: string; snapshotDate: string; passRate?: string; evalCount?: number; meanScore?: string; saturationType?: SaturationType; daysAtSaturation?: number; trendDirection?: string; trendStrength?: string; healthStatus?: HealthStatus; healthScore?: string; } export interface CreateRegressionOptions { agentId: string; criterionId?: string; severity: RegressionSeverity; baselinePassRate: string; currentPassRate: string; delta: string; deltaPercent?: string; baselinePeriodStart: string; baselinePeriodEnd: string; currentPeriodStart: string; currentPeriodEnd: string; baselineEvalCount?: number; currentEvalCount?: number; suspectedCauses?: unknown[]; isSignificant?: boolean; detectedAt?: string; } export interface ResolveRegressionOptions { resolutionType: string; notes?: string; } export interface GetSnapshotsOptions { agentId: string; criterionId?: string; startDate?: string; endDate?: string; } /** * Evaluation Health API client for monitoring eval quality and detecting regressions */ export declare const evalHealth: { /** * Get comprehensive health report for an agent * * @example * ```typescript * const report = await evalHealth.getReport('agent_123'); * console.log(`Overall health: ${report.overallHealth}`); * console.log(`Active regressions: ${report.regressionCount}`); * ``` */ getReport(agentId: string): Promise; /** * Get historical health snapshots * * @example * ```typescript * const snapshots = await evalHealth.getSnapshots({ * agentId: 'agent_123', * startDate: '2024-01-01T00:00:00Z', * endDate: '2024-01-31T23:59:59Z', * }); * ``` */ getSnapshots(options: GetSnapshotsOptions): Promise; /** * Get latest health snapshot * * @example * ```typescript * const snapshot = await evalHealth.getLatestSnapshot('agent_123'); * ``` */ getLatestSnapshot(agentId: string, criterionId?: string): Promise; /** * Record a health snapshot * * @example * ```typescript * const snapshot = await evalHealth.recordSnapshot({ * agentId: 'agent_123', * snapshotDate: new Date().toISOString(), * passRate: '0.85', * evalCount: 150, * healthStatus: 'healthy', * }); * ``` */ recordSnapshot(options: CreateSnapshotOptions): Promise; /** * Get unresolved regressions for an agent * * @example * ```typescript * const regressions = await evalHealth.getRegressions('agent_123'); * for (const regression of regressions) { * console.log(`${regression.severity}: ${regression.delta}% drop`); * } * ``` */ getRegressions(agentId: string): Promise; /** * Record a new regression * * @example * ```typescript * const regression = await evalHealth.recordRegression({ * agentId: 'agent_123', * severity: 'moderate', * baselinePassRate: '0.92', * currentPassRate: '0.78', * delta: '-0.14', * baselinePeriodStart: '2024-01-01T00:00:00Z', * baselinePeriodEnd: '2024-01-15T23:59:59Z', * currentPeriodStart: '2024-01-16T00:00:00Z', * currentPeriodEnd: '2024-01-31T23:59:59Z', * }); * ``` */ recordRegression(options: CreateRegressionOptions): Promise; /** * Resolve a regression * * @example * ```typescript * await evalHealth.resolveRegression('regression_123', { * resolutionType: 'fixed', * notes: 'Updated prompt template to address quality issues', * }); * ``` */ resolveRegression(regressionId: string, options: ResolveRegressionOptions): Promise; /** * Acknowledge a regression * * @example * ```typescript * await evalHealth.acknowledgeRegression('regression_123'); * ``` */ acknowledgeRegression(regressionId: string): Promise; }; /** * Check if health status indicates an issue * * @param status - Health status to check * @returns Whether the status indicates a problem */ export declare function hasHealthIssue(status: HealthStatus): boolean; /** * Get severity level as numeric value for sorting * * @param severity - Regression severity * @returns Numeric severity (1-3, higher is worse) */ export declare function getSeverityLevel(severity: RegressionSeverity): number; /** * Check if evaluation is saturated * * @param snapshot - Health snapshot to check * @returns Whether evaluation is at ceiling or floor */ export declare function isSaturated(snapshot: EvalHealthSnapshot): boolean; /** * Get recommendation for saturation type * * @param saturationType - Type of saturation * @returns Recommendation string */ export declare function getSaturationRecommendation(saturationType: SaturationType): string;