adaptive-memory-multi-model-router 2.2.6 → 2.2.8
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.md +146 -105
- package/assets/benchmark-results.png +0 -0
- package/assets/complexity-scoring-v2.png +0 -0
- package/assets/complexity-scoring.png +0 -0
- package/assets/cost-comparison-chart.png +0 -0
- package/assets/cost-comparison-v2.png +0 -0
- package/assets/feature-comparison-v2.png +0 -0
- package/assets/feature-comparison-v3.png +0 -0
- package/assets/provider-health-chart.png +0 -0
- package/assets/provider-health-v2.png +0 -0
- package/assets/routing-flow-v2.png +0 -0
- package/assets/routing-flow-v3.png +0 -0
- package/assets/routing-flow.png +0 -0
- package/assets/tier-distribution.png +0 -0
- package/benchmark-results.json +620 -46
- package/dist/analytics/costAnalytics.d.ts +0 -1
- package/dist/cache/semanticCache.d.ts +0 -41
- package/dist/cache/semanticCache.d.ts.map +1 -1
- package/dist/cache/semanticCache.js +0 -142
- package/dist/cache/semanticCache.js.map +1 -1
- package/dist/cli.js +478 -35
- package/dist/cost/costTracker.js +3 -0
- package/dist/index.d.ts +0 -16
- package/dist/index.js +64 -264
- package/dist/integrations/langchainAdapter.d.ts +0 -1
- package/dist/integrations/oauth.d.ts +0 -1
- package/dist/memory/autoFetch.d.ts +0 -1
- package/dist/memory/memoryTree.d.ts +0 -1
- package/dist/memory/obsidianVault.d.ts +0 -1
- package/dist/providers/providerConfig.d.ts +0 -1
- package/dist/providers/providerConfig.js +0 -2
- package/dist/providers/registry.js +128 -126
- package/dist/routing/advancedRouter.js +427 -310
- package/dist/sdk.js +100 -109
- package/dist/security/guardrails.d.ts +0 -1
- package/dist/server/dashboard.d.ts +0 -1
- package/dist/server/modelMapper.d.ts +0 -1
- package/dist/server/proxyServer.d.ts +0 -1
- package/package.json +96 -389
- package/scripts/run-mmlu-benchmark.js +176 -0
- package/scripts/run-provider-benchmark.js +244 -0
- package/src/cache/semanticCache.ts +0 -148
- package/src/index.ts +99 -0
- package/test/provider-test.js +70 -91
- package/test.js +41 -67
- package/tsconfig.json +5 -15
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/sdk.d.ts.map +0 -1
- package/dist/sdk.js.map +0 -1
- package/test.js.bak +0 -376
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
* No external embedding API needed. Trigram overlap catches paraphrases like:
|
|
8
8
|
* "What is Python?" ≈ "Tell me about Python" ≈ "Explain Python"
|
|
9
9
|
* "Write a sort fn" ≈ "Create a sorting fn" ≈ "How to sort an array"
|
|
10
|
-
*
|
|
11
|
-
* Also supports cross-provider cache key generation via generateCacheKey().
|
|
12
10
|
*/
|
|
13
11
|
export interface CachedResponse {
|
|
14
12
|
query: string;
|
|
@@ -28,44 +26,6 @@ export interface SemanticCacheStats {
|
|
|
28
26
|
hitRate: number;
|
|
29
27
|
size: number;
|
|
30
28
|
}
|
|
31
|
-
export interface GenerateCacheKeyOptions {
|
|
32
|
-
/** Target provider (affects normalization rules) */
|
|
33
|
-
provider?: string;
|
|
34
|
-
/** Target model (for model-specific normalization) */
|
|
35
|
-
model?: string;
|
|
36
|
-
/** Custom normalization rules */
|
|
37
|
-
customRules?: Array<{
|
|
38
|
-
pattern: RegExp;
|
|
39
|
-
replacement: string;
|
|
40
|
-
}>;
|
|
41
|
-
}
|
|
42
|
-
export interface CacheKeyResult {
|
|
43
|
-
/** The normalized cache key string */
|
|
44
|
-
key: string;
|
|
45
|
-
/** Hash of the normalized content */
|
|
46
|
-
hash: string;
|
|
47
|
-
/** Metadata about what was normalized */
|
|
48
|
-
metadata: {
|
|
49
|
-
originalLength: number;
|
|
50
|
-
normalizedLength: number;
|
|
51
|
-
rulesApplied: number;
|
|
52
|
-
provider?: string;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Generate a deterministic cache key from a query.
|
|
57
|
-
* Same semantic content = same key across providers.
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* const key1 = semanticCache.generateCacheKey("What is Python?", { provider: "openai" });
|
|
61
|
-
* const key2 = semanticCache.generateCacheKey("What is Python?", { provider: "anthropic" });
|
|
62
|
-
* // key1.key === key2.key (same semantic content = same key)
|
|
63
|
-
*/
|
|
64
|
-
export declare function generateCacheKey(query: string, options?: GenerateCacheKeyOptions): CacheKeyResult;
|
|
65
|
-
/**
|
|
66
|
-
* Quick cache key generation (simplified API).
|
|
67
|
-
*/
|
|
68
|
-
export declare function toCacheKey(query: string, provider?: string): string;
|
|
69
29
|
export declare class SemanticCache {
|
|
70
30
|
private entries;
|
|
71
31
|
private maxSize;
|
|
@@ -100,4 +60,3 @@ export declare class SemanticCache {
|
|
|
100
60
|
*/
|
|
101
61
|
private evictOldest;
|
|
102
62
|
}
|
|
103
|
-
//# sourceMappingURL=semanticCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticCache.d.ts","sourceRoot":"","sources":["../../src/cache/semanticCache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"semanticCache.d.ts","sourceRoot":"","sources":["../../src/cache/semanticCache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAOD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AA+CD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,OAAO,CAAC,EAAE,oBAAoB;IAM1C;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkCxD;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCzE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,QAAQ,IAAI,kBAAkB;IAU9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,WAAW;CAYpB"}
|
|
@@ -8,47 +8,9 @@
|
|
|
8
8
|
* No external embedding API needed. Trigram overlap catches paraphrases like:
|
|
9
9
|
* "What is Python?" ≈ "Tell me about Python" ≈ "Explain Python"
|
|
10
10
|
* "Write a sort fn" ≈ "Create a sorting fn" ≈ "How to sort an array"
|
|
11
|
-
*
|
|
12
|
-
* Also supports cross-provider cache key generation via generateCacheKey().
|
|
13
11
|
*/
|
|
14
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
-
if (k2 === undefined) k2 = k;
|
|
16
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
-
}
|
|
20
|
-
Object.defineProperty(o, k2, desc);
|
|
21
|
-
}) : (function(o, m, k, k2) {
|
|
22
|
-
if (k2 === undefined) k2 = k;
|
|
23
|
-
o[k2] = m[k];
|
|
24
|
-
}));
|
|
25
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
-
}) : function(o, v) {
|
|
28
|
-
o["default"] = v;
|
|
29
|
-
});
|
|
30
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
-
var ownKeys = function(o) {
|
|
32
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
-
var ar = [];
|
|
34
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
-
return ar;
|
|
36
|
-
};
|
|
37
|
-
return ownKeys(o);
|
|
38
|
-
};
|
|
39
|
-
return function (mod) {
|
|
40
|
-
if (mod && mod.__esModule) return mod;
|
|
41
|
-
var result = {};
|
|
42
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
-
__setModuleDefault(result, mod);
|
|
44
|
-
return result;
|
|
45
|
-
};
|
|
46
|
-
})();
|
|
47
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
13
|
exports.SemanticCache = void 0;
|
|
49
|
-
exports.generateCacheKey = generateCacheKey;
|
|
50
|
-
exports.toCacheKey = toCacheKey;
|
|
51
|
-
const crypto = __importStar(require("crypto"));
|
|
52
14
|
// ============================================================
|
|
53
15
|
// N-gram utilities
|
|
54
16
|
// ============================================================
|
|
@@ -61,110 +23,6 @@ function normalize(text) {
|
|
|
61
23
|
.replace(/\s+/g, " ")
|
|
62
24
|
.trim();
|
|
63
25
|
}
|
|
64
|
-
// ============================================================
|
|
65
|
-
// Cross-Provider Cache Key Generation
|
|
66
|
-
// ============================================================
|
|
67
|
-
/**
|
|
68
|
-
* Provider-specific formatting patterns to strip for cross-provider cache keys.
|
|
69
|
-
*/
|
|
70
|
-
const PROVIDER_SYSTEM_PATTERNS = {
|
|
71
|
-
anthropic: [
|
|
72
|
-
/<anthropic_thinking>[\s\S]*?<\/anthropic_thinking>/gi,
|
|
73
|
-
/<thinking>[\s\S]*?<\/thinking>/gi,
|
|
74
|
-
/Human:/gi,
|
|
75
|
-
/Assistant:/gi,
|
|
76
|
-
],
|
|
77
|
-
openai: [
|
|
78
|
-
/<|im_start|>/gi,
|
|
79
|
-
/<|im_end|>/gi,
|
|
80
|
-
],
|
|
81
|
-
google: [
|
|
82
|
-
/<content>[\s\S]*?<\/content>/gi,
|
|
83
|
-
/[Parts|thought]/gi,
|
|
84
|
-
],
|
|
85
|
-
};
|
|
86
|
-
/**
|
|
87
|
-
* Generate a deterministic cache key from a query.
|
|
88
|
-
* Same semantic content = same key across providers.
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* const key1 = semanticCache.generateCacheKey("What is Python?", { provider: "openai" });
|
|
92
|
-
* const key2 = semanticCache.generateCacheKey("What is Python?", { provider: "anthropic" });
|
|
93
|
-
* // key1.key === key2.key (same semantic content = same key)
|
|
94
|
-
*/
|
|
95
|
-
function generateCacheKey(query, options = {}) {
|
|
96
|
-
const originalLength = query.length;
|
|
97
|
-
// Step 1: Unicode normalization (NFC)
|
|
98
|
-
let normalized = query.normalize('NFC');
|
|
99
|
-
// Step 2: Collapse whitespace
|
|
100
|
-
normalized = normalized.replace(/\s+/g, ' ');
|
|
101
|
-
// Step 3: Remove control characters
|
|
102
|
-
normalized = normalized.replace(/[\x00-\x1F\x7F]/g, '');
|
|
103
|
-
// Step 4: Strip provider-specific formatting
|
|
104
|
-
if (options.provider) {
|
|
105
|
-
const patterns = PROVIDER_SYSTEM_PATTERNS[options.provider] || [];
|
|
106
|
-
for (const pattern of patterns) {
|
|
107
|
-
normalized = normalized.replace(pattern, '');
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// Step 5: General system/assistant role removal
|
|
111
|
-
normalized = normalized
|
|
112
|
-
.replace(/\b(system|user|assistant|human|bot)\s*:/gi, '')
|
|
113
|
-
.replace(/^(system|user|assistant|human|bot)\s*/gim, '');
|
|
114
|
-
// Step 6: Remove markdown formatting
|
|
115
|
-
normalized = normalized
|
|
116
|
-
.replace(/```[\s\S]*?```/g, '[CODE_BLOCK]')
|
|
117
|
-
.replace(/`([^`]+)`/g, '$1')
|
|
118
|
-
.replace(/\*\*([^*]+)\*\*/g, '$1')
|
|
119
|
-
.replace(/_([^_]+)_/g, '$1')
|
|
120
|
-
.replace(/#+\s*/g, '')
|
|
121
|
-
.replace(/^\s*[-*+]\s+/gm, '')
|
|
122
|
-
.replace(/^\s*\d+\.\s+/gm, '');
|
|
123
|
-
// Step 7: Apply custom rules
|
|
124
|
-
if (options.customRules) {
|
|
125
|
-
for (const rule of options.customRules) {
|
|
126
|
-
normalized = normalized.replace(rule.pattern, rule.replacement);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
// Step 8: Final whitespace collapse
|
|
130
|
-
normalized = normalized.replace(/\s+/g, ' ').trim();
|
|
131
|
-
// Count rules applied
|
|
132
|
-
let rulesApplied = 3; // Base normalizations
|
|
133
|
-
if (options.provider)
|
|
134
|
-
rulesApplied += 2;
|
|
135
|
-
if (options.customRules)
|
|
136
|
-
rulesApplied += options.customRules.length;
|
|
137
|
-
// Generate hash
|
|
138
|
-
const hash = crypto
|
|
139
|
-
.createHash('sha256')
|
|
140
|
-
.update(normalized)
|
|
141
|
-
.digest('hex')
|
|
142
|
-
.substring(0, 16);
|
|
143
|
-
// Build key
|
|
144
|
-
let key = `v1:${hash}`;
|
|
145
|
-
if (options.provider) {
|
|
146
|
-
key += `:${options.provider}`;
|
|
147
|
-
if (options.model) {
|
|
148
|
-
key += `:${options.model}`;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return {
|
|
152
|
-
key,
|
|
153
|
-
hash,
|
|
154
|
-
metadata: {
|
|
155
|
-
originalLength,
|
|
156
|
-
normalizedLength: normalized.length,
|
|
157
|
-
rulesApplied,
|
|
158
|
-
provider: options.provider,
|
|
159
|
-
},
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Quick cache key generation (simplified API).
|
|
164
|
-
*/
|
|
165
|
-
function toCacheKey(query, provider) {
|
|
166
|
-
return generateCacheKey(query, { provider }).key;
|
|
167
|
-
}
|
|
168
26
|
/**
|
|
169
27
|
* Extract character trigrams from text.
|
|
170
28
|
* Pads with spaces so short words still produce trigrams.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticCache.js","sourceRoot":"","sources":["../../src/cache/semanticCache.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"semanticCache.js","sourceRoot":"","sources":["../../src/cache/semanticCache.ts"],"names":[],"mappings":"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"}
|