import type { SpeakerDirectoryPerson } from './speaker-directory-contract.js'; export interface SpeakerGroupConsistency { state: 'ready' | 'partial' | 'building' | 'insufficient'; score: number | null; analyzedCount: number; totalCount: number; reviewCount: number | null; } export interface SimilarSpeaker { person: SpeakerDirectoryPerson; distance: number | null; consistency: SpeakerGroupConsistency; reason: string; } export type SpeakerSimilarityResult = { supported: false; } | { supported: true; state: 'ready' | 'building' | 'insufficient'; version: string; modelVersion: string; scoreDefinition: string; aggregation: string; anchor: SpeakerDirectoryPerson; anchorConsistency: SpeakerGroupConsistency; searchedCount: number; totalCount: number; items: SimilarSpeaker[]; hasMore: boolean; nextCursor: string; }; export interface SpeakerVoiceSample { sampleKey: string; timeLabel: string; durationMillis: number; transcript: string; mediaRef?: string; } export type SpeakerVoiceSamples = { supported: false; } | { supported: true; items: SpeakerVoiceSample[]; }; export declare function parseGroupConsistency(value: unknown): SpeakerGroupConsistency; export declare function speakerGroupConsistencyLabel(group?: SpeakerGroupConsistency): string; /** Parse before presenting. Raw vectors, URLs and unbounded server metadata never reach the UI. */ export declare function parseSpeakerSimilarity(value: unknown, person: (raw: unknown) => SpeakerDirectoryPerson): SpeakerSimilarityResult; //# sourceMappingURL=speaker-similarity-contract.d.ts.map