UNPKG

@aituber-onair/manneri

Version:

A lightweight conversation pattern detection library to prevent repetitive AI responses

65 lines (64 loc) 2.41 kB
import type { Message, ManneriConfig, AnalysisResult, DiversificationPrompt, ManneriEvent, ManneriEventHandler, StorageData, PersistenceProvider } from '../types/index.js'; import { ConversationAnalyzer } from './ConversationAnalyzer.js'; export declare class ManneriDetector { private readonly config; private readonly analyzer; private promptGenerator; private patternDetector; private readonly persistenceProvider?; private readonly eventEmitter; private interventionHistory; private lastAnalysisResult; constructor(config?: Partial<ManneriConfig>, options?: { persistenceProvider?: PersistenceProvider; }); detectManneri(messages: Message[]): boolean; shouldIntervene(messages: Message[]): boolean; generateDiversificationPrompt(messages: Message[]): DiversificationPrompt; generateAiDiversificationPrompt(messages: Message[]): Promise<DiversificationPrompt>; analyzeConversation(messages: Message[]): AnalysisResult; updateConfig(newConfig: Partial<ManneriConfig>): void; getConfig(): ManneriConfig; on<K extends keyof ManneriEvent>(event: K, handler: ManneriEventHandler<ManneriEvent[K]>): void; off<K extends keyof ManneriEvent>(event: K, handler: ManneriEventHandler<ManneriEvent[K]>): void; getStatistics(): { totalInterventions: number; averageInterventionInterval: number; lastIntervention: number | null; configuredThresholds: { similarity: number; repetition: number; cooldown: number; }; analysisStats: ReturnType<ConversationAnalyzer['getAnalysisStats']>; }; clearHistory(): void; exportData(): StorageData; importData(data: StorageData): void; private createAnalyzerOptions; private recordIntervention; private emit; /** * Manually save data using the persistence provider */ save(): Promise<boolean>; /** * Manually load data using the persistence provider */ load(): Promise<boolean>; /** * Manually cleanup old data */ cleanup(maxAge?: number): Promise<number>; /** * Check if persistence provider is configured */ hasPersistenceProvider(): boolean; /** * Get persistence provider info (if available) */ getPersistenceInfo(): { provider: string; available: boolean; } | null; }