@aituber-onair/manneri
Version:
A lightweight conversation pattern detection library to prevent repetitive AI responses
52 lines (51 loc) • 1.8 kB
TypeScript
import type { Message, AnalysisResult, TextAnalysisOptions } from '../types/index.js';
export interface ConversationAnalyzerOptions {
similarityThreshold: number;
patternThreshold: number;
keywordThreshold: number;
analysisWindow: number;
enableSimilarityAnalysis: boolean;
enablePatternDetection: boolean;
enableKeywordAnalysis: boolean;
enableTopicTracking: boolean;
textAnalysisOptions: Partial<TextAnalysisOptions>;
}
export declare class ConversationAnalyzer {
private readonly similarityAnalyzer;
private readonly keywordExtractor;
private readonly patternDetector;
private readonly options;
constructor(options?: Partial<ConversationAnalyzerOptions>);
analyzeConversation(messages: Message[]): AnalysisResult;
private getAnalysisWindow;
private analyzeSimilarity;
private analyzeTopics;
private analyzePatterns;
private shouldIntervene;
private getInterventionReason;
private createEmptySimilarityResult;
analyzeMessageFlow(messages: Message[]): {
avgMessageLength: number;
roleDistribution: Record<string, number>;
conversationRhythm: number[];
engagementScore: number;
};
private calculateConversationRhythm;
private calculateEngagementScore;
detectConversationLoops(messages: Message[]): {
hasLoop: boolean;
loopLength: number;
loopStart: number;
confidence: number;
};
private calculateSequenceSimilarity;
getAnalysisStats(): {
totalAnalyses: number;
averageAnalysisTime: number;
cacheHitRate: number;
memoryUsage: number;
};
clearCache(): void;
updateOptions(options: Partial<ConversationAnalyzerOptions>): void;
getOptions(): ConversationAnalyzerOptions;
}