@aituber-onair/manneri 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +1 -1
- package/README.md +1 -1
- package/dist/analyzers/KeywordExtractor.d.ts +0 -1
- package/dist/analyzers/KeywordExtractor.js +12 -44
- package/dist/analyzers/KeywordExtractor.js.map +1 -1
- package/dist/analyzers/PatternDetector.js +17 -10
- package/dist/analyzers/PatternDetector.js.map +1 -1
- package/dist/analyzers/SimilarityAnalyzer.d.ts +4 -0
- package/dist/analyzers/SimilarityAnalyzer.js +18 -8
- package/dist/analyzers/SimilarityAnalyzer.js.map +1 -1
- package/dist/config/constants.d.ts +41 -0
- package/dist/config/constants.js +50 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/defaultPrompts.js +12 -0
- package/dist/config/defaultPrompts.js.map +1 -1
- package/dist/core/ConversationAnalyzer.d.ts +6 -0
- package/dist/core/ConversationAnalyzer.js +45 -12
- package/dist/core/ConversationAnalyzer.js.map +1 -1
- package/dist/core/ManneriDetector.d.ts +0 -1
- package/dist/core/ManneriDetector.js +7 -7
- package/dist/core/ManneriDetector.js.map +1 -1
- package/dist/generators/PromptGenerator.d.ts +2 -2
- package/dist/generators/PromptGenerator.js +2 -1
- package/dist/generators/PromptGenerator.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/persistence/LocalStoragePersistenceProvider.js +3 -2
- package/dist/persistence/LocalStoragePersistenceProvider.js.map +1 -1
- package/dist/types/index.d.ts +4 -12
- package/dist/types/index.js +0 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/prompts.d.ts +11 -2
- package/dist/types/prompts.js +1 -1
- package/dist/types/prompts.js.map +1 -1
- package/dist/utils/browserUtils.d.ts +0 -1
- package/dist/utils/browserUtils.js +5 -26
- package/dist/utils/browserUtils.js.map +1 -1
- package/dist/utils/textUtils.d.ts +0 -1
- package/dist/utils/textUtils.js +5 -14
- package/dist/utils/textUtils.js.map +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -56,7 +56,7 @@ if (detector.shouldIntervene(messages)) {
|
|
|
56
56
|
```typescript
|
|
57
57
|
const detector = new ManneriDetector({
|
|
58
58
|
similarityThreshold: 0.75, // 類似度閾値 (0-1)
|
|
59
|
-
repetitionLimit: 3, // 繰り返し検出回数
|
|
59
|
+
repetitionLimit: 3, // (非推奨) 繰り返し検出回数
|
|
60
60
|
lookbackWindow: 10, // 分析対象のメッセージ数
|
|
61
61
|
interventionCooldown: 300000, // 介入間隔(ミリ秒)
|
|
62
62
|
minMessageLength: 10, // 分析対象の最小文字数
|
package/README.md
CHANGED
|
@@ -58,7 +58,7 @@ if (detector.shouldIntervene(messages)) {
|
|
|
58
58
|
```typescript
|
|
59
59
|
const detector = new ManneriDetector({
|
|
60
60
|
similarityThreshold: 0.75, // Similarity threshold (0-1)
|
|
61
|
-
repetitionLimit: 3, // Number of repetitions to detect
|
|
61
|
+
repetitionLimit: 3, // (deprecated) Number of repetitions to detect
|
|
62
62
|
lookbackWindow: 10, // Number of messages to analyze
|
|
63
63
|
interventionCooldown: 300000, // Intervention interval (milliseconds)
|
|
64
64
|
minMessageLength: 10, // Minimum character count for analysis
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { KEYWORD_DENSITY_THRESHOLD, MAX_CONTEXT_LENGTH, MAX_CONTEXTS_PER_KEYWORD, MAX_KEYWORDS, MAX_RELATED_KEYWORDS, MAX_TOPIC_CLUSTERS, PERSISTENCE_WINDOW_MS, RECENCY_WINDOW_MS, SEMANTIC_SIMILARITY_THRESHOLD, TOP_KEYWORDS_LIMIT, } from '../config/constants.js';
|
|
1
2
|
import { tokenize, extractKeywords } from '../utils/textUtils.js';
|
|
2
3
|
import { measurePerformance } from '../utils/browserUtils.js';
|
|
3
4
|
export class KeywordExtractor {
|
|
4
5
|
constructor(options = {}) {
|
|
5
6
|
this.keywordFrequencies = new Map();
|
|
6
7
|
this.topicClusters = new Map();
|
|
7
|
-
this.maxKeywords =
|
|
8
|
-
this.maxContextLength =
|
|
8
|
+
this.maxKeywords = MAX_KEYWORDS;
|
|
9
|
+
this.maxContextLength = MAX_CONTEXT_LENGTH;
|
|
9
10
|
this.options = {
|
|
10
11
|
minWordLength: 2,
|
|
11
12
|
maxNgrams: 3,
|
|
@@ -30,7 +31,7 @@ export class KeywordExtractor {
|
|
|
30
31
|
}
|
|
31
32
|
return Array.from(keywordCounts.entries())
|
|
32
33
|
.sort((a, b) => b[1] - a[1])
|
|
33
|
-
.slice(0,
|
|
34
|
+
.slice(0, TOP_KEYWORDS_LIMIT)
|
|
34
35
|
.map(([keyword]) => keyword);
|
|
35
36
|
}
|
|
36
37
|
analyzeKeywordFrequencies(messages) {
|
|
@@ -46,7 +47,7 @@ export class KeywordExtractor {
|
|
|
46
47
|
data.frequency++;
|
|
47
48
|
data.lastSeen = Math.max(data.lastSeen, timestamp);
|
|
48
49
|
data.score = this.calculateKeywordScore(data.frequency, data.firstSeen, data.lastSeen);
|
|
49
|
-
if (data.contexts.length <
|
|
50
|
+
if (data.contexts.length < MAX_CONTEXTS_PER_KEYWORD) {
|
|
50
51
|
const context = message.content.substring(0, this.maxContextLength);
|
|
51
52
|
if (!data.contexts.includes(context)) {
|
|
52
53
|
data.contexts.push(context);
|
|
@@ -115,14 +116,13 @@ export class KeywordExtractor {
|
|
|
115
116
|
}
|
|
116
117
|
return Array.from(clusters.values())
|
|
117
118
|
.sort((a, b) => b.score - a.score)
|
|
118
|
-
.slice(0,
|
|
119
|
+
.slice(0, MAX_TOPIC_CLUSTERS);
|
|
119
120
|
}
|
|
120
121
|
getTopicInfo(messages) {
|
|
121
122
|
const clusters = this.analyzeTopicClusters(messages);
|
|
122
123
|
return clusters.map((cluster) => ({
|
|
123
124
|
keywords: cluster.keywords,
|
|
124
125
|
score: cluster.score,
|
|
125
|
-
category: this.categorizeKeywords(cluster.keywords),
|
|
126
126
|
confidence: Math.min(cluster.score / 10, 1.0),
|
|
127
127
|
}));
|
|
128
128
|
}
|
|
@@ -141,7 +141,7 @@ export class KeywordExtractor {
|
|
|
141
141
|
for (const [keyword, positions] of keywordPositions) {
|
|
142
142
|
if (positions.length >= minRepetitions) {
|
|
143
143
|
const density = this.calculateKeywordDensity(positions, windowSize);
|
|
144
|
-
if (density >
|
|
144
|
+
if (density > KEYWORD_DENSITY_THRESHOLD) {
|
|
145
145
|
repeatedKeywords.push({
|
|
146
146
|
keyword,
|
|
147
147
|
positions,
|
|
@@ -153,8 +153,8 @@ export class KeywordExtractor {
|
|
|
153
153
|
return repeatedKeywords.sort((a, b) => b.density - a.density);
|
|
154
154
|
}
|
|
155
155
|
calculateKeywordScore(frequency, firstSeen, lastSeen) {
|
|
156
|
-
const recencyFactor = 1 - (Date.now() - lastSeen) /
|
|
157
|
-
const persistenceFactor = (lastSeen - firstSeen) /
|
|
156
|
+
const recencyFactor = 1 - (Date.now() - lastSeen) / RECENCY_WINDOW_MS;
|
|
157
|
+
const persistenceFactor = (lastSeen - firstSeen) / PERSISTENCE_WINDOW_MS;
|
|
158
158
|
return (frequency *
|
|
159
159
|
(1 + Math.max(0, recencyFactor)) *
|
|
160
160
|
(1 + Math.min(1, persistenceFactor / 24)));
|
|
@@ -164,12 +164,12 @@ export class KeywordExtractor {
|
|
|
164
164
|
for (const freq of frequencies) {
|
|
165
165
|
if (freq.keyword !== keyword && freq.frequency > 1) {
|
|
166
166
|
const similarity = this.calculateSemanticSimilarity(keyword, freq.keyword);
|
|
167
|
-
if (similarity >
|
|
167
|
+
if (similarity > SEMANTIC_SIMILARITY_THRESHOLD) {
|
|
168
168
|
related.push(freq.keyword);
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
return related.slice(0,
|
|
172
|
+
return related.slice(0, MAX_RELATED_KEYWORDS);
|
|
173
173
|
}
|
|
174
174
|
calculateSemanticSimilarity(word1, word2) {
|
|
175
175
|
const tokens1 = tokenize(word1, this.options);
|
|
@@ -191,39 +191,7 @@ export class KeywordExtractor {
|
|
|
191
191
|
const timeSpan = cluster.lastMessage - cluster.firstMessage;
|
|
192
192
|
return (keywordCount *
|
|
193
193
|
messageCount *
|
|
194
|
-
(1 + Math.min(1, timeSpan /
|
|
195
|
-
}
|
|
196
|
-
categorizeKeywords(keywords) {
|
|
197
|
-
const categories = {
|
|
198
|
-
技術: [
|
|
199
|
-
'技術',
|
|
200
|
-
'プログラミング',
|
|
201
|
-
'コード',
|
|
202
|
-
'システム',
|
|
203
|
-
'API',
|
|
204
|
-
'データベース',
|
|
205
|
-
'サーバー',
|
|
206
|
-
],
|
|
207
|
-
エンターテイメント: [
|
|
208
|
-
'ゲーム',
|
|
209
|
-
'音楽',
|
|
210
|
-
'映画',
|
|
211
|
-
'アニメ',
|
|
212
|
-
'TV',
|
|
213
|
-
'スポーツ',
|
|
214
|
-
],
|
|
215
|
-
日常: ['食事', '天気', '仕事', '家族', '友達', '学校'],
|
|
216
|
-
その他: [],
|
|
217
|
-
};
|
|
218
|
-
for (const [category, categoryKeywords] of Object.entries(categories)) {
|
|
219
|
-
if (category === 'その他')
|
|
220
|
-
continue;
|
|
221
|
-
const matchCount = keywords.filter((k) => categoryKeywords.some((ck) => k.includes(ck) || ck.includes(k))).length;
|
|
222
|
-
if (matchCount > 0) {
|
|
223
|
-
return category;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return 'その他';
|
|
194
|
+
(1 + Math.min(1, timeSpan / PERSISTENCE_WINDOW_MS)));
|
|
227
195
|
}
|
|
228
196
|
calculateKeywordDensity(positions, windowSize) {
|
|
229
197
|
if (positions.length < 2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeywordExtractor.js","sourceRoot":"","sources":["../../src/analyzers/KeywordExtractor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAoB9D,MAAM,OAAO,gBAAgB;IAQ3B,YAAY,UAAwC,EAAE;QANrC,uBAAkB,GACjC,IAAI,GAAG,EAAE,CAAC;QACK,kBAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;QACrD,gBAAW,GAAW,
|
|
1
|
+
{"version":3,"file":"KeywordExtractor.js","sourceRoot":"","sources":["../../src/analyzers/KeywordExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
+
import { MAX_PATTERN_AGE_MS, MAX_PATTERN_LENGTH, MAX_PATTERNS, MIN_PATTERN_LENGTH, MIN_REPEATED_ROLE_FREQUENCY, MIN_SEQUENCE_FREQUENCY, REPEATED_SIMILARITY_THRESHOLD, SEVERITY_HIGH_FREQUENCY, SEVERITY_HIGH_PATTERN_COUNT, SEVERITY_MEDIUM_FREQUENCY, SEVERITY_MEDIUM_PATTERN_COUNT, SIGNATURE_WORD_COUNT, } from '../config/constants.js';
|
|
1
2
|
import { generateId } from '../utils/browserUtils.js';
|
|
2
3
|
import { calculateTextSimilarity } from '../utils/textUtils.js';
|
|
3
4
|
export class PatternDetector {
|
|
4
5
|
constructor() {
|
|
5
6
|
this.detectedPatterns = new Map();
|
|
6
7
|
this.sequenceCache = new Map();
|
|
7
|
-
this.maxPatterns =
|
|
8
|
-
this.minPatternLength =
|
|
9
|
-
this.maxPatternLength =
|
|
8
|
+
this.maxPatterns = MAX_PATTERNS;
|
|
9
|
+
this.minPatternLength = MIN_PATTERN_LENGTH;
|
|
10
|
+
this.maxPatternLength = MAX_PATTERN_LENGTH;
|
|
10
11
|
}
|
|
11
12
|
detectPatterns(messages) {
|
|
12
13
|
this.cleanupOldPatterns();
|
|
@@ -60,7 +61,7 @@ export class PatternDetector {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
for (const [patternSignature, sequence] of sequenceMap) {
|
|
63
|
-
if (sequence.frequency >=
|
|
64
|
+
if (sequence.frequency >= MIN_SEQUENCE_FREQUENCY) {
|
|
64
65
|
const pattern = {
|
|
65
66
|
id: generateId(),
|
|
66
67
|
pattern: patternSignature,
|
|
@@ -85,7 +86,7 @@ export class PatternDetector {
|
|
|
85
86
|
const compareMessage = messages[j];
|
|
86
87
|
if (currentMessage.role === compareMessage.role) {
|
|
87
88
|
const similarity = calculateTextSimilarity(currentMessage.content, compareMessage.content);
|
|
88
|
-
if (similarity >=
|
|
89
|
+
if (similarity >= REPEATED_SIMILARITY_THRESHOLD) {
|
|
89
90
|
// Create a unique key for this pair to avoid duplicates
|
|
90
91
|
const pairKey = `${Math.min(i, j)}_${Math.max(i, j)}`;
|
|
91
92
|
if (!foundPairs.has(pairKey)) {
|
|
@@ -154,12 +155,14 @@ export class PatternDetector {
|
|
|
154
155
|
sequenceMap.set(sequence.pattern, { ...sequence });
|
|
155
156
|
}
|
|
156
157
|
}
|
|
157
|
-
return Array.from(sequenceMap.values()).filter((seq) => seq.frequency >=
|
|
158
|
+
return Array.from(sequenceMap.values()).filter((seq) => seq.frequency >= MIN_REPEATED_ROLE_FREQUENCY);
|
|
158
159
|
}
|
|
159
160
|
createPatternSignature(messages) {
|
|
160
161
|
return messages
|
|
161
162
|
.map((m) => {
|
|
162
|
-
const contentWords = m.content
|
|
163
|
+
const contentWords = m.content
|
|
164
|
+
.split(/\s+/)
|
|
165
|
+
.slice(0, SIGNATURE_WORD_COUNT);
|
|
163
166
|
return `${m.role}:${contentWords.join(' ')}`;
|
|
164
167
|
})
|
|
165
168
|
.join('|');
|
|
@@ -181,10 +184,14 @@ export class PatternDetector {
|
|
|
181
184
|
return 'low';
|
|
182
185
|
const maxFrequency = Math.max(...patterns.map((p) => p.frequency));
|
|
183
186
|
const totalPatterns = patterns.length;
|
|
184
|
-
if (maxFrequency >=
|
|
187
|
+
if (maxFrequency >= SEVERITY_HIGH_FREQUENCY ||
|
|
188
|
+
totalPatterns >= SEVERITY_HIGH_PATTERN_COUNT) {
|
|
185
189
|
return 'high';
|
|
186
|
-
|
|
190
|
+
}
|
|
191
|
+
if (maxFrequency >= SEVERITY_MEDIUM_FREQUENCY ||
|
|
192
|
+
totalPatterns >= SEVERITY_MEDIUM_PATTERN_COUNT) {
|
|
187
193
|
return 'medium';
|
|
194
|
+
}
|
|
188
195
|
return 'low';
|
|
189
196
|
}
|
|
190
197
|
calculateConfidence(patterns, totalMessages) {
|
|
@@ -217,7 +224,7 @@ export class PatternDetector {
|
|
|
217
224
|
}
|
|
218
225
|
cleanupOldPatterns() {
|
|
219
226
|
const now = Date.now();
|
|
220
|
-
const maxAge =
|
|
227
|
+
const maxAge = MAX_PATTERN_AGE_MS;
|
|
221
228
|
// First, remove old patterns
|
|
222
229
|
for (const [id, pattern] of this.detectedPatterns) {
|
|
223
230
|
if (now - pattern.lastSeen > maxAge) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatternDetector.js","sourceRoot":"","sources":["../../src/analyzers/PatternDetector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAehE,MAAM,OAAO,eAAe;IAA5B;QACmB,qBAAgB,GAC/B,IAAI,GAAG,EAAE,CAAC;QACK,kBAAa,GAAiC,IAAI,GAAG,EAAE,CAAC;QACxD,gBAAW,GAAW,
|
|
1
|
+
{"version":3,"file":"PatternDetector.js","sourceRoot":"","sources":["../../src/analyzers/PatternDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ export declare class SimilarityAnalyzer {
|
|
|
3
3
|
private readonly options;
|
|
4
4
|
private readonly cache;
|
|
5
5
|
private readonly cacheTimeout;
|
|
6
|
+
private cacheHits;
|
|
7
|
+
private cacheMisses;
|
|
6
8
|
constructor(options?: Partial<TextAnalysisOptions>);
|
|
7
9
|
calculateSimilarity(text1: string, text2: string): number;
|
|
8
10
|
analyzeSimilarity(currentMessage: Message, previousMessages: Message[], threshold?: number): SimilarityResult;
|
|
@@ -19,5 +21,7 @@ export declare class SimilarityAnalyzer {
|
|
|
19
21
|
getCacheStats(): {
|
|
20
22
|
size: number;
|
|
21
23
|
hitRate: number;
|
|
24
|
+
hits: number;
|
|
25
|
+
misses: number;
|
|
22
26
|
};
|
|
23
27
|
}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { CACHE_EVICTION_BATCH, CACHE_TTL_MS, DEFAULT_SIMILARITY_THRESHOLD, MAX_CACHE_SIZE, } from '../config/constants.js';
|
|
1
2
|
import { calculateTextSimilarity, tokenize, generateNgrams, } from '../utils/textUtils.js';
|
|
2
3
|
import { measurePerformance } from '../utils/browserUtils.js';
|
|
3
4
|
export class SimilarityAnalyzer {
|
|
4
5
|
constructor(options = {}) {
|
|
5
6
|
this.cache = new Map();
|
|
6
|
-
this.cacheTimeout =
|
|
7
|
+
this.cacheTimeout = CACHE_TTL_MS;
|
|
8
|
+
this.cacheHits = 0;
|
|
9
|
+
this.cacheMisses = 0;
|
|
7
10
|
this.options = {
|
|
8
11
|
minWordLength: 2,
|
|
9
12
|
maxNgrams: 3,
|
|
@@ -17,13 +20,15 @@ export class SimilarityAnalyzer {
|
|
|
17
20
|
const cacheKey = this.getCacheKey(text1, text2);
|
|
18
21
|
const cached = this.cache.get(cacheKey);
|
|
19
22
|
if (cached !== undefined) {
|
|
23
|
+
this.cacheHits++;
|
|
20
24
|
return cached;
|
|
21
25
|
}
|
|
26
|
+
this.cacheMisses++;
|
|
22
27
|
const similarity = measurePerformance('calculateSimilarity', () => calculateTextSimilarity(text1, text2, this.options), false);
|
|
23
28
|
this.setCacheValue(cacheKey, similarity);
|
|
24
29
|
return similarity;
|
|
25
30
|
}
|
|
26
|
-
analyzeSimilarity(currentMessage, previousMessages, threshold =
|
|
31
|
+
analyzeSimilarity(currentMessage, previousMessages, threshold = DEFAULT_SIMILARITY_THRESHOLD) {
|
|
27
32
|
if (previousMessages.length === 0) {
|
|
28
33
|
return {
|
|
29
34
|
score: 0,
|
|
@@ -58,7 +63,7 @@ export class SimilarityAnalyzer {
|
|
|
58
63
|
matchedMessages,
|
|
59
64
|
};
|
|
60
65
|
}
|
|
61
|
-
findSimilarMessages(targetMessage, messages, threshold =
|
|
66
|
+
findSimilarMessages(targetMessage, messages, threshold = DEFAULT_SIMILARITY_THRESHOLD, sameRoleOnly = true) {
|
|
62
67
|
const similarMessages = [];
|
|
63
68
|
const targetContent = targetMessage.content.trim();
|
|
64
69
|
for (const message of messages) {
|
|
@@ -73,7 +78,7 @@ export class SimilarityAnalyzer {
|
|
|
73
78
|
}
|
|
74
79
|
return similarMessages;
|
|
75
80
|
}
|
|
76
|
-
analyzeSequenceSimilarity(messages, sequenceLength = 3, threshold =
|
|
81
|
+
analyzeSequenceSimilarity(messages, sequenceLength = 3, threshold = DEFAULT_SIMILARITY_THRESHOLD) {
|
|
77
82
|
if (messages.length < sequenceLength * 2) {
|
|
78
83
|
return [];
|
|
79
84
|
}
|
|
@@ -126,15 +131,15 @@ export class SimilarityAnalyzer {
|
|
|
126
131
|
}
|
|
127
132
|
getCacheKey(text1, text2) {
|
|
128
133
|
const sortedTexts = [text1, text2].sort();
|
|
129
|
-
return
|
|
134
|
+
return JSON.stringify(sortedTexts);
|
|
130
135
|
}
|
|
131
136
|
setCacheValue(key, value) {
|
|
132
137
|
this.cache.set(key, value);
|
|
133
138
|
setTimeout(() => {
|
|
134
139
|
this.cache.delete(key);
|
|
135
140
|
}, this.cacheTimeout);
|
|
136
|
-
if (this.cache.size >
|
|
137
|
-
const keysToDelete = Array.from(this.cache.keys()).slice(0,
|
|
141
|
+
if (this.cache.size > MAX_CACHE_SIZE) {
|
|
142
|
+
const keysToDelete = Array.from(this.cache.keys()).slice(0, CACHE_EVICTION_BATCH);
|
|
138
143
|
for (const k of keysToDelete) {
|
|
139
144
|
this.cache.delete(k);
|
|
140
145
|
}
|
|
@@ -142,11 +147,16 @@ export class SimilarityAnalyzer {
|
|
|
142
147
|
}
|
|
143
148
|
clearCache() {
|
|
144
149
|
this.cache.clear();
|
|
150
|
+
this.cacheHits = 0;
|
|
151
|
+
this.cacheMisses = 0;
|
|
145
152
|
}
|
|
146
153
|
getCacheStats() {
|
|
154
|
+
const total = this.cacheHits + this.cacheMisses;
|
|
147
155
|
return {
|
|
148
156
|
size: this.cache.size,
|
|
149
|
-
hitRate: 0,
|
|
157
|
+
hitRate: total > 0 ? this.cacheHits / total : 0,
|
|
158
|
+
hits: this.cacheHits,
|
|
159
|
+
misses: this.cacheMisses,
|
|
150
160
|
};
|
|
151
161
|
}
|
|
152
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimilarityAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/SimilarityAnalyzer.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,OAAO,kBAAkB;
|
|
1
|
+
{"version":3,"file":"SimilarityAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/SimilarityAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export declare const CACHE_TTL_MS: 300000;
|
|
2
|
+
export declare const MAX_CACHE_SIZE: 1000;
|
|
3
|
+
export declare const CACHE_EVICTION_BATCH: 100;
|
|
4
|
+
export declare const DEFAULT_SIMILARITY_THRESHOLD: 0.7;
|
|
5
|
+
export declare const MAX_KEYWORDS: 50;
|
|
6
|
+
export declare const MAX_CONTEXT_LENGTH: 100;
|
|
7
|
+
export declare const MAX_CONTEXTS_PER_KEYWORD: 5;
|
|
8
|
+
export declare const TOP_KEYWORDS_LIMIT: 20;
|
|
9
|
+
export declare const MAX_TOPIC_CLUSTERS: 10;
|
|
10
|
+
export declare const MAX_RELATED_KEYWORDS: 5;
|
|
11
|
+
export declare const SEMANTIC_SIMILARITY_THRESHOLD: 0.3;
|
|
12
|
+
export declare const KEYWORD_DENSITY_THRESHOLD: 0.5;
|
|
13
|
+
export declare const RECENCY_WINDOW_MS: number;
|
|
14
|
+
export declare const PERSISTENCE_WINDOW_MS: number;
|
|
15
|
+
export declare const MAX_PATTERNS: 100;
|
|
16
|
+
export declare const MIN_PATTERN_LENGTH: 2;
|
|
17
|
+
export declare const MAX_PATTERN_LENGTH: 5;
|
|
18
|
+
export declare const REPEATED_SIMILARITY_THRESHOLD: 0.8;
|
|
19
|
+
export declare const MIN_SEQUENCE_FREQUENCY: 2;
|
|
20
|
+
export declare const MIN_REPEATED_ROLE_FREQUENCY: 3;
|
|
21
|
+
export declare const MAX_PATTERN_AGE_MS: number;
|
|
22
|
+
export declare const SEVERITY_HIGH_FREQUENCY: 5;
|
|
23
|
+
export declare const SEVERITY_HIGH_PATTERN_COUNT: 10;
|
|
24
|
+
export declare const SEVERITY_MEDIUM_FREQUENCY: 3;
|
|
25
|
+
export declare const SEVERITY_MEDIUM_PATTERN_COUNT: 5;
|
|
26
|
+
export declare const SIGNATURE_WORD_COUNT: 3;
|
|
27
|
+
export declare const DEFAULT_ANALYZER_SIMILARITY_THRESHOLD: 0.75;
|
|
28
|
+
export declare const DEFAULT_PATTERN_THRESHOLD: 0.8;
|
|
29
|
+
export declare const DEFAULT_KEYWORD_THRESHOLD: 0.7;
|
|
30
|
+
export declare const DEFAULT_ANALYSIS_WINDOW: 10;
|
|
31
|
+
export declare const LOOP_DETECTION_THRESHOLD: 0.8;
|
|
32
|
+
export declare const PATTERN_FREQUENCY_TRIGGER: 3;
|
|
33
|
+
export declare const TOPIC_CONFIDENCE_TRIGGER: 0.8;
|
|
34
|
+
export declare const MAX_INTERVENTION_HISTORY: 100;
|
|
35
|
+
export declare const DEFAULT_CLEANUP_MAX_AGE_MS: number;
|
|
36
|
+
export declare const DEFAULT_STORAGE_KEY: "manneri_data";
|
|
37
|
+
export declare const STORAGE_VERSION: "1.0.0";
|
|
38
|
+
export declare const DEFAULT_TOP_KEYWORDS: 10;
|
|
39
|
+
export declare const SHORT_TEXT_TOKEN_LIMIT: 5;
|
|
40
|
+
export declare const HIGH_JACCARD_THRESHOLD: 0.9;
|
|
41
|
+
export declare const MAX_PROMPT_HISTORY: 50;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// SimilarityAnalyzer
|
|
2
|
+
export const CACHE_TTL_MS = 300000;
|
|
3
|
+
export const MAX_CACHE_SIZE = 1000;
|
|
4
|
+
export const CACHE_EVICTION_BATCH = 100;
|
|
5
|
+
export const DEFAULT_SIMILARITY_THRESHOLD = 0.7;
|
|
6
|
+
// KeywordExtractor
|
|
7
|
+
export const MAX_KEYWORDS = 50;
|
|
8
|
+
export const MAX_CONTEXT_LENGTH = 100;
|
|
9
|
+
export const MAX_CONTEXTS_PER_KEYWORD = 5;
|
|
10
|
+
export const TOP_KEYWORDS_LIMIT = 20;
|
|
11
|
+
export const MAX_TOPIC_CLUSTERS = 10;
|
|
12
|
+
export const MAX_RELATED_KEYWORDS = 5;
|
|
13
|
+
export const SEMANTIC_SIMILARITY_THRESHOLD = 0.3;
|
|
14
|
+
export const KEYWORD_DENSITY_THRESHOLD = 0.5;
|
|
15
|
+
export const RECENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
16
|
+
export const PERSISTENCE_WINDOW_MS = 60 * 60 * 1000;
|
|
17
|
+
// PatternDetector
|
|
18
|
+
export const MAX_PATTERNS = 100;
|
|
19
|
+
export const MIN_PATTERN_LENGTH = 2;
|
|
20
|
+
export const MAX_PATTERN_LENGTH = 5;
|
|
21
|
+
export const REPEATED_SIMILARITY_THRESHOLD = 0.8;
|
|
22
|
+
export const MIN_SEQUENCE_FREQUENCY = 2;
|
|
23
|
+
export const MIN_REPEATED_ROLE_FREQUENCY = 3;
|
|
24
|
+
export const MAX_PATTERN_AGE_MS = 24 * 60 * 60 * 1000;
|
|
25
|
+
export const SEVERITY_HIGH_FREQUENCY = 5;
|
|
26
|
+
export const SEVERITY_HIGH_PATTERN_COUNT = 10;
|
|
27
|
+
export const SEVERITY_MEDIUM_FREQUENCY = 3;
|
|
28
|
+
export const SEVERITY_MEDIUM_PATTERN_COUNT = 5;
|
|
29
|
+
export const SIGNATURE_WORD_COUNT = 3;
|
|
30
|
+
// ConversationAnalyzer
|
|
31
|
+
export const DEFAULT_ANALYZER_SIMILARITY_THRESHOLD = 0.75;
|
|
32
|
+
export const DEFAULT_PATTERN_THRESHOLD = 0.8;
|
|
33
|
+
export const DEFAULT_KEYWORD_THRESHOLD = 0.7;
|
|
34
|
+
export const DEFAULT_ANALYSIS_WINDOW = 10;
|
|
35
|
+
export const LOOP_DETECTION_THRESHOLD = 0.8;
|
|
36
|
+
export const PATTERN_FREQUENCY_TRIGGER = 3;
|
|
37
|
+
export const TOPIC_CONFIDENCE_TRIGGER = 0.8;
|
|
38
|
+
// ManneriDetector
|
|
39
|
+
export const MAX_INTERVENTION_HISTORY = 100;
|
|
40
|
+
export const DEFAULT_CLEANUP_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
41
|
+
// browserUtils
|
|
42
|
+
export const DEFAULT_STORAGE_KEY = 'manneri_data';
|
|
43
|
+
export const STORAGE_VERSION = '1.0.0';
|
|
44
|
+
// textUtils
|
|
45
|
+
export const DEFAULT_TOP_KEYWORDS = 10;
|
|
46
|
+
export const SHORT_TEXT_TOKEN_LIMIT = 5;
|
|
47
|
+
export const HIGH_JACCARD_THRESHOLD = 0.9;
|
|
48
|
+
// PromptGenerator
|
|
49
|
+
export const MAX_PROMPT_HISTORY = 50;
|
|
50
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,CAAC,MAAM,YAAY,GAAG,MAAe,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,IAAa,CAAC;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAY,CAAC;AACjD,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAY,CAAC;AAEzD,mBAAmB;AACnB,MAAM,CAAC,MAAM,YAAY,GAAG,EAAW,CAAC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAY,CAAC;AAC/C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAC;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAY,CAAC;AAC1D,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAY,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpD,kBAAkB;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,CAAC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAU,CAAC;AAC7C,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAY,CAAC;AAC1D,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAU,CAAC;AACtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC;AAClD,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAW,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAU,CAAC;AACpD,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAU,CAAC;AAE/C,uBAAuB;AACvB,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAa,CAAC;AACnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAY,CAAC;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAY,CAAC;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAW,CAAC;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAY,CAAC;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAU,CAAC;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAY,CAAC;AAErD,kBAAkB;AAClB,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAY,CAAC;AACrD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAElE,eAAe;AACf,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAuB,CAAC;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,OAAgB,CAAC;AAEhD,YAAY;AACZ,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAW,CAAC;AAChD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAY,CAAC;AAEnD,kBAAkB;AAClB,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAW,CAAC"}
|
|
@@ -9,6 +9,12 @@ export const DEFAULT_PROMPTS = {
|
|
|
9
9
|
'新しいテーマで会話を続けてください。',
|
|
10
10
|
'会話に変化をもたらすため、違う話題にしてみませんか?',
|
|
11
11
|
],
|
|
12
|
+
interventionReasons: {
|
|
13
|
+
similarityHigh: '類似度が高い ({score}%)',
|
|
14
|
+
patternRepetition: 'パターンの繰り返し (最大{count}回)',
|
|
15
|
+
topicBias: '話題の偏り ({count}件)',
|
|
16
|
+
thresholdExceeded: '閾値を超過',
|
|
17
|
+
},
|
|
12
18
|
},
|
|
13
19
|
en: {
|
|
14
20
|
intervention: [
|
|
@@ -17,6 +23,12 @@ export const DEFAULT_PROMPTS = {
|
|
|
17
23
|
'Please continue the conversation with a new theme.',
|
|
18
24
|
'How about changing to a different topic to bring variety to the conversation?',
|
|
19
25
|
],
|
|
26
|
+
interventionReasons: {
|
|
27
|
+
similarityHigh: 'High similarity ({score}%)',
|
|
28
|
+
patternRepetition: 'Pattern repetition (max {count} times)',
|
|
29
|
+
topicBias: 'Narrow topic focus ({count} topics)',
|
|
30
|
+
thresholdExceeded: 'Threshold exceeded',
|
|
31
|
+
},
|
|
20
32
|
},
|
|
21
33
|
};
|
|
22
34
|
//# sourceMappingURL=defaultPrompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultPrompts.js","sourceRoot":"","sources":["../../src/config/defaultPrompts.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,EAAE,EAAE;QACF,YAAY,EAAE;YACZ,0BAA0B;YAC1B,qBAAqB;YACrB,oBAAoB;YACpB,4BAA4B;SAC7B;KACF;IACD,EAAE,EAAE;QACF,YAAY,EAAE;YACZ,uDAAuD;YACvD,iDAAiD;YACjD,oDAAoD;YACpD,+EAA+E;SAChF;KACF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaultPrompts.js","sourceRoot":"","sources":["../../src/config/defaultPrompts.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,EAAE,EAAE;QACF,YAAY,EAAE;YACZ,0BAA0B;YAC1B,qBAAqB;YACrB,oBAAoB;YACpB,4BAA4B;SAC7B;QACD,mBAAmB,EAAE;YACnB,cAAc,EAAE,mBAAmB;YACnC,iBAAiB,EAAE,wBAAwB;YAC3C,SAAS,EAAE,kBAAkB;YAC7B,iBAAiB,EAAE,OAAO;SAC3B;KACF;IACD,EAAE,EAAE;QACF,YAAY,EAAE;YACZ,uDAAuD;YACvD,iDAAiD;YACjD,oDAAoD;YACpD,+EAA+E;SAChF;QACD,mBAAmB,EAAE;YACnB,cAAc,EAAE,4BAA4B;YAC5C,iBAAiB,EAAE,wCAAwC;YAC3D,SAAS,EAAE,qCAAqC;YAChD,iBAAiB,EAAE,oBAAoB;SACxC;KACF;CACF,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Message, AnalysisResult, TextAnalysisOptions } from '../types/index.js';
|
|
2
|
+
import { type LocalizedPromptOverrides } from '../types/prompts.js';
|
|
2
3
|
export interface ConversationAnalyzerOptions {
|
|
3
4
|
similarityThreshold: number;
|
|
4
5
|
patternThreshold: number;
|
|
@@ -9,12 +10,15 @@ export interface ConversationAnalyzerOptions {
|
|
|
9
10
|
enableKeywordAnalysis: boolean;
|
|
10
11
|
enableTopicTracking: boolean;
|
|
11
12
|
textAnalysisOptions: Partial<TextAnalysisOptions>;
|
|
13
|
+
language?: string;
|
|
14
|
+
customPrompts?: LocalizedPromptOverrides;
|
|
12
15
|
}
|
|
13
16
|
export declare class ConversationAnalyzer {
|
|
14
17
|
private readonly similarityAnalyzer;
|
|
15
18
|
private readonly keywordExtractor;
|
|
16
19
|
private readonly patternDetector;
|
|
17
20
|
private readonly options;
|
|
21
|
+
private prompts;
|
|
18
22
|
constructor(options?: Partial<ConversationAnalyzerOptions>);
|
|
19
23
|
analyzeConversation(messages: Message[]): AnalysisResult;
|
|
20
24
|
private getAnalysisWindow;
|
|
@@ -23,6 +27,8 @@ export declare class ConversationAnalyzer {
|
|
|
23
27
|
private analyzePatterns;
|
|
24
28
|
private shouldIntervene;
|
|
25
29
|
private getInterventionReason;
|
|
30
|
+
private getInterventionReasonTemplates;
|
|
31
|
+
private resolveInterventionReasonTemplate;
|
|
26
32
|
private createEmptySimilarityResult;
|
|
27
33
|
analyzeMessageFlow(messages: Message[]): {
|
|
28
34
|
avgMessageLength: number;
|