toonify-mcp 0.2.3 → 0.3.1
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.de.md +270 -0
- package/README.es.md +270 -0
- package/README.fr.md +270 -0
- package/README.id.md +270 -0
- package/README.ja.md +270 -0
- package/README.ko.md +270 -0
- package/README.md +21 -10
- package/README.pt.md +270 -0
- package/README.ru.md +270 -0
- package/README.vi.md +270 -0
- package/README.zh-CN.md +270 -0
- package/README.zh-TW.md +27 -16
- package/dist/metrics/metrics-collector.d.ts +2 -0
- package/dist/metrics/metrics-collector.d.ts.map +1 -1
- package/dist/metrics/metrics-collector.js +43 -8
- package/dist/metrics/metrics-collector.js.map +1 -1
- package/dist/optimizer/caching/cache-optimizer.d.ts +53 -0
- package/dist/optimizer/caching/cache-optimizer.d.ts.map +1 -0
- package/dist/optimizer/caching/cache-optimizer.js +176 -0
- package/dist/optimizer/caching/cache-optimizer.js.map +1 -0
- package/dist/optimizer/caching/cache-strategies.d.ts +19 -0
- package/dist/optimizer/caching/cache-strategies.d.ts.map +1 -0
- package/dist/optimizer/caching/cache-strategies.js +62 -0
- package/dist/optimizer/caching/cache-strategies.js.map +1 -0
- package/dist/optimizer/caching/cache-types.d.ts +36 -0
- package/dist/optimizer/caching/cache-types.d.ts.map +1 -0
- package/dist/optimizer/caching/cache-types.js +5 -0
- package/dist/optimizer/caching/cache-types.js.map +1 -0
- package/dist/optimizer/caching/index.d.ts +7 -0
- package/dist/optimizer/caching/index.d.ts.map +1 -0
- package/dist/optimizer/caching/index.js +7 -0
- package/dist/optimizer/caching/index.js.map +1 -0
- package/dist/optimizer/multilingual/index.d.ts +7 -0
- package/dist/optimizer/multilingual/index.d.ts.map +1 -0
- package/dist/optimizer/multilingual/index.js +7 -0
- package/dist/optimizer/multilingual/index.js.map +1 -0
- package/dist/optimizer/multilingual/language-detector.d.ts +43 -0
- package/dist/optimizer/multilingual/language-detector.d.ts.map +1 -0
- package/dist/optimizer/multilingual/language-detector.js +161 -0
- package/dist/optimizer/multilingual/language-detector.js.map +1 -0
- package/dist/optimizer/multilingual/language-profiles.d.ts +34 -0
- package/dist/optimizer/multilingual/language-profiles.d.ts.map +1 -0
- package/dist/optimizer/multilingual/language-profiles.js +196 -0
- package/dist/optimizer/multilingual/language-profiles.js.map +1 -0
- package/dist/optimizer/multilingual/tokenizer-adapter.d.ts +47 -0
- package/dist/optimizer/multilingual/tokenizer-adapter.d.ts.map +1 -0
- package/dist/optimizer/multilingual/tokenizer-adapter.js +96 -0
- package/dist/optimizer/multilingual/tokenizer-adapter.js.map +1 -0
- package/dist/optimizer/token-optimizer.d.ts +11 -1
- package/dist/optimizer/token-optimizer.d.ts.map +1 -1
- package/dist/optimizer/token-optimizer.js +49 -8
- package/dist/optimizer/token-optimizer.js.map +1 -1
- package/dist/optimizer/types.d.ts +15 -0
- package/dist/optimizer/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -24,6 +24,17 @@ export class MetricsCollector {
|
|
|
24
24
|
stats.tokensBeforeOptimization += metric.originalTokens;
|
|
25
25
|
stats.tokensAfterOptimization += metric.optimizedTokens;
|
|
26
26
|
stats.totalSavings += metric.savings;
|
|
27
|
+
// v0.3.0: Track cache metrics
|
|
28
|
+
if (metric.wasCached) {
|
|
29
|
+
stats.cacheHits = (stats.cacheHits || 0) + 1;
|
|
30
|
+
stats.estimatedCacheSavings = (stats.estimatedCacheSavings || 0) + (metric.cacheSavings || 0);
|
|
31
|
+
}
|
|
32
|
+
else if (metric.wasOptimized) {
|
|
33
|
+
stats.cacheMisses = (stats.cacheMisses || 0) + 1;
|
|
34
|
+
}
|
|
35
|
+
// Calculate cache hit rate
|
|
36
|
+
const totalCacheAttempts = (stats.cacheHits || 0) + (stats.cacheMisses || 0);
|
|
37
|
+
stats.cacheHitRate = totalCacheAttempts > 0 ? (stats.cacheHits || 0) / totalCacheAttempts : 0;
|
|
27
38
|
// Recalculate average
|
|
28
39
|
stats.averageSavingsPercentage =
|
|
29
40
|
stats.optimizedRequests > 0
|
|
@@ -61,6 +72,11 @@ export class MetricsCollector {
|
|
|
61
72
|
tokensAfterOptimization: 0,
|
|
62
73
|
totalSavings: 0,
|
|
63
74
|
averageSavingsPercentage: 0,
|
|
75
|
+
// v0.3.0: Cache stats
|
|
76
|
+
cacheHits: 0,
|
|
77
|
+
cacheMisses: 0,
|
|
78
|
+
cacheHitRate: 0,
|
|
79
|
+
estimatedCacheSavings: 0,
|
|
64
80
|
};
|
|
65
81
|
}
|
|
66
82
|
}
|
|
@@ -75,19 +91,38 @@ export class MetricsCollector {
|
|
|
75
91
|
*/
|
|
76
92
|
async formatDashboard() {
|
|
77
93
|
const stats = await this.getStats();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
const optimizationRate = stats.totalRequests > 0
|
|
95
|
+
? ((stats.optimizedRequests / stats.totalRequests) * 100).toFixed(1)
|
|
96
|
+
: '0.0';
|
|
97
|
+
// v0.3.0: Calculate total savings including cache
|
|
98
|
+
const totalSavingsWithCache = stats.totalSavings + (stats.estimatedCacheSavings || 0);
|
|
99
|
+
const costSavings = ((totalSavingsWithCache / 1_000_000) * 3).toFixed(2);
|
|
100
|
+
let dashboard = `
|
|
101
|
+
📊 Token Optimization Stats (v0.3.0)
|
|
102
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
81
103
|
Total Requests: ${stats.totalRequests}
|
|
82
|
-
Optimized: ${stats.optimizedRequests} (${
|
|
104
|
+
Optimized: ${stats.optimizedRequests} (${optimizationRate}%)
|
|
83
105
|
|
|
84
106
|
Tokens Before: ${stats.tokensBeforeOptimization.toLocaleString()}
|
|
85
107
|
Tokens After: ${stats.tokensAfterOptimization.toLocaleString()}
|
|
86
|
-
Total Savings: ${stats.totalSavings.toLocaleString()} (${stats.averageSavingsPercentage.toFixed(1)}%)
|
|
108
|
+
Total Savings: ${stats.totalSavings.toLocaleString()} (${stats.averageSavingsPercentage.toFixed(1)}%)`;
|
|
109
|
+
// Add cache stats if available
|
|
110
|
+
if (stats.cacheHits || stats.cacheMisses) {
|
|
111
|
+
const cacheHitRate = (stats.cacheHitRate * 100).toFixed(1);
|
|
112
|
+
dashboard += `
|
|
113
|
+
|
|
114
|
+
🚀 Prompt Caching Stats
|
|
115
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
116
|
+
Cache Hits: ${stats.cacheHits}
|
|
117
|
+
Cache Misses: ${stats.cacheMisses}
|
|
118
|
+
Hit Rate: ${cacheHitRate}%
|
|
119
|
+
Additional Cache Savings: ${(stats.estimatedCacheSavings || 0).toLocaleString()} tokens`;
|
|
120
|
+
}
|
|
121
|
+
dashboard += `
|
|
87
122
|
|
|
88
|
-
💰 Cost Savings (at $3/1M input tokens):
|
|
89
|
-
$${
|
|
90
|
-
|
|
123
|
+
💰 Total Cost Savings (at $3/1M input tokens):
|
|
124
|
+
$${costSavings} saved`;
|
|
125
|
+
return dashboard.trim();
|
|
91
126
|
}
|
|
92
127
|
}
|
|
93
128
|
//# sourceMappingURL=metrics-collector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-collector.js","sourceRoot":"","sources":["../../src/metrics/metrics-collector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"metrics-collector.js","sourceRoot":"","sources":["../../src/metrics/metrics-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Optimizer: Structures content for prompt caching
|
|
3
|
+
*/
|
|
4
|
+
import type { CacheConfig, CachedContent, CacheMetrics } from './cache-types.js';
|
|
5
|
+
export declare class CacheOptimizer {
|
|
6
|
+
private config;
|
|
7
|
+
private metrics;
|
|
8
|
+
constructor(config?: Partial<CacheConfig>);
|
|
9
|
+
/**
|
|
10
|
+
* Wrap optimized TOON content with cache-friendly structure
|
|
11
|
+
*/
|
|
12
|
+
wrapWithCaching(toonContent: string, toolName: string, format: 'json' | 'csv' | 'yaml', originalTokens: number, optimizedTokens: number): CachedContent;
|
|
13
|
+
/**
|
|
14
|
+
* Create cacheable static prefix with TOON format instructions
|
|
15
|
+
*/
|
|
16
|
+
private createStaticPrefix;
|
|
17
|
+
/**
|
|
18
|
+
* Format TOON output with metadata
|
|
19
|
+
*/
|
|
20
|
+
private formatTOONOutput;
|
|
21
|
+
/**
|
|
22
|
+
* Format for Anthropic cache_control API
|
|
23
|
+
*/
|
|
24
|
+
formatForAnthropic(cached: CachedContent): any[];
|
|
25
|
+
/**
|
|
26
|
+
* Format for OpenAI (structured but no explicit cache control)
|
|
27
|
+
*/
|
|
28
|
+
formatForOpenAI(cached: CachedContent): {
|
|
29
|
+
system: string;
|
|
30
|
+
user: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Get current cache metrics
|
|
34
|
+
*/
|
|
35
|
+
getMetrics(): CacheMetrics;
|
|
36
|
+
/**
|
|
37
|
+
* Record a cache hit (when static prefix is reused)
|
|
38
|
+
*/
|
|
39
|
+
recordCacheHit(savedTokens: number): void;
|
|
40
|
+
/**
|
|
41
|
+
* Record a cache miss (when static prefix is not cached)
|
|
42
|
+
*/
|
|
43
|
+
recordCacheMiss(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Update cache hit rate
|
|
46
|
+
*/
|
|
47
|
+
private updateHitRate;
|
|
48
|
+
/**
|
|
49
|
+
* Reset metrics
|
|
50
|
+
*/
|
|
51
|
+
resetMetrics(): void;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=cache-optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-optimizer.d.ts","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-optimizer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAiB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhG,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,OAAO,CAAe;gBAElB,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAoB7C;;OAEG;IACH,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,EAC/B,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,aAAa;IAgDhB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAIxB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,EAAE;IAkBhD;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAOxE;;OAEG;IACH,UAAU,IAAI,YAAY;IAI1B;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMzC;;OAEG;IACH,eAAe,IAAI,IAAI;IAKvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,YAAY,IAAI,IAAI;CAUrB"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Optimizer: Structures content for prompt caching
|
|
3
|
+
*/
|
|
4
|
+
import { getStrategy } from './cache-strategies.js';
|
|
5
|
+
export class CacheOptimizer {
|
|
6
|
+
config;
|
|
7
|
+
metrics;
|
|
8
|
+
constructor(config = {}) {
|
|
9
|
+
this.config = {
|
|
10
|
+
enabled: true,
|
|
11
|
+
provider: 'auto',
|
|
12
|
+
ttl: '1hour',
|
|
13
|
+
cacheStaticPrompts: true,
|
|
14
|
+
minCacheableTokens: 1024,
|
|
15
|
+
...config
|
|
16
|
+
};
|
|
17
|
+
this.metrics = {
|
|
18
|
+
cacheHits: 0,
|
|
19
|
+
cacheMisses: 0,
|
|
20
|
+
cacheHitRate: 0,
|
|
21
|
+
estimatedCacheSavings: 0,
|
|
22
|
+
totalCacheableTokens: 0,
|
|
23
|
+
averageCacheReuseCount: 0
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrap optimized TOON content with cache-friendly structure
|
|
28
|
+
*/
|
|
29
|
+
wrapWithCaching(toonContent, toolName, format, originalTokens, optimizedTokens) {
|
|
30
|
+
if (!this.config.enabled || !this.config.cacheStaticPrompts) {
|
|
31
|
+
// Return non-cached structure
|
|
32
|
+
return {
|
|
33
|
+
staticPrefix: '',
|
|
34
|
+
dynamicContent: this.formatTOONOutput(toonContent, toolName, format),
|
|
35
|
+
cacheBreakpoint: false
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
// Check if content is large enough for caching
|
|
39
|
+
const strategy = getStrategy(this.config.provider);
|
|
40
|
+
if (!strategy.shouldCache(toonContent, optimizedTokens)) {
|
|
41
|
+
return {
|
|
42
|
+
staticPrefix: '',
|
|
43
|
+
dynamicContent: this.formatTOONOutput(toonContent, toolName, format),
|
|
44
|
+
cacheBreakpoint: false
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Create cacheable static prefix
|
|
48
|
+
const staticPrefix = this.createStaticPrefix(toolName, format);
|
|
49
|
+
// Dynamic content (cache breakpoint here)
|
|
50
|
+
const dynamicContent = `\n[DATA]\n${toonContent}`;
|
|
51
|
+
// Estimate cache size
|
|
52
|
+
const estimatedCacheSize = staticPrefix.length / 4; // Rough estimate
|
|
53
|
+
const metadata = {
|
|
54
|
+
provider: this.config.provider === 'auto' ?
|
|
55
|
+
(process.env.ANTHROPIC_API_KEY ? 'anthropic' : 'openai') :
|
|
56
|
+
this.config.provider,
|
|
57
|
+
estimatedCacheSize,
|
|
58
|
+
ttl: this.config.ttl
|
|
59
|
+
};
|
|
60
|
+
// Update metrics
|
|
61
|
+
this.metrics.totalCacheableTokens += estimatedCacheSize;
|
|
62
|
+
return {
|
|
63
|
+
staticPrefix,
|
|
64
|
+
dynamicContent,
|
|
65
|
+
cacheBreakpoint: true,
|
|
66
|
+
cacheMetadata: metadata
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create cacheable static prefix with TOON format instructions
|
|
71
|
+
*/
|
|
72
|
+
createStaticPrefix(toolName, format) {
|
|
73
|
+
return `[SYSTEM] Token-Optimized Data from ${toolName}
|
|
74
|
+
|
|
75
|
+
The following data has been converted to TOON format for token efficiency.
|
|
76
|
+
|
|
77
|
+
TOON Format Specification:
|
|
78
|
+
- Arrays: name[size]{fields}: value1,value2
|
|
79
|
+
Example: users[2]{id,name}: 1,Alice 2,Bob
|
|
80
|
+
|
|
81
|
+
- Objects: key: value
|
|
82
|
+
Example: config.port: 8080
|
|
83
|
+
|
|
84
|
+
- Nested structures: parent.child: value
|
|
85
|
+
Example: server.config.timeout: 30
|
|
86
|
+
|
|
87
|
+
- Mixed types supported: strings, numbers, booleans, null
|
|
88
|
+
|
|
89
|
+
Source Format: ${format.toUpperCase()}
|
|
90
|
+
Optimization: ~60-95% token reduction
|
|
91
|
+
|
|
92
|
+
Instructions:
|
|
93
|
+
1. Parse the TOON-formatted data below
|
|
94
|
+
2. Interpret field names from the schema
|
|
95
|
+
3. Reconstruct the original data structure if needed
|
|
96
|
+
4. Use the data to answer the user's request
|
|
97
|
+
|
|
98
|
+
---`;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format TOON output with metadata
|
|
102
|
+
*/
|
|
103
|
+
formatTOONOutput(toonContent, toolName, format) {
|
|
104
|
+
return `[TOON-${format.toUpperCase()}]\n${toonContent}`;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Format for Anthropic cache_control API
|
|
108
|
+
*/
|
|
109
|
+
formatForAnthropic(cached) {
|
|
110
|
+
if (!cached.cacheBreakpoint) {
|
|
111
|
+
return [{ type: 'text', text: cached.dynamicContent }];
|
|
112
|
+
}
|
|
113
|
+
return [
|
|
114
|
+
{
|
|
115
|
+
type: 'text',
|
|
116
|
+
text: cached.staticPrefix,
|
|
117
|
+
cache_control: { type: 'ephemeral' }
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'text',
|
|
121
|
+
text: cached.dynamicContent
|
|
122
|
+
}
|
|
123
|
+
];
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Format for OpenAI (structured but no explicit cache control)
|
|
127
|
+
*/
|
|
128
|
+
formatForOpenAI(cached) {
|
|
129
|
+
return {
|
|
130
|
+
system: cached.staticPrefix || 'Process the following TOON-formatted data:',
|
|
131
|
+
user: cached.dynamicContent
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get current cache metrics
|
|
136
|
+
*/
|
|
137
|
+
getMetrics() {
|
|
138
|
+
return { ...this.metrics };
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Record a cache hit (when static prefix is reused)
|
|
142
|
+
*/
|
|
143
|
+
recordCacheHit(savedTokens) {
|
|
144
|
+
this.metrics.cacheHits++;
|
|
145
|
+
this.metrics.estimatedCacheSavings += savedTokens;
|
|
146
|
+
this.updateHitRate();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Record a cache miss (when static prefix is not cached)
|
|
150
|
+
*/
|
|
151
|
+
recordCacheMiss() {
|
|
152
|
+
this.metrics.cacheMisses++;
|
|
153
|
+
this.updateHitRate();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update cache hit rate
|
|
157
|
+
*/
|
|
158
|
+
updateHitRate() {
|
|
159
|
+
const total = this.metrics.cacheHits + this.metrics.cacheMisses;
|
|
160
|
+
this.metrics.cacheHitRate = total > 0 ? this.metrics.cacheHits / total : 0;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Reset metrics
|
|
164
|
+
*/
|
|
165
|
+
resetMetrics() {
|
|
166
|
+
this.metrics = {
|
|
167
|
+
cacheHits: 0,
|
|
168
|
+
cacheMisses: 0,
|
|
169
|
+
cacheHitRate: 0,
|
|
170
|
+
estimatedCacheSavings: 0,
|
|
171
|
+
totalCacheableTokens: 0,
|
|
172
|
+
averageCacheReuseCount: 0
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=cache-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-optimizer.js","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caching strategies for different providers
|
|
3
|
+
*/
|
|
4
|
+
import type { CacheStrategy } from './cache-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Anthropic Prompt Caching Strategy
|
|
7
|
+
* https://docs.anthropic.com/claude/docs/prompt-caching
|
|
8
|
+
*/
|
|
9
|
+
export declare const anthropicStrategy: CacheStrategy;
|
|
10
|
+
/**
|
|
11
|
+
* OpenAI Prompt Caching Strategy (Placeholder)
|
|
12
|
+
* Note: OpenAI's caching is automatic and not configurable via API
|
|
13
|
+
*/
|
|
14
|
+
export declare const openaiStrategy: CacheStrategy;
|
|
15
|
+
/**
|
|
16
|
+
* Get strategy by provider name
|
|
17
|
+
*/
|
|
18
|
+
export declare function getStrategy(provider: 'anthropic' | 'openai' | 'auto'): CacheStrategy;
|
|
19
|
+
//# sourceMappingURL=cache-strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-strategies.d.ts","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,kBAAkB,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAsB/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,aAiB5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,aAAa,CAUpF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caching strategies for different providers
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Anthropic Prompt Caching Strategy
|
|
6
|
+
* https://docs.anthropic.com/claude/docs/prompt-caching
|
|
7
|
+
*/
|
|
8
|
+
export const anthropicStrategy = {
|
|
9
|
+
name: 'anthropic',
|
|
10
|
+
shouldCache(content, tokens) {
|
|
11
|
+
// Anthropic requires minimum 1024 tokens for cache breakpoints
|
|
12
|
+
// and minimum 2048 tokens for effective caching
|
|
13
|
+
return tokens >= 1024;
|
|
14
|
+
},
|
|
15
|
+
formatCacheStructure(cached) {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: cached.staticPrefix,
|
|
20
|
+
cache_control: { type: 'ephemeral' }
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
type: 'text',
|
|
24
|
+
text: cached.dynamicContent
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* OpenAI Prompt Caching Strategy (Placeholder)
|
|
31
|
+
* Note: OpenAI's caching is automatic and not configurable via API
|
|
32
|
+
*/
|
|
33
|
+
export const openaiStrategy = {
|
|
34
|
+
name: 'openai',
|
|
35
|
+
shouldCache(content, tokens) {
|
|
36
|
+
// OpenAI's caching is automatic
|
|
37
|
+
// We still structure prompts for better reuse
|
|
38
|
+
return tokens >= 500;
|
|
39
|
+
},
|
|
40
|
+
formatCacheStructure(cached) {
|
|
41
|
+
// OpenAI doesn't have explicit cache_control
|
|
42
|
+
// Just return structured content
|
|
43
|
+
return {
|
|
44
|
+
system: cached.staticPrefix,
|
|
45
|
+
user: cached.dynamicContent
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Get strategy by provider name
|
|
51
|
+
*/
|
|
52
|
+
export function getStrategy(provider) {
|
|
53
|
+
if (provider === 'auto') {
|
|
54
|
+
// Auto-detect based on environment
|
|
55
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
56
|
+
return anthropicStrategy;
|
|
57
|
+
}
|
|
58
|
+
return openaiStrategy;
|
|
59
|
+
}
|
|
60
|
+
return provider === 'anthropic' ? anthropicStrategy : openaiStrategy;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=cache-strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-strategies.js","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,IAAI,EAAE,WAAW;IAEjB,WAAW,CAAC,OAAe,EAAE,MAAc;QACzC,+DAA+D;QAC/D,gDAAgD;QAChD,OAAO,MAAM,IAAI,IAAI,CAAC;IACxB,CAAC;IAED,oBAAoB,CAAC,MAAqB;QACxC,OAAO;YACL;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,CAAC,YAAY;gBACzB,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aACrC;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM,CAAC,cAAc;aAC5B;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,IAAI,EAAE,QAAQ;IAEd,WAAW,CAAC,OAAe,EAAE,MAAc;QACzC,gCAAgC;QAChC,8CAA8C;QAC9C,OAAO,MAAM,IAAI,GAAG,CAAC;IACvB,CAAC;IAED,oBAAoB,CAAC,MAAqB;QACxC,6CAA6C;QAC7C,iCAAiC;QACjC,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,IAAI,EAAE,MAAM,CAAC,cAAc;SAC5B,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAyC;IACnE,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,mCAAmC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAClC,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for prompt caching integration
|
|
3
|
+
*/
|
|
4
|
+
export interface CacheConfig {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
provider: 'anthropic' | 'openai' | 'auto';
|
|
7
|
+
ttl?: '5min' | '1hour';
|
|
8
|
+
cacheStaticPrompts: boolean;
|
|
9
|
+
minCacheableTokens?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface CachedContent {
|
|
12
|
+
staticPrefix: string;
|
|
13
|
+
dynamicContent: string;
|
|
14
|
+
cacheBreakpoint: boolean;
|
|
15
|
+
cacheMetadata?: CacheMetadata;
|
|
16
|
+
}
|
|
17
|
+
export interface CacheMetadata {
|
|
18
|
+
provider: 'anthropic' | 'openai';
|
|
19
|
+
estimatedCacheSize: number;
|
|
20
|
+
cacheKey?: string;
|
|
21
|
+
ttl?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface CacheMetrics {
|
|
24
|
+
cacheHits: number;
|
|
25
|
+
cacheMisses: number;
|
|
26
|
+
cacheHitRate: number;
|
|
27
|
+
estimatedCacheSavings: number;
|
|
28
|
+
totalCacheableTokens: number;
|
|
29
|
+
averageCacheReuseCount: number;
|
|
30
|
+
}
|
|
31
|
+
export interface CacheStrategy {
|
|
32
|
+
name: string;
|
|
33
|
+
shouldCache: (content: string, tokens: number) => boolean;
|
|
34
|
+
formatCacheStructure: (content: CachedContent) => any;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cache-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-types.d.ts","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1D,oBAAoB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,GAAG,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-types.js","sourceRoot":"","sources":["../../../src/optimizer/caching/cache-types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/optimizer/caching/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/optimizer/caching/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/optimizer/multilingual/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/optimizer/multilingual/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language detection for token estimation
|
|
3
|
+
*/
|
|
4
|
+
import { type LanguageProfile } from './language-profiles.js';
|
|
5
|
+
export interface LanguageDetectionResult {
|
|
6
|
+
language: LanguageProfile;
|
|
7
|
+
confidence: number;
|
|
8
|
+
detectedPatterns: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class LanguageDetector {
|
|
11
|
+
private sampleSize;
|
|
12
|
+
constructor(sampleSize?: number);
|
|
13
|
+
/**
|
|
14
|
+
* Detect language from text content
|
|
15
|
+
*/
|
|
16
|
+
detect(text: string): LanguageDetectionResult;
|
|
17
|
+
/**
|
|
18
|
+
* Detect if text is mixed-language
|
|
19
|
+
*/
|
|
20
|
+
detectMixed(text: string): LanguageProfile[];
|
|
21
|
+
/**
|
|
22
|
+
* Estimate token multiplier for mixed-language content
|
|
23
|
+
*/
|
|
24
|
+
estimateMultiplierForMixed(languages: LanguageProfile[]): number;
|
|
25
|
+
/**
|
|
26
|
+
* Estimate tokens with language awareness
|
|
27
|
+
*/
|
|
28
|
+
estimateTokens(text: string, baseTokens: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Estimate tokens for mixed-language content
|
|
31
|
+
*/
|
|
32
|
+
estimateTokensMixed(text: string, baseTokens: number): number;
|
|
33
|
+
/**
|
|
34
|
+
* Get detailed language breakdown
|
|
35
|
+
*/
|
|
36
|
+
analyze(text: string): {
|
|
37
|
+
primary: LanguageDetectionResult;
|
|
38
|
+
all: LanguageProfile[];
|
|
39
|
+
estimatedMultiplier: number;
|
|
40
|
+
isMixed: boolean;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=language-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../../src/optimizer/multilingual/language-detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAY;IAIpC;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB;IA+E7C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;IAgC5C;;OAEG;IACH,0BAA0B,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,MAAM;IAahE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAYxD;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAM7D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QACrB,OAAO,EAAE,uBAAuB,CAAC;QACjC,GAAG,EAAE,eAAe,EAAE,CAAC;QACvB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC;KAClB;CAeF"}
|