/**
 * Anti-slop quality judge.
 *
 * Deterministic pattern-based quality check — no LLM call. Catches the
 * 80% of AI slop that every production agent leaks:
 *   - Banned phrases (voice-specific: "delve", "it's worth noting", etc.)
 *   - N-gram repetition (same phrase over and over)
 *   - Hedging overuse ("I could be wrong, but...")
 *   - Apology padding ("I'm so sorry for the confusion...")
 *   - Unused opening formulas ("Great question!")
 *   - Length bounds (too short to be useful, too long to be read)
 *
 * Produces a JudgeScore in the same shape as LLM judges so it composes into
 * `BenchmarkRunner`'s judge array transparently.
 */
import type { JudgeFn } from './types';
export interface AntiSlopConfig {
    /** Domain label — appears in the JudgeScore output */
    domain?: string;
    /** Case-insensitive substrings that must not appear. Each occurrence = penalty. */
    bannedPhrases?: string[];
    /** Regexes matching opening formulas to penalize (e.g. /^great question/i). */
    bannedOpenings?: RegExp[];
    /** Regexes matching hedges (e.g. /i could be wrong/i). Ratio of hedged sentences drives score. */
    hedgingPatterns?: RegExp[];
    /** Regexes matching apology padding. */
    apologyPatterns?: RegExp[];
    /** Fraction of sentences that can be duplicates before penalty (default 0.15 = 15%). */
    repetitionThreshold?: number;
    /** Min output length in chars; below this the turn is deemed too terse. */
    minLength?: number;
    /** Max output length in chars; above this the turn is deemed too verbose. */
    maxLength?: number;
    /** How heavily each violation class reduces the score (default 1). */
    penaltyWeights?: Partial<Record<SlopCategory, number>>;
}
export type SlopCategory = 'banned_phrase' | 'banned_opening' | 'hedging' | 'apology' | 'repetition' | 'length';
/** Create a reusable Judge function from an anti-slop config. */
export declare function createAntiSlopJudge(config?: AntiSlopConfig): JudgeFn;
export interface AntiSlopIssue {
    category: SlopCategory;
    detail: string;
    example?: string;
}
export interface AntiSlopReport {
    /** 0–10 score; 10 is clean, lower values mean more slop. */
    score: number;
    issues: AntiSlopIssue[];
    /** Count of each category for programmatic aggregation. */
    counts: Record<SlopCategory, number>;
}
/**
 * Pure function — analyze one or more outputs against the config. Exposed
 * separately so consumers can build their own reporters on top.
 */
export declare function analyzeAntiSlop(outputs: string[], config: Omit<Required<AntiSlopConfig>, 'domain'> & {
    penaltyWeights: Record<SlopCategory, number>;
}): AntiSlopReport;
//# sourceMappingURL=anti-slop.d.ts.map