@aituber-onair/manneri
Version:
A lightweight conversation pattern detection library to prevent repetitive AI responses
65 lines (64 loc) • 2.41 kB
TypeScript
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;
}