/**
 * @file Keyword Coverage Scorer
 * Evaluates how well the response covers expected keywords or topics
 */
import type { RuleScorerConfig, ScoreResult, ScorerInput, ScorerRule } from "../../../types/scorerTypes.js";
import { BaseRuleScorer } from "./baseRuleScorer.js";
/**
 * Configuration specific to keyword coverage scoring
 */
export type KeywordCoverageConfig = RuleScorerConfig & {
    /** Keywords to check for */
    keywords?: string[];
    /** Minimum coverage ratio (0-1) to pass */
    minCoverage?: number;
    /** Whether to use case-insensitive matching */
    caseInsensitive?: boolean;
    /** Whether to use word boundary matching */
    wordBoundary?: boolean;
    /** Synonyms map for flexible matching */
    synonyms?: Record<string, string[]>;
    /** Weight different keywords differently */
    keywordWeights?: Record<string, number>;
};
/**
 * KeywordCoverageScorer evaluates how well a response covers expected keywords
 */
export declare class KeywordCoverageScorer extends BaseRuleScorer {
    private _keywordConfig;
    private _dynamicRules;
    constructor(config?: KeywordCoverageConfig);
    /**
     * Build scorer rules from keyword configuration
     */
    private _buildRulesFromKeywords;
    /**
     * Build scorer rules from a keyword list without mutating instance state.
     * Returns rules directly so callers can use them locally.
     */
    private _buildRulesFromKeywordsList;
    /**
     * Get keyword-specific configuration
     */
    get keywordConfig(): KeywordCoverageConfig;
    /**
     * Get rules for this scorer
     */
    getRules(): ScorerRule[];
    /**
     * Set keywords dynamically
     */
    setKeywords(keywords: string[], weights?: Record<string, number>): void;
    /**
     * Extract keywords from context or ground truth if not provided
     */
    private _extractKeywordsFromInput;
    /**
     * Extract important words from text (simple extraction)
     */
    private _extractImportantWords;
    /**
     * Evaluate a single keyword rule
     */
    evaluateRule(rule: ScorerRule, input: ScorerInput): {
        passed: boolean;
        score: number;
    };
    /**
     * Check if a keyword is present in text
     */
    private _checkKeywordPresence;
    /**
     * Override score to handle dynamic keyword extraction
     */
    score(input: ScorerInput): Promise<ScoreResult>;
    /**
     * Calculate detailed coverage information
     */
    private _calculateCoverageDetails;
}
/**
 * Factory function for creating KeywordCoverageScorer instances
 */
export declare function createKeywordCoverageScorer(config?: KeywordCoverageConfig): Promise<KeywordCoverageScorer>;
