a2a-memory 0.9.1 → 0.10.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/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +1 -0
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/claude-sync.d.ts.map +1 -1
- package/dist/cli/commands/claude-sync.js +1 -0
- package/dist/cli/commands/claude-sync.js.map +1 -1
- package/dist/cli/commands/cleanup.d.ts.map +1 -1
- package/dist/cli/commands/cleanup.js +1 -0
- package/dist/cli/commands/cleanup.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +2 -0
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/edit.d.ts.map +1 -1
- package/dist/cli/commands/edit.js +3 -0
- package/dist/cli/commands/edit.js.map +1 -1
- package/dist/cli/commands/embed.d.ts.map +1 -1
- package/dist/cli/commands/embed.js +1 -0
- package/dist/cli/commands/embed.js.map +1 -1
- package/dist/cli/commands/proficiency.d.ts.map +1 -1
- package/dist/cli/commands/proficiency.js +4 -0
- package/dist/cli/commands/proficiency.js.map +1 -1
- package/dist/cli/commands/rm.d.ts.map +1 -1
- package/dist/cli/commands/rm.js +4 -0
- package/dist/cli/commands/rm.js.map +1 -1
- package/dist/cli/commands/search.d.ts.map +1 -1
- package/dist/cli/commands/search.js +52 -8
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/setup.js +24 -0
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/skill.d.ts.map +1 -1
- package/dist/cli/commands/skill.js +16 -1
- package/dist/cli/commands/skill.js.map +1 -1
- package/dist/cli/commands/sync.d.ts.map +1 -1
- package/dist/cli/commands/sync.js +3 -0
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/config/manager.d.ts +67 -13
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +20 -5
- package/dist/config/manager.js.map +1 -1
- package/dist/db/database.d.ts +5 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +47 -24
- package/dist/db/database.js.map +1 -1
- package/dist/embedding/e5-provider.d.ts +41 -0
- package/dist/embedding/e5-provider.d.ts.map +1 -0
- package/dist/embedding/e5-provider.js +147 -0
- package/dist/embedding/e5-provider.js.map +1 -0
- package/dist/embedding/index.d.ts +1 -0
- package/dist/embedding/index.d.ts.map +1 -1
- package/dist/embedding/index.js +5 -0
- package/dist/embedding/index.js.map +1 -1
- package/dist/extraction/dedup-manager.d.ts +40 -0
- package/dist/extraction/dedup-manager.d.ts.map +1 -0
- package/dist/extraction/dedup-manager.js +148 -0
- package/dist/extraction/dedup-manager.js.map +1 -0
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +23 -6
- package/dist/extraction/extractor.js.map +1 -1
- package/dist/extraction/filter.d.ts.map +1 -1
- package/dist/extraction/filter.js +3 -0
- package/dist/extraction/filter.js.map +1 -1
- package/dist/extraction/scorer.js +23 -12
- package/dist/extraction/scorer.js.map +1 -1
- package/dist/hooks/client-factory.d.ts +14 -0
- package/dist/hooks/client-factory.d.ts.map +1 -0
- package/dist/hooks/client-factory.js +22 -0
- package/dist/hooks/client-factory.js.map +1 -0
- package/dist/hooks/post-tool-use.d.ts.map +1 -1
- package/dist/hooks/post-tool-use.js +101 -22
- package/dist/hooks/post-tool-use.js.map +1 -1
- package/dist/hooks/pre-compact.d.ts +15 -0
- package/dist/hooks/pre-compact.d.ts.map +1 -0
- package/dist/hooks/pre-compact.js +209 -0
- package/dist/hooks/pre-compact.js.map +1 -0
- package/dist/hooks/session-end.d.ts.map +1 -1
- package/dist/hooks/session-end.js +56 -46
- package/dist/hooks/session-end.js.map +1 -1
- package/dist/hooks/session-start.d.ts.map +1 -1
- package/dist/hooks/session-start.js +205 -138
- package/dist/hooks/session-start.js.map +1 -1
- package/dist/hooks/shared.d.ts +1 -0
- package/dist/hooks/shared.d.ts.map +1 -1
- package/dist/hooks/shared.js +35 -0
- package/dist/hooks/shared.js.map +1 -1
- package/dist/hooks/user-prompt-submit.d.ts +15 -0
- package/dist/hooks/user-prompt-submit.d.ts.map +1 -0
- package/dist/hooks/user-prompt-submit.js +240 -0
- package/dist/hooks/user-prompt-submit.js.map +1 -0
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/quality-scorer.d.ts +2 -2
- package/dist/lifecycle/quality-scorer.d.ts.map +1 -1
- package/dist/lifecycle/quality-scorer.js +13 -7
- package/dist/lifecycle/quality-scorer.js.map +1 -1
- package/dist/lifecycle/tiering.d.ts.map +1 -1
- package/dist/lifecycle/tiering.js +11 -1
- package/dist/lifecycle/tiering.js.map +1 -1
- package/dist/proficiency/detection.d.ts +2 -4
- package/dist/proficiency/detection.d.ts.map +1 -1
- package/dist/proficiency/detection.js +11 -15
- package/dist/proficiency/detection.js.map +1 -1
- package/dist/proficiency/tracker.d.ts +2 -2
- package/dist/proficiency/tracker.d.ts.map +1 -1
- package/dist/proficiency/tracker.js +10 -7
- package/dist/proficiency/tracker.js.map +1 -1
- package/dist/search/adaptive-router.d.ts +28 -0
- package/dist/search/adaptive-router.d.ts.map +1 -0
- package/dist/search/adaptive-router.js +93 -0
- package/dist/search/adaptive-router.js.map +1 -0
- package/dist/search/ranker.d.ts +4 -0
- package/dist/search/ranker.d.ts.map +1 -1
- package/dist/search/ranker.js +4 -0
- package/dist/search/ranker.js.map +1 -1
- package/dist/search/reranker.d.ts +48 -0
- package/dist/search/reranker.d.ts.map +1 -0
- package/dist/search/reranker.js +155 -0
- package/dist/search/reranker.js.map +1 -0
- package/dist/skill/evaluator.d.ts +7 -9
- package/dist/skill/evaluator.d.ts.map +1 -1
- package/dist/skill/evaluator.js +122 -33
- package/dist/skill/evaluator.js.map +1 -1
- package/dist/skill/types.d.ts +5 -0
- package/dist/skill/types.d.ts.map +1 -1
- package/dist/sync/client.d.ts +26 -1
- package/dist/sync/client.d.ts.map +1 -1
- package/dist/sync/client.js +81 -28
- package/dist/sync/client.js.map +1 -1
- package/dist/sync/queue.d.ts +1 -1
- package/dist/sync/queue.d.ts.map +1 -1
- package/dist/sync/queue.js +20 -28
- package/dist/sync/queue.js.map +1 -1
- package/dist/sync/synchronizer.js +1 -1
- package/dist/sync/synchronizer.js.map +1 -1
- package/dist/sync/team-synchronizer.js.map +1 -1
- package/dist/types/index.d.ts +19 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +11 -3
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 레벨 공식 (Hybrid):
|
|
7
7
|
* countScore = log2(1 + N) / log2(151) // Power Law of Practice
|
|
8
8
|
* successScore = 0.3 + successRate * 0.7 // 성공률 반영
|
|
9
|
-
* recencyFactor = exp(-daysSince * 0.
|
|
9
|
+
* recencyFactor = exp(-daysSince * 0.007) // ACT-R Forgetting Curve (완화: 30일→0.81)
|
|
10
10
|
* difficultyBonus = avgDifficulty * 0.1 // 난이도 보상
|
|
11
11
|
* level = ceil(clamp(countScore * successScore * recencyFactor + difficultyBonus, 0, 1) * maxLevel)
|
|
12
12
|
*
|
|
@@ -81,10 +81,10 @@ export class ProficiencyTracker {
|
|
|
81
81
|
}));
|
|
82
82
|
const recentTags = events.slice(0, 5).flatMap((e) => e.contextTags);
|
|
83
83
|
const actrResult = this.engine.computeActivation(accessTimes, associations, new Set(recentTags), successRate, proficiencyId);
|
|
84
|
-
// 레벨 계산 (Hybrid)
|
|
85
|
-
const newLevel = computePracticalLevel(events.length, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel);
|
|
86
|
-
const previousLevel = proficiency.level;
|
|
87
84
|
const activation = actrResult.total + avgDifficulty * 0.2;
|
|
85
|
+
// 레벨 계산 (Hybrid: ACT-R 활성화 보정 포함)
|
|
86
|
+
const newLevel = computePracticalLevel(events.length, successRate, daysSinceLastPractice, avgDifficulty, this.config.maxLevel, activation);
|
|
87
|
+
const previousLevel = proficiency.level;
|
|
88
88
|
this.db.updateProficiency(proficiencyId, {
|
|
89
89
|
level: newLevel,
|
|
90
90
|
experienceCount: events.length,
|
|
@@ -154,17 +154,20 @@ export class ProficiencyTracker {
|
|
|
154
154
|
*
|
|
155
155
|
* Power Law of Practice (log 성장) + Forgetting Curve (지수 감쇠) + 난이도 보너스
|
|
156
156
|
*/
|
|
157
|
-
export function computePracticalLevel(experienceCount, successRate, daysSinceLastPractice, avgDifficulty, maxLevel) {
|
|
157
|
+
export function computePracticalLevel(experienceCount, successRate, daysSinceLastPractice, avgDifficulty, maxLevel, actrActivation) {
|
|
158
158
|
// 1. 연습 횟수 (Power Law - 대수적 성장)
|
|
159
159
|
const countScore = Math.min(1.0, Math.log2(1 + experienceCount) / COUNT_SCALE);
|
|
160
160
|
// 2. 성공률 (0% → 0.3, 100% → 1.0)
|
|
161
161
|
const successScore = 0.3 + successRate * 0.7;
|
|
162
162
|
// 3. 망각 곡선 (ACT-R inspired exponential decay)
|
|
163
|
-
|
|
163
|
+
// 0.007: 30일 미사용 시 약 0.81 유지 (기존 0.02는 30일 시 0.55로 급격 감쇠)
|
|
164
|
+
const recencyFactor = Math.exp(-Math.max(0, daysSinceLastPractice) * 0.007);
|
|
164
165
|
// 4. 난이도 보너스 (높은 난이도 연습에 보상)
|
|
165
166
|
const difficultyBonus = avgDifficulty * 0.1;
|
|
167
|
+
// 5. ACT-R 활성화 보정 (있으면 최대 10% 가중)
|
|
168
|
+
const actrBonus = actrActivation !== undefined ? Math.max(0, Math.min(0.1, actrActivation * 0.05)) : 0;
|
|
166
169
|
// 합산
|
|
167
|
-
const combined = Math.max(0, Math.min(1, countScore * successScore * recencyFactor + difficultyBonus));
|
|
170
|
+
const combined = Math.max(0, Math.min(1, countScore * successScore * recencyFactor + difficultyBonus + actrBonus));
|
|
168
171
|
return Math.min(maxLevel, Math.max(1, Math.ceil(combined * maxLevel)));
|
|
169
172
|
}
|
|
170
173
|
//# sourceMappingURL=tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/proficiency/tracker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/proficiency/tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,iDAAiD;AACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnC,MAAM,OAAO,kBAAkB;IACrB,EAAE,CAAiB;IACnB,MAAM,CAAoB;IAC1B,MAAM,CAAa;IAE3B,YAAY,EAAkB,EAAE,MAAyB;QACvD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,aAAqB,EACrB,OAA0C,EAC1C,UAAkB,EAClB,cAAwB,EAAE,EAC1B,SAAkB;QAElB,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAE1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;YACzB,aAAa,EAAE,WAAW,CAAC,EAAE;YAC7B,SAAS,EAAE,GAAG;YACd,OAAO;YACP,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAChD,WAAW;YACX,SAAS;SACV,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,aAAqB;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACnG,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,aAAa,EAAE,WAAW,CAAC,KAAK;gBAChC,QAAQ,EAAE,CAAC;gBACX,UAAU,EAAE,CAAC;gBACb,eAAe,EAAE,CAAC;gBAClB,YAAY,EAAE,WAAW,CAAC,KAAK,KAAK,CAAC;aACtC,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAE9B,MAAM;QACN,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC1E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC1E,MAAM,WAAW,GAAG,CAAC,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAExE,MAAM;QACN,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAEvF,eAAe;QACf,MAAM,qBAAqB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAElE,wBAAwB;QACxB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACpC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1E,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;SAC/C,CAAC,CAAC,CAAC;QACJ,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAC9C,WAAW,EAAE,YAAY,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,aAAa,CAC3E,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,GAAG,aAAa,GAAG,GAAG,CAAC;QAE1D,kCAAkC;QAClC,MAAM,QAAQ,GAAG,qBAAqB,CACpC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CACnG,CAAC;QAEF,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,EAAE;YACvC,KAAK,EAAE,QAAQ;YACf,eAAe,EAAE,MAAM,CAAC,MAAM;YAC9B,WAAW;YACX,cAAc,EAAE,UAAU;YAC1B,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC1C,CAAC,CAAC;QAEH,OAAO;YACL,aAAa;YACb,QAAQ;YACR,UAAU;YACV,eAAe,EAAE,MAAM,CAAC,MAAM;YAC9B,YAAY,EAAE,aAAa,KAAK,QAAQ;SACzC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,aAAqB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC9D,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW;YAC3B,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1E,CAAC,CAAC,SAAS,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,WAAW,EAAE,WAAW,CAAC;QAE7C,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC;YAC/B,aAAa;YACb,SAAS;YACT,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,WAAoB;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAA4B;QACnC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YACvD,IAAI,SAAS;gBAAE,YAAY,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC;YAE9C,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrF,eAAe,IAAI,UAAU,CAAC;YAC9B,MAAM,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;YAEnD,mCAAmC;YACnC,MAAM,qBAAqB,GAAG,CAAC,CAAC;YAEhC,MAAM,KAAK,GAAG,qBAAqB,CACjC,UAAU,EAAE,WAAW,EAAE,qBAAqB,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CACpF,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,eAAuB,EACvB,WAAmB,EACnB,qBAA6B,EAC7B,aAAqB,EACrB,QAAgB,EAChB,cAAuB;IAEvB,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,eAAe,CAAC,GAAG,WAAW,CAAC,CAAC;IAE/E,gCAAgC;IAChC,MAAM,YAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC;IAE7C,8CAA8C;IAC9C,0DAA0D;IAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,CAAC;IAE5E,6BAA6B;IAC7B,MAAM,eAAe,GAAG,aAAa,GAAG,GAAG,CAAC;IAE5C,kCAAkC;IAClC,MAAM,SAAS,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvG,KAAK;IACL,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;IAEnH,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive RAG Router
|
|
3
|
+
*
|
|
4
|
+
* 쿼리 복잡도에 따라 최적의 검색 전략을 선택합니다.
|
|
5
|
+
* LLM 불필요 — 규칙 기반 분류로 < 1ms 레이턴시.
|
|
6
|
+
*
|
|
7
|
+
* - simple: FTS만 (< 5ms)
|
|
8
|
+
* - semantic: FTS + Vector (< 30ms)
|
|
9
|
+
* - complex: FTS + Vector + Reranker (< 100ms)
|
|
10
|
+
*/
|
|
11
|
+
export type QueryComplexity = 'simple' | 'semantic' | 'complex';
|
|
12
|
+
export interface RoutingResult {
|
|
13
|
+
complexity: QueryComplexity;
|
|
14
|
+
useFTS: boolean;
|
|
15
|
+
useVector: boolean;
|
|
16
|
+
useReranker: boolean;
|
|
17
|
+
reason: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class AdaptiveRouter {
|
|
20
|
+
/**
|
|
21
|
+
* 쿼리 복잡도 분류
|
|
22
|
+
*
|
|
23
|
+
* @param query 검색 쿼리
|
|
24
|
+
* @returns 분류 결과 + 활성화할 검색 전략
|
|
25
|
+
*/
|
|
26
|
+
classify(query: string): RoutingResult;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=adaptive-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-router.d.ts","sourceRoot":"","sources":["../../src/search/adaptive-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAwBD,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa;CA2DvC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adaptive RAG Router
|
|
3
|
+
*
|
|
4
|
+
* 쿼리 복잡도에 따라 최적의 검색 전략을 선택합니다.
|
|
5
|
+
* LLM 불필요 — 규칙 기반 분류로 < 1ms 레이턴시.
|
|
6
|
+
*
|
|
7
|
+
* - simple: FTS만 (< 5ms)
|
|
8
|
+
* - semantic: FTS + Vector (< 30ms)
|
|
9
|
+
* - complex: FTS + Vector + Reranker (< 100ms)
|
|
10
|
+
*/
|
|
11
|
+
/** 코드/에러 패턴 감지 */
|
|
12
|
+
const CODE_PATTERNS = [
|
|
13
|
+
/\b(error|exception|traceback|stack\s*trace|stderr)\b/i,
|
|
14
|
+
/\b(import|require|from|export|module)\s+['"`]/,
|
|
15
|
+
/\b(function|class|interface|type|const|let|var|def|async)\b/,
|
|
16
|
+
/[{}()\[\]<>].*[{}()\[\]<>]/, // 중첩 괄호
|
|
17
|
+
/\b\w+\.\w+\.\w+/, // 점 표기법 (a.b.c)
|
|
18
|
+
/\b\d+\.\d+\.\d+/, // 버전 번호
|
|
19
|
+
/(?:https?:\/\/|\/[\w/]+\.\w+)/, // URL 또는 파일 경로
|
|
20
|
+
];
|
|
21
|
+
/** 질문/설명 패턴 */
|
|
22
|
+
const SEMANTIC_PATTERNS = [
|
|
23
|
+
/\b(how|why|what|when|where|which|explain|describe)\b/i,
|
|
24
|
+
/(어떻게|왜|무엇|언제|어디|설명|방법)/, // 한국어는 \b 없이 (유니코드 호환)
|
|
25
|
+
/\?$/, // 질문형
|
|
26
|
+
/\b(similar|like|related|compare|difference|versus|vs)\b/i,
|
|
27
|
+
/(비슷한|관련|비교|차이|대안)/, // 한국어
|
|
28
|
+
/\b(best practice|pattern|approach|architecture|design)\b/i,
|
|
29
|
+
/(패턴|접근법|아키텍처|설계|구조)/, // 한국어
|
|
30
|
+
];
|
|
31
|
+
export class AdaptiveRouter {
|
|
32
|
+
/**
|
|
33
|
+
* 쿼리 복잡도 분류
|
|
34
|
+
*
|
|
35
|
+
* @param query 검색 쿼리
|
|
36
|
+
* @returns 분류 결과 + 활성화할 검색 전략
|
|
37
|
+
*/
|
|
38
|
+
classify(query) {
|
|
39
|
+
const trimmed = query.trim();
|
|
40
|
+
const wordCount = trimmed.split(/\s+/).length;
|
|
41
|
+
// 1~2 단어: simple (키워드 매칭 충분)
|
|
42
|
+
if (wordCount <= 2) {
|
|
43
|
+
return {
|
|
44
|
+
complexity: 'simple',
|
|
45
|
+
useFTS: true,
|
|
46
|
+
useVector: false,
|
|
47
|
+
useReranker: false,
|
|
48
|
+
reason: `Short query (${wordCount} words)`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// 코드 패턴/에러 메시지: complex (다중 소스 결합)
|
|
52
|
+
const hasCodePattern = CODE_PATTERNS.some(p => p.test(trimmed));
|
|
53
|
+
if (hasCodePattern) {
|
|
54
|
+
return {
|
|
55
|
+
complexity: 'complex',
|
|
56
|
+
useFTS: true,
|
|
57
|
+
useVector: true,
|
|
58
|
+
useReranker: true,
|
|
59
|
+
reason: 'Code pattern or error message detected',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// 질문형/설명형: semantic (의미 검색 필요)
|
|
63
|
+
const hasSemanticPattern = SEMANTIC_PATTERNS.some(p => p.test(trimmed));
|
|
64
|
+
if (hasSemanticPattern) {
|
|
65
|
+
return {
|
|
66
|
+
complexity: 'semantic',
|
|
67
|
+
useFTS: true,
|
|
68
|
+
useVector: true,
|
|
69
|
+
useReranker: false,
|
|
70
|
+
reason: 'Semantic query detected',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
// 긴 쿼리 (5+ 단어): semantic
|
|
74
|
+
if (wordCount >= 5) {
|
|
75
|
+
return {
|
|
76
|
+
complexity: 'semantic',
|
|
77
|
+
useFTS: true,
|
|
78
|
+
useVector: true,
|
|
79
|
+
useReranker: false,
|
|
80
|
+
reason: `Long query (${wordCount} words)`,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 기본: simple
|
|
84
|
+
return {
|
|
85
|
+
complexity: 'simple',
|
|
86
|
+
useFTS: true,
|
|
87
|
+
useVector: false,
|
|
88
|
+
useReranker: false,
|
|
89
|
+
reason: 'Default classification',
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=adaptive-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-router.js","sourceRoot":"","sources":["../../src/search/adaptive-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,kBAAkB;AAClB,MAAM,aAAa,GAAG;IACpB,uDAAuD;IACvD,+CAA+C;IAC/C,6DAA6D;IAC7D,4BAA4B,EAAG,QAAQ;IACvC,iBAAiB,EAAG,gBAAgB;IACpC,iBAAiB,EAAG,QAAQ;IAC5B,+BAA+B,EAAG,eAAe;CAClD,CAAC;AAEF,eAAe;AACf,MAAM,iBAAiB,GAAG;IACxB,uDAAuD;IACvD,wBAAwB,EAAG,uBAAuB;IAClD,KAAK,EAAG,MAAM;IACd,0DAA0D;IAC1D,mBAAmB,EAAG,MAAM;IAC5B,2DAA2D;IAC3D,qBAAqB,EAAG,MAAM;CAC/B,CAAC;AAEF,MAAM,OAAO,cAAc;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,KAAa;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAE9C,6BAA6B;QAC7B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,UAAU,EAAE,QAAQ;gBACpB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,gBAAgB,SAAS,SAAS;aAC3C,CAAC;QACJ,CAAC;QAED,mCAAmC;QACnC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO;gBACL,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,wCAAwC;aACjD,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACxE,IAAI,kBAAkB,EAAE,CAAC;YACvB,OAAO;gBACL,UAAU,EAAE,UAAU;gBACtB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,yBAAyB;aAClC,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,UAAU,EAAE,UAAU;gBACtB,MAAM,EAAE,IAAI;gBACZ,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,eAAe,SAAS,SAAS;aAC1C,CAAC;QACJ,CAAC;QAED,aAAa;QACb,OAAO;YACL,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,KAAK;YAChB,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,wBAAwB;SACjC,CAAC;IACJ,CAAC;CACF"}
|
package/dist/search/ranker.d.ts
CHANGED
|
@@ -49,6 +49,10 @@ export declare class HybridRanker {
|
|
|
49
49
|
/**
|
|
50
50
|
* Compute LSH hash for embedding pre-filtering (C-4)
|
|
51
51
|
* SimHash-like: pseudo-random hyperplane signs -> hex string
|
|
52
|
+
*
|
|
53
|
+
* WARNING: Hash collision 가능성 있음 — 동일 hash라도 실제 유사도 검증 필수.
|
|
54
|
+
* bits=32 기준 collision 확률 ~1/2^32이나, 대규모 corpus(1M+)에서는 false-positive 발생 가능.
|
|
55
|
+
* 따라서 이 함수는 pre-filter 목적으로만 사용하고, 최종 결과는 cosineSimilarity로 재검증.
|
|
52
56
|
*/
|
|
53
57
|
export declare function computeEmbeddingHash(embedding: number[], bits?: number): string;
|
|
54
58
|
//# sourceMappingURL=ranker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../src/search/ranker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAqBD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,CAAC,CAAS;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAU;gBAElB,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IAqB/C;;OAEG;IACH,IAAI,CACF,UAAU,EAAE,kBAAkB,EAAE,EAChC,aAAa,EAAE,kBAAkB,EAAE,EACnC,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,YAAY,EAAE;IAsEjB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,WAAW;CAKpB;AAED
|
|
1
|
+
{"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../../src/search/ranker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAqBD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,CAAC,CAAS;IAClB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,YAAY,CAAU;gBAElB,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IAqB/C;;OAEG;IACH,IAAI,CACF,UAAU,EAAE,kBAAkB,EAAE,EAChC,aAAa,EAAE,kBAAkB,EAAE,EACnC,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,YAAY,EAAE;IAsEjB,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,WAAW;CAKpB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAmBnF"}
|
package/dist/search/ranker.js
CHANGED
|
@@ -142,6 +142,10 @@ export class HybridRanker {
|
|
|
142
142
|
/**
|
|
143
143
|
* Compute LSH hash for embedding pre-filtering (C-4)
|
|
144
144
|
* SimHash-like: pseudo-random hyperplane signs -> hex string
|
|
145
|
+
*
|
|
146
|
+
* WARNING: Hash collision 가능성 있음 — 동일 hash라도 실제 유사도 검증 필수.
|
|
147
|
+
* bits=32 기준 collision 확률 ~1/2^32이나, 대규모 corpus(1M+)에서는 false-positive 발생 가능.
|
|
148
|
+
* 따라서 이 함수는 pre-filter 목적으로만 사용하고, 최종 결과는 cosineSimilarity로 재검증.
|
|
145
149
|
*/
|
|
146
150
|
export function computeEmbeddingHash(embedding, bits = 32) {
|
|
147
151
|
const hashBits = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../src/search/ranker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwBH,iCAAiC;AACjC,MAAM,cAAc,GAA2B;IAC7C,cAAc,EAAE,GAAG;IACnB,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,GAAG;IACb,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,GAAG;IACZ,iBAAiB,EAAE,GAAG;IACtB,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF,6BAA6B;AAC7B,MAAM,UAAU,GAA2B;IACzC,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;CACb,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACf,CAAC,CAAS;IACV,OAAO,CAAgB;IACvB,aAAa,CAAU;IACvB,SAAS,CAAU;IACnB,YAAY,CAAU;IAE9B,YAAY,UAAmC;QAC7C,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,UAAU,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,GAAG;gBACb,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,GAAG;gBAC7B,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG;gBACnC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,GAAG;aACtC,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;YACzC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;QACjD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CACF,UAAgC,EAChC,aAAmC,EACnC,cAAyB;QAEzB,kCAAkC;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAElD,wBAAwB;QACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwH,CAAC;QAEjJ,YAAY;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;QAED,gBAAgB;QAChB,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnB,IAAI,KAAa,CAAC;gBAElB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,sDAAsD;oBACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACpD,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACjD,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACtC,IAAI,KAAK,GAAG,GAAG,CAAC;gBAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;gBACxD,CAAC;gBACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;gBAChD,CAAC;gBACD,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,aAAa;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACd,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC,CAAC;QAEN,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,QAAQ,CACd,QAAmI,EACnI,MAAc,EACd,KAAa,EACb,IAAkC,EAClC,IAAY;QAEZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC;YAC7B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE;gBACtB,MAAM;gBACN,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../src/search/ranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Encoder Reranker
|
|
3
|
+
*
|
|
4
|
+
* RRF 하이브리드 검색의 top-N 결과를 정밀 리랭킹합니다.
|
|
5
|
+
* @huggingface/transformers 기반 ms-marco-MiniLM-L-6-v2 모델 사용.
|
|
6
|
+
*
|
|
7
|
+
* 성능:
|
|
8
|
+
* - ~5ms/pair (CPU)
|
|
9
|
+
* - top-20 → top-5: ~100ms (SessionStart)
|
|
10
|
+
* - top-10 → top-3: ~50ms (UserPromptSubmit)
|
|
11
|
+
*
|
|
12
|
+
* 설치: npm install @huggingface/transformers (optional dependency)
|
|
13
|
+
*/
|
|
14
|
+
import type { RankedResult } from './ranker.js';
|
|
15
|
+
export interface RerankerOptions {
|
|
16
|
+
/** 사용 가능하지 않을 때 fallback 사용 여부 (default: true) */
|
|
17
|
+
useFallback?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class CrossEncoderReranker {
|
|
20
|
+
private useFallback;
|
|
21
|
+
constructor(options?: RerankerOptions);
|
|
22
|
+
/**
|
|
23
|
+
* 후보 메모리를 리랭킹
|
|
24
|
+
*
|
|
25
|
+
* @param query 검색 쿼리
|
|
26
|
+
* @param candidates 리랭킹 대상 메모리 목록
|
|
27
|
+
* @param topK 반환할 상위 K개
|
|
28
|
+
* @returns 리랭킹된 결과
|
|
29
|
+
*/
|
|
30
|
+
rerank(query: string, candidates: RankedResult[], topK: number): Promise<RankedResult[]>;
|
|
31
|
+
/**
|
|
32
|
+
* 텍스트 매칭 기반 fallback 리랭킹
|
|
33
|
+
*/
|
|
34
|
+
private fallbackRerank;
|
|
35
|
+
/**
|
|
36
|
+
* Cross-Encoder 출력에서 relevance score 추출
|
|
37
|
+
*/
|
|
38
|
+
private extractScore;
|
|
39
|
+
/**
|
|
40
|
+
* 사용 가능 여부 확인
|
|
41
|
+
*/
|
|
42
|
+
static isAvailable(): Promise<boolean>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* 싱글톤 리셋 (테스트용)
|
|
46
|
+
*/
|
|
47
|
+
export declare function resetRerankerPipeline(): void;
|
|
48
|
+
//# sourceMappingURL=reranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/search/reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsDhD,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAU;gBAEjB,OAAO,CAAC,EAAE,eAAe;IAIrC;;;;;;;OAOG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,YAAY,EAAE,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,EAAE,CAAC;IAkC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Encoder Reranker
|
|
3
|
+
*
|
|
4
|
+
* RRF 하이브리드 검색의 top-N 결과를 정밀 리랭킹합니다.
|
|
5
|
+
* @huggingface/transformers 기반 ms-marco-MiniLM-L-6-v2 모델 사용.
|
|
6
|
+
*
|
|
7
|
+
* 성능:
|
|
8
|
+
* - ~5ms/pair (CPU)
|
|
9
|
+
* - top-20 → top-5: ~100ms (SessionStart)
|
|
10
|
+
* - top-10 → top-3: ~50ms (UserPromptSubmit)
|
|
11
|
+
*
|
|
12
|
+
* 설치: npm install @huggingface/transformers (optional dependency)
|
|
13
|
+
*/
|
|
14
|
+
const RERANKER_MODEL = 'cross-encoder/ms-marco-MiniLM-L-6-v2';
|
|
15
|
+
// 싱글톤 파이프라인
|
|
16
|
+
let _rerankerPipeline = null;
|
|
17
|
+
let _rerankerLoading = null;
|
|
18
|
+
/**
|
|
19
|
+
* reranker 파이프라인 지연 로드
|
|
20
|
+
*/
|
|
21
|
+
async function getRerankerPipeline() {
|
|
22
|
+
if (_rerankerPipeline)
|
|
23
|
+
return _rerankerPipeline;
|
|
24
|
+
if (_rerankerLoading)
|
|
25
|
+
return _rerankerLoading;
|
|
26
|
+
_rerankerLoading = (async () => {
|
|
27
|
+
try {
|
|
28
|
+
const mod = await Function('return import("@huggingface/transformers")')();
|
|
29
|
+
_rerankerPipeline = await mod.pipeline('text-classification', RERANKER_MODEL, {
|
|
30
|
+
quantized: true,
|
|
31
|
+
});
|
|
32
|
+
return _rerankerPipeline;
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
_rerankerLoading = null;
|
|
36
|
+
throw new Error(`Cross-Encoder reranker requires @huggingface/transformers. ` +
|
|
37
|
+
`Install: npm install @huggingface/transformers\n` +
|
|
38
|
+
`Original error: ${err instanceof Error ? err.message : String(err)}`);
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
return _rerankerLoading;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 텍스트 기반 fallback reranker
|
|
45
|
+
* @huggingface/transformers가 없을 때 사용
|
|
46
|
+
* BM25 스타일 간단한 키워드 매칭
|
|
47
|
+
*/
|
|
48
|
+
function fallbackScore(query, content) {
|
|
49
|
+
const queryTokens = query.toLowerCase().split(/\s+/).filter(t => t.length > 1);
|
|
50
|
+
const contentLower = content.toLowerCase();
|
|
51
|
+
if (queryTokens.length === 0)
|
|
52
|
+
return 0;
|
|
53
|
+
let matches = 0;
|
|
54
|
+
for (const token of queryTokens) {
|
|
55
|
+
if (contentLower.includes(token))
|
|
56
|
+
matches++;
|
|
57
|
+
}
|
|
58
|
+
return matches / queryTokens.length;
|
|
59
|
+
}
|
|
60
|
+
export class CrossEncoderReranker {
|
|
61
|
+
useFallback;
|
|
62
|
+
constructor(options) {
|
|
63
|
+
this.useFallback = options?.useFallback ?? true;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 후보 메모리를 리랭킹
|
|
67
|
+
*
|
|
68
|
+
* @param query 검색 쿼리
|
|
69
|
+
* @param candidates 리랭킹 대상 메모리 목록
|
|
70
|
+
* @param topK 반환할 상위 K개
|
|
71
|
+
* @returns 리랭킹된 결과
|
|
72
|
+
*/
|
|
73
|
+
async rerank(query, candidates, topK) {
|
|
74
|
+
if (candidates.length === 0)
|
|
75
|
+
return [];
|
|
76
|
+
if (candidates.length <= topK)
|
|
77
|
+
return candidates;
|
|
78
|
+
try {
|
|
79
|
+
const pipe = await getRerankerPipeline();
|
|
80
|
+
// (query, candidate.content) 쌍으로 점수 계산
|
|
81
|
+
const pairs = candidates.map(c => ({
|
|
82
|
+
text: query,
|
|
83
|
+
text_pair: c.memory.content.slice(0, 512), // 모델 최대 길이 제한
|
|
84
|
+
}));
|
|
85
|
+
const scores = await pipe(pairs);
|
|
86
|
+
// 점수와 원본 결합
|
|
87
|
+
const scored = candidates.map((candidate, i) => ({
|
|
88
|
+
...candidate,
|
|
89
|
+
rerankScore: this.extractScore(scores[i]),
|
|
90
|
+
}));
|
|
91
|
+
// 리랭킹 점수로 재정렬
|
|
92
|
+
scored.sort((a, b) => b.rerankScore - a.rerankScore);
|
|
93
|
+
return scored.slice(0, topK).map(({ rerankScore: _rs, ...rest }) => rest);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// transformers 미설치 시 fallback
|
|
97
|
+
if (this.useFallback) {
|
|
98
|
+
return this.fallbackRerank(query, candidates, topK);
|
|
99
|
+
}
|
|
100
|
+
return candidates.slice(0, topK);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 텍스트 매칭 기반 fallback 리랭킹
|
|
105
|
+
*/
|
|
106
|
+
fallbackRerank(query, candidates, topK) {
|
|
107
|
+
const scored = candidates.map(c => ({
|
|
108
|
+
...c,
|
|
109
|
+
fallbackScore: fallbackScore(query, c.memory.content),
|
|
110
|
+
}));
|
|
111
|
+
// 기존 점수 + fallback 점수 가중 평균
|
|
112
|
+
scored.sort((a, b) => {
|
|
113
|
+
const scoreA = a.score * 0.5 + a.fallbackScore * 0.5;
|
|
114
|
+
const scoreB = b.score * 0.5 + b.fallbackScore * 0.5;
|
|
115
|
+
return scoreB - scoreA;
|
|
116
|
+
});
|
|
117
|
+
return scored.slice(0, topK).map(({ fallbackScore: _fs, ...rest }) => rest);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Cross-Encoder 출력에서 relevance score 추출
|
|
121
|
+
*/
|
|
122
|
+
extractScore(output) {
|
|
123
|
+
if (typeof output === 'number')
|
|
124
|
+
return output;
|
|
125
|
+
// { label: 'POSITIVE', score: 0.95 } 형태
|
|
126
|
+
if (output && typeof output.score === 'number') {
|
|
127
|
+
return output.score;
|
|
128
|
+
}
|
|
129
|
+
// [{ label, score }, ...] 배열 형태
|
|
130
|
+
if (Array.isArray(output) && output.length > 0) {
|
|
131
|
+
return output[0].score ?? 0;
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 사용 가능 여부 확인
|
|
137
|
+
*/
|
|
138
|
+
static async isAvailable() {
|
|
139
|
+
try {
|
|
140
|
+
await Function('return import("@huggingface/transformers")')();
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 싱글톤 리셋 (테스트용)
|
|
150
|
+
*/
|
|
151
|
+
export function resetRerankerPipeline() {
|
|
152
|
+
_rerankerPipeline = null;
|
|
153
|
+
_rerankerLoading = null;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/search/reranker.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import type { MemoryDatabase } from '../db/database.js';
|
|
15
15
|
import type { A2AConfig, Memory } from '../types/index.js';
|
|
16
16
|
import type { SkillCandidate, SkillMetadata, EvaluationResult, ReviewResult } from './types.js';
|
|
17
|
+
import type { A2AClient } from '../sync/client.js';
|
|
17
18
|
export declare class SkillEvaluator {
|
|
18
19
|
private db;
|
|
19
20
|
private config;
|
|
@@ -21,21 +22,18 @@ export declare class SkillEvaluator {
|
|
|
21
22
|
/**
|
|
22
23
|
* 메인 평가 파이프라인
|
|
23
24
|
*/
|
|
24
|
-
evaluate(projectPath?: string): Promise<EvaluationResult>;
|
|
25
|
+
evaluate(projectPath?: string, client?: A2AClient): Promise<EvaluationResult>;
|
|
25
26
|
/**
|
|
26
27
|
* Greedy Agglomerative 클러스터링
|
|
27
28
|
* 코사인 유사도 ≥ threshold인 메모리들을 같은 클러스터로 그룹화
|
|
28
29
|
*/
|
|
29
30
|
clusterMemories(memories: Memory[], threshold: number): Memory[][];
|
|
30
31
|
/**
|
|
31
|
-
* 5
|
|
32
|
-
* 1. 반복
|
|
33
|
-
*
|
|
34
|
-
* 3. 신뢰도 ≥ minConfidence
|
|
35
|
-
* 4. 다중 세션 출현
|
|
36
|
-
* 5. 일관된 카테고리 (majority)
|
|
32
|
+
* 3-AND + 2-Optional 평가 (기존 5-AND에서 완화)
|
|
33
|
+
* 필수(AND): 1. 반복 횟수, 2. 평균 유사도(0.75), 3. 기본 신뢰도(0.5)
|
|
34
|
+
* 보너스(Optional): 4. 다중 세션(×1.2), 5. 일관된 카테고리(×1.1)
|
|
37
35
|
*/
|
|
38
|
-
evaluateCluster(cluster: Memory[], minRepetitions: number,
|
|
36
|
+
evaluateCluster(cluster: Memory[], minRepetitions: number, _minConfidence: number): SkillCandidate | null;
|
|
39
37
|
/**
|
|
40
38
|
* LLM으로 스킬 유효성 검증
|
|
41
39
|
*/
|
|
@@ -43,7 +41,7 @@ export declare class SkillEvaluator {
|
|
|
43
41
|
/**
|
|
44
42
|
* N:1 압축하여 skill 메모리 생성
|
|
45
43
|
*/
|
|
46
|
-
compressToSkill(candidate: SkillCandidate): Memory
|
|
44
|
+
compressToSkill(candidate: SkillCandidate, client?: A2AClient): Promise<Memory>;
|
|
47
45
|
/**
|
|
48
46
|
* 90일 주기 재평가: 비활성 스킬 강등
|
|
49
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/skill/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/skill/evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAY;gBAEd,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS;IAKjD;;OAEG;IACG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyGnF;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE;IA4BlE;;;;OAIG;IACH,eAAe,CACb,OAAO,EAAE,MAAM,EAAE,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,GACrB,cAAc,GAAG,IAAI;IA6FxB;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAgClE;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAkFrF;;OAEG;IACH,YAAY,IAAI,YAAY;IAqD5B,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAqBzB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAYpD,OAAO,CAAC,iBAAiB;CAiB1B"}
|