adaptive-memory-multi-model-router 1.2.2 → 1.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.
Files changed (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -66
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/integrations/airtable.js +20 -0
  6. package/dist/integrations/discord.js +18 -0
  7. package/dist/integrations/github.js +23 -0
  8. package/dist/integrations/gmail.js +19 -0
  9. package/dist/integrations/google-calendar.js +18 -0
  10. package/dist/integrations/index.js +61 -0
  11. package/dist/integrations/jira.js +21 -0
  12. package/dist/integrations/linear.js +19 -0
  13. package/dist/integrations/notion.js +19 -0
  14. package/dist/integrations/slack.js +18 -0
  15. package/dist/integrations/telegram.js +19 -0
  16. package/dist/providers/registry.js +7 -3
  17. package/docs/ARCHITECTURAL-IMPROVEMENTS-2025.md +1391 -0
  18. package/docs/ARCHITECTURAL-IMPROVEMENTS-REVISED-2025.md +1051 -0
  19. package/docs/CONFIGURATION.md +476 -0
  20. package/docs/COUNCIL_DECISION.json +308 -0
  21. package/docs/COUNCIL_SUMMARY.md +265 -0
  22. package/docs/COUNCIL_V2.2_DECISION.md +416 -0
  23. package/docs/IMPROVEMENT_ROADMAP.md +515 -0
  24. package/docs/LLM_COUNCIL_DECISION.md +508 -0
  25. package/docs/QUICK_START_VISIBILITY.md +782 -0
  26. package/docs/REDDIT_GAP_ANALYSIS.md +299 -0
  27. package/docs/RESEARCH_BACKED_IMPROVEMENTS.md +1180 -0
  28. package/docs/TMLPD_QNA.md +751 -0
  29. package/docs/TMLPD_V2.1_COMPLETE.md +763 -0
  30. package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +754 -0
  31. package/docs/V2.2_IMPLEMENTATION_COMPLETE.md +446 -0
  32. package/docs/V2_IMPLEMENTATION_GUIDE.md +388 -0
  33. package/docs/VISIBILITY_ADOPTION_PLAN.md +1005 -0
  34. package/docs/launch-content/LAUNCH_EXECUTION_CHECKLIST.md +421 -0
  35. package/docs/launch-content/README.md +457 -0
  36. package/docs/launch-content/assets/cost_comparison_100_tasks.png +0 -0
  37. package/docs/launch-content/assets/cumulative_savings.png +0 -0
  38. package/docs/launch-content/assets/parallel_speedup.png +0 -0
  39. package/docs/launch-content/assets/provider_pricing_comparison.png +0 -0
  40. package/docs/launch-content/assets/task_breakdown_comparison.png +0 -0
  41. package/docs/launch-content/generate_charts.py +313 -0
  42. package/docs/launch-content/hn_show_post.md +139 -0
  43. package/docs/launch-content/partner_outreach_templates.md +745 -0
  44. package/docs/launch-content/reddit_posts.md +467 -0
  45. package/docs/launch-content/twitter_thread.txt +460 -0
  46. package/examples/QUICKSTART.md +1 -1
  47. package/openclaw-alexa-bridge/ALL_REMAINING_FIXES_PLAN.md +313 -0
  48. package/openclaw-alexa-bridge/REMAINING_FIXES_SUMMARY.md +277 -0
  49. package/openclaw-alexa-bridge/src/alexa_handler_no_tmlpd.js +1234 -0
  50. package/openclaw-alexa-bridge/test_fixes.js +77 -0
  51. package/package.json +120 -29
  52. package/package.json.tmp +0 -0
  53. package/qna/TMLPD_QNA.md +3 -3
  54. package/skill/SKILL.md +2 -2
  55. package/src/__tests__/integration/tmpld_integration.test.py +540 -0
  56. package/src/agents/skill_enhanced_agent.py +318 -0
  57. package/src/memory/__init__.py +15 -0
  58. package/src/memory/agentic_memory.py +353 -0
  59. package/src/memory/semantic_memory.py +444 -0
  60. package/src/memory/simple_memory.py +466 -0
  61. package/src/memory/working_memory.py +447 -0
  62. package/src/orchestration/__init__.py +52 -0
  63. package/src/orchestration/execution_engine.py +353 -0
  64. package/src/orchestration/halo_orchestrator.py +367 -0
  65. package/src/orchestration/mcts_workflow.py +498 -0
  66. package/src/orchestration/role_assigner.py +473 -0
  67. package/src/orchestration/task_planner.py +522 -0
  68. package/src/providers/__init__.py +67 -0
  69. package/src/providers/anthropic.py +304 -0
  70. package/src/providers/base.py +241 -0
  71. package/src/providers/cerebras.py +373 -0
  72. package/src/providers/registry.py +476 -0
  73. package/src/routing/__init__.py +30 -0
  74. package/src/routing/universal_router.py +621 -0
  75. package/src/skills/TMLPD-QUICKREF.md +210 -0
  76. package/src/skills/TMLPD-SETUP-SUMMARY.md +157 -0
  77. package/src/skills/TMLPD.md +540 -0
  78. package/src/skills/__tests__/skill_manager.test.ts +328 -0
  79. package/src/skills/skill_manager.py +385 -0
  80. package/src/skills/test-tmlpd.sh +108 -0
  81. package/src/skills/tmlpd-category.yaml +67 -0
  82. package/src/skills/tmlpd-monitoring.yaml +188 -0
  83. package/src/skills/tmlpd-phase.yaml +132 -0
  84. package/src/state/__init__.py +17 -0
  85. package/src/state/simple_checkpoint.py +508 -0
  86. package/src/tmlpd_agent.py +464 -0
  87. package/src/tmpld_v2.py +427 -0
  88. package/src/workflows/__init__.py +18 -0
  89. package/src/workflows/advanced_difficulty_classifier.py +377 -0
  90. package/src/workflows/chaining_executor.py +417 -0
  91. package/src/workflows/difficulty_integration.py +209 -0
  92. package/src/workflows/orchestrator.py +469 -0
  93. package/src/workflows/orchestrator_executor.py +456 -0
  94. package/src/workflows/parallelization_executor.py +382 -0
  95. package/src/workflows/router.py +311 -0
  96. package/test_integration_simple.py +86 -0
  97. package/test_mcts_workflow.py +150 -0
  98. package/test_templd_integration.py +262 -0
  99. package/test_universal_router.py +275 -0
  100. package/tmlpd-pi-extension/README.md +36 -0
  101. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +114 -0
  102. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +1 -0
  103. package/tmlpd-pi-extension/dist/cache/prefixCache.js +285 -0
  104. package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +1 -0
  105. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +58 -0
  106. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +1 -0
  107. package/tmlpd-pi-extension/dist/cache/responseCache.js +153 -0
  108. package/tmlpd-pi-extension/dist/cache/responseCache.js.map +1 -0
  109. package/tmlpd-pi-extension/dist/cli.js +59 -0
  110. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +95 -0
  111. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +1 -0
  112. package/tmlpd-pi-extension/dist/cost/costTracker.js +240 -0
  113. package/tmlpd-pi-extension/dist/cost/costTracker.js.map +1 -0
  114. package/tmlpd-pi-extension/dist/index.d.ts +723 -0
  115. package/tmlpd-pi-extension/dist/index.d.ts.map +1 -0
  116. package/tmlpd-pi-extension/dist/index.js +239 -0
  117. package/tmlpd-pi-extension/dist/index.js.map +1 -0
  118. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +82 -0
  119. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +1 -0
  120. package/tmlpd-pi-extension/dist/memory/episodicMemory.js +145 -0
  121. package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +1 -0
  122. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +102 -0
  123. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +1 -0
  124. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +207 -0
  125. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +1 -0
  126. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +85 -0
  127. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +1 -0
  128. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +210 -0
  129. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +1 -0
  130. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +102 -0
  131. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +1 -0
  132. package/tmlpd-pi-extension/dist/providers/localProvider.js +338 -0
  133. package/tmlpd-pi-extension/dist/providers/localProvider.js.map +1 -0
  134. package/tmlpd-pi-extension/dist/providers/registry.d.ts +55 -0
  135. package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +1 -0
  136. package/tmlpd-pi-extension/dist/providers/registry.js +138 -0
  137. package/tmlpd-pi-extension/dist/providers/registry.js.map +1 -0
  138. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +68 -0
  139. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +1 -0
  140. package/tmlpd-pi-extension/dist/routing/advancedRouter.js +332 -0
  141. package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +1 -0
  142. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +101 -0
  143. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +1 -0
  144. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +368 -0
  145. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +1 -0
  146. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +96 -0
  147. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +1 -0
  148. package/tmlpd-pi-extension/dist/utils/batchProcessor.js +170 -0
  149. package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +1 -0
  150. package/tmlpd-pi-extension/dist/utils/compression.d.ts +61 -0
  151. package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +1 -0
  152. package/tmlpd-pi-extension/dist/utils/compression.js +281 -0
  153. package/tmlpd-pi-extension/dist/utils/compression.js.map +1 -0
  154. package/tmlpd-pi-extension/dist/utils/reliability.d.ts +74 -0
  155. package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +1 -0
  156. package/tmlpd-pi-extension/dist/utils/reliability.js +177 -0
  157. package/tmlpd-pi-extension/dist/utils/reliability.js.map +1 -0
  158. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +117 -0
  159. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +1 -0
  160. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +246 -0
  161. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +1 -0
  162. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +50 -0
  163. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +1 -0
  164. package/tmlpd-pi-extension/dist/utils/tokenUtils.js +124 -0
  165. package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +1 -0
  166. package/tmlpd-pi-extension/examples/QUICKSTART.md +183 -0
  167. package/tmlpd-pi-extension/package-lock.json +75 -0
  168. package/tmlpd-pi-extension/package.json +172 -0
  169. package/tmlpd-pi-extension/python/examples.py +53 -0
  170. package/tmlpd-pi-extension/python/integrations.py +330 -0
  171. package/tmlpd-pi-extension/python/setup.py +28 -0
  172. package/tmlpd-pi-extension/python/tmlpd.py +369 -0
  173. package/tmlpd-pi-extension/qna/REDDIT_GAP_ANALYSIS.md +299 -0
  174. package/tmlpd-pi-extension/qna/TMLPD_QNA.md +751 -0
  175. package/tmlpd-pi-extension/skill/SKILL.md +238 -0
  176. package/{src → tmlpd-pi-extension/src}/index.ts +1 -1
  177. package/tmlpd-pi-extension/tsconfig.json +18 -0
  178. package/demo/research-demo.js +0 -266
  179. package/notebooks/quickstart.ipynb +0 -157
  180. package/rust/tmlpd.h +0 -268
  181. package/src/cache/prefixCache.ts +0 -365
  182. package/src/routing/advancedRouter.ts +0 -406
  183. package/src/utils/speculativeDecoding.ts +0 -344
  184. /package/{src → tmlpd-pi-extension/src}/cache/responseCache.ts +0 -0
  185. /package/{src → tmlpd-pi-extension/src}/cost/costTracker.ts +0 -0
  186. /package/{src → tmlpd-pi-extension/src}/memory/episodicMemory.ts +0 -0
  187. /package/{src → tmlpd-pi-extension/src}/orchestration/haloOrchestrator.ts +0 -0
  188. /package/{src → tmlpd-pi-extension/src}/orchestration/mctsWorkflow.ts +0 -0
  189. /package/{src → tmlpd-pi-extension/src}/providers/localProvider.ts +0 -0
  190. /package/{src → tmlpd-pi-extension/src}/providers/registry.ts +0 -0
  191. /package/{src → tmlpd-pi-extension/src}/tools/tmlpdTools.ts +0 -0
  192. /package/{src → tmlpd-pi-extension/src}/utils/batchProcessor.ts +0 -0
  193. /package/{src → tmlpd-pi-extension/src}/utils/compression.ts +0 -0
  194. /package/{src → tmlpd-pi-extension/src}/utils/reliability.ts +0 -0
  195. /package/{src → tmlpd-pi-extension/src}/utils/tokenUtils.ts +0 -0
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ /**
3
+ * TMLPD Prefix Cache - RadixAttention Style
4
+ *
5
+ * Inspired by SGLang's RadixAttention (arXiv:2312.07104)
6
+ * Caches KV states for common prefixes (system prompts, etc.)
7
+ * 5-10x speedup for repeated prompt patterns
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.PrefixCache = void 0;
11
+ exports.createWarmedCache = createWarmedCache;
12
+ class PrefixCache {
13
+ entries = new Map();
14
+ access_order = []; // LRU tracking
15
+ max_entries;
16
+ max_memory_mb;
17
+ constructor(options) {
18
+ this.max_entries = options?.max_entries || 10000;
19
+ this.max_memory_mb = options?.max_memory_mb || 512;
20
+ }
21
+ /**
22
+ * Generate cache key from text prefix
23
+ */
24
+ generateKey(text, model) {
25
+ // Simple hash for now - in production use SHA-256
26
+ const normalized = text.toLowerCase().trim().substring(0, 500);
27
+ const str = `${model || "default"}:${normalized}`;
28
+ let hash = 0;
29
+ for (let i = 0; i < str.length; i++) {
30
+ const char = str.charCodeAt(i);
31
+ hash = ((hash << 5) - hash) + char;
32
+ hash = hash & hash; // Convert to 32bit integer
33
+ }
34
+ return `pc_${Math.abs(hash).toString(16)}`;
35
+ }
36
+ /**
37
+ * Check if prefix is cached
38
+ */
39
+ has(prefix, model) {
40
+ const key = this.generateKey(prefix, model);
41
+ return this.entries.has(key);
42
+ }
43
+ /**
44
+ * Get cached entry
45
+ */
46
+ get(prefix, model) {
47
+ const key = this.generateKey(prefix, model);
48
+ const entry = this.entries.get(key);
49
+ if (entry) {
50
+ // Update LRU
51
+ this.updateLRU(key);
52
+ entry.hit_count++;
53
+ entry.last_used = Date.now();
54
+ }
55
+ return entry;
56
+ }
57
+ /**
58
+ * Store a new prefix with its KV state
59
+ */
60
+ store(prefix, options) {
61
+ const key = this.generateKey(prefix, options?.model);
62
+ // Check if already exists
63
+ if (this.entries.has(key)) {
64
+ const existing = this.entries.get(key);
65
+ existing.hit_count++;
66
+ existing.last_used = Date.now();
67
+ return key;
68
+ }
69
+ // Estimate memory
70
+ const token_count = Math.ceil(prefix.split(/\s+/).length * 1.3);
71
+ const memory_bytes = token_count * 16 * 128 * 2; // Rough KV estimate
72
+ const memory_mb = memory_bytes / (1024 * 1024);
73
+ const entry = {
74
+ key,
75
+ prefix: prefix.substring(0, 1000), // Store truncated
76
+ kv_state: options?.kv_state,
77
+ response_hash: options?.response_hash,
78
+ hit_count: 1,
79
+ last_used: Date.now(),
80
+ token_count,
81
+ children: options?.children || new Map()
82
+ };
83
+ // Evict if necessary
84
+ while (this.entries.size >= this.max_entries || this.getMemoryUsage() + memory_mb > this.max_memory_mb) {
85
+ this.evictLRU();
86
+ }
87
+ this.entries.set(key, entry);
88
+ this.access_order.push(key);
89
+ return key;
90
+ }
91
+ /**
92
+ * Extend cached prefix with completion
93
+ */
94
+ extend(prefix, completion, options) {
95
+ const prefix_key = this.generateKey(prefix, options?.model);
96
+ const parent = this.entries.get(prefix_key);
97
+ if (!parent) {
98
+ // No parent - just store completion as new entry
99
+ return this.store(completion, { model: options?.model });
100
+ }
101
+ // Create child entry for the extended sequence
102
+ const extended = prefix + completion;
103
+ const child_key = this.store(extended, { model: options?.model });
104
+ // Link child to parent
105
+ const completion_key = this.generateKey(completion);
106
+ parent.children.set(completion_key, child_key);
107
+ return child_key;
108
+ }
109
+ /**
110
+ * Find common prefix between two texts
111
+ */
112
+ findCommonPrefix(text1, text2) {
113
+ const words1 = text1.split(/\s+/);
114
+ const words2 = text2.split(/\s+/);
115
+ let common_length = 0;
116
+ for (let i = 0; i < Math.min(words1.length, words2.length); i++) {
117
+ if (words1[i].toLowerCase() === words2[i].toLowerCase()) {
118
+ common_length = i + 1;
119
+ }
120
+ else {
121
+ break;
122
+ }
123
+ }
124
+ return words1.slice(0, common_length).join(" ");
125
+ }
126
+ /**
127
+ * Lookup with prefix matching
128
+ * Returns cached entry if any prefix is found
129
+ */
130
+ lookup(text, model) {
131
+ // Try exact match first
132
+ const exact_key = this.generateKey(text, model);
133
+ if (this.entries.has(exact_key)) {
134
+ return { cached: true };
135
+ }
136
+ // Try progressively shorter prefixes
137
+ const words = text.split(/\s+/);
138
+ for (let len = words.length - 1; len >= 5; len--) { // Min 5 words
139
+ const prefix = words.slice(0, len).join(" ");
140
+ const key = this.generateKey(prefix, model);
141
+ if (this.entries.has(key)) {
142
+ const remaining = words.slice(len).join(" ");
143
+ return { cached: true, prefix, remaining };
144
+ }
145
+ }
146
+ return { cached: false };
147
+ }
148
+ /**
149
+ * Batch lookup for multiple texts
150
+ */
151
+ lookupBatch(texts, model) {
152
+ return texts.map(t => this.lookup(t, model));
153
+ }
154
+ /**
155
+ * Get cache statistics
156
+ */
157
+ getStats() {
158
+ const now = Date.now();
159
+ let oldest_age = 0;
160
+ let total_hits = 0;
161
+ for (const entry of this.entries.values()) {
162
+ total_hits += entry.hit_count;
163
+ const age = now - entry.last_used;
164
+ if (age > oldest_age)
165
+ oldest_age = age;
166
+ }
167
+ const total_requests = total_hits + this.entries.size; // Approximate
168
+ const hit_rate = total_requests > 0 ? total_hits / total_requests : 0;
169
+ return {
170
+ total_entries: this.entries.size,
171
+ total_hits: total_hits,
172
+ total_misses: this.entries.size, // Approximate
173
+ hit_rate,
174
+ memory_estimate_mb: this.getMemoryUsage(),
175
+ oldest_entry_age_ms: oldest_age
176
+ };
177
+ }
178
+ /**
179
+ * Get estimated memory usage
180
+ */
181
+ getMemoryUsage() {
182
+ let total_bytes = 0;
183
+ for (const entry of this.entries.values()) {
184
+ // Base entry overhead
185
+ total_bytes += 200;
186
+ // Prefix text
187
+ total_bytes += entry.prefix.length * 2;
188
+ // KV state (if stored)
189
+ if (entry.kv_state) {
190
+ total_bytes += entry.kv_state.length;
191
+ }
192
+ // Children map
193
+ total_bytes += entry.children.size * 50;
194
+ }
195
+ return total_bytes / (1024 * 1024);
196
+ }
197
+ /**
198
+ * Update LRU order
199
+ */
200
+ updateLRU(key) {
201
+ const index = this.access_order.indexOf(key);
202
+ if (index > -1) {
203
+ this.access_order.splice(index, 1);
204
+ }
205
+ this.access_order.push(key);
206
+ }
207
+ /**
208
+ * Evict least recently used entry
209
+ */
210
+ evictLRU() {
211
+ if (this.access_order.length === 0)
212
+ return false;
213
+ const lru_key = this.access_order.shift();
214
+ const entry = this.entries.get(lru_key);
215
+ if (entry) {
216
+ // If has children, re-parent them
217
+ for (const [child_key, child_cache_key] of entry.children) {
218
+ const child = this.entries.get(child_cache_key);
219
+ if (child) {
220
+ // Promote child to standalone
221
+ this.access_order.push(child_cache_key);
222
+ }
223
+ }
224
+ this.entries.delete(lru_key);
225
+ return true;
226
+ }
227
+ return false;
228
+ }
229
+ /**
230
+ * Clear all cache
231
+ */
232
+ clear() {
233
+ this.entries.clear();
234
+ this.access_order = [];
235
+ }
236
+ /**
237
+ * Invalidate entries matching pattern
238
+ */
239
+ invalidate(pattern) {
240
+ let count = 0;
241
+ if (!pattern) {
242
+ // Clear all
243
+ count = this.entries.size;
244
+ this.clear();
245
+ return count;
246
+ }
247
+ // Pattern-based invalidation
248
+ for (const [key, entry] of this.entries) {
249
+ if (entry.prefix.includes(pattern)) {
250
+ this.entries.delete(key);
251
+ count++;
252
+ }
253
+ }
254
+ return count;
255
+ }
256
+ /**
257
+ * Warm up cache with common system prompts
258
+ */
259
+ warmup(common_prefixes, model) {
260
+ for (const prefix of common_prefixes) {
261
+ this.store(prefix, { model });
262
+ }
263
+ console.log(`[PrefixCache] Warmed up with ${common_prefixes.length} common prefixes`);
264
+ }
265
+ }
266
+ exports.PrefixCache = PrefixCache;
267
+ // Common system prompts that benefit from prefix caching
268
+ const COMMON_SYSTEM_PROMPTS = [
269
+ "You are a helpful assistant.",
270
+ "You are a coding assistant. Help with programming tasks.",
271
+ "You are an expert data scientist.",
272
+ "You are a senior software engineer.",
273
+ "Analyze the following code and provide feedback.",
274
+ "Explain this concept in simple terms.",
275
+ "Write clean, well-documented code.",
276
+ "Think step by step and explain your reasoning."
277
+ ];
278
+ exports.default = PrefixCache;
279
+ // Utility function for creating pre-warmed cache
280
+ function createWarmedCache() {
281
+ const cache = new PrefixCache({ max_entries: 5000 });
282
+ cache.warmup(COMMON_SYSTEM_PROMPTS);
283
+ return cache;
284
+ }
285
+ //# sourceMappingURL=prefixCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefixCache.js","sourceRoot":"","sources":["../../src/cache/prefixCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * TMLPD Response Cache
3
+ *
4
+ * Caches LLM responses to avoid redundant API calls.
5
+ * Uses content hash for cache key and supports TTL.
6
+ */
7
+ export interface CacheEntry {
8
+ content: string;
9
+ model: string;
10
+ provider: string;
11
+ tokens: number;
12
+ cost: number;
13
+ cached_at: number;
14
+ expires_at: number;
15
+ }
16
+ export interface CacheConfig {
17
+ enabled: boolean;
18
+ ttl_seconds: number;
19
+ max_entries: number;
20
+ cache_dir?: string;
21
+ }
22
+ export declare class ResponseCache {
23
+ private cache;
24
+ private config;
25
+ private hits;
26
+ private misses;
27
+ constructor(config?: Partial<CacheConfig>);
28
+ /**
29
+ * Generate cache key from prompt + model
30
+ */
31
+ generateKey(prompt: string, model: string): string;
32
+ /**
33
+ * Get cached response if available and not expired
34
+ */
35
+ get(prompt: string, model: string): CacheEntry | null;
36
+ /**
37
+ * Store response in cache
38
+ */
39
+ set(prompt: string, model: string, response: Partial<CacheEntry>): void;
40
+ /**
41
+ * Invalidate cache for specific model or all
42
+ */
43
+ invalidate(model?: string): void;
44
+ /**
45
+ * Get cache statistics
46
+ */
47
+ getStats(): {
48
+ hits: number;
49
+ misses: number;
50
+ size: number;
51
+ hit_rate: number;
52
+ };
53
+ /**
54
+ * Evict oldest entry by cached_at timestamp
55
+ */
56
+ private evictOldest;
57
+ }
58
+ //# sourceMappingURL=responseCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseCache.d.ts","sourceRoot":"","sources":["../../src/cache/responseCache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM;IAS7C;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAMlD;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsBrD;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI;IAsBvE;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAYhC;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAU5E;;OAEG;IACH,OAAO,CAAC,WAAW;CAepB"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ /**
3
+ * TMLPD Response Cache
4
+ *
5
+ * Caches LLM responses to avoid redundant API calls.
6
+ * Uses content hash for cache key and supports TTL.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.ResponseCache = void 0;
43
+ const crypto = __importStar(require("crypto"));
44
+ class ResponseCache {
45
+ cache = new Map();
46
+ config;
47
+ hits = 0;
48
+ misses = 0;
49
+ constructor(config = {}) {
50
+ this.config = {
51
+ enabled: config.enabled ?? true,
52
+ ttl_seconds: config.ttl_seconds ?? 3600, // 1 hour default
53
+ max_entries: config.max_entries ?? 1000,
54
+ cache_dir: config.cache_dir,
55
+ };
56
+ }
57
+ /**
58
+ * Generate cache key from prompt + model
59
+ */
60
+ generateKey(prompt, model) {
61
+ const hash = crypto.createHash("sha256");
62
+ hash.update(prompt + "|" + model);
63
+ return hash.digest("hex").substring(0, 32);
64
+ }
65
+ /**
66
+ * Get cached response if available and not expired
67
+ */
68
+ get(prompt, model) {
69
+ if (!this.config.enabled)
70
+ return null;
71
+ const key = this.generateKey(prompt, model);
72
+ const entry = this.cache.get(key);
73
+ if (!entry) {
74
+ this.misses++;
75
+ return null;
76
+ }
77
+ // Check expiration
78
+ if (Date.now() > entry.expires_at) {
79
+ this.cache.delete(key);
80
+ this.misses++;
81
+ return null;
82
+ }
83
+ this.hits++;
84
+ return entry;
85
+ }
86
+ /**
87
+ * Store response in cache
88
+ */
89
+ set(prompt, model, response) {
90
+ if (!this.config.enabled)
91
+ return;
92
+ const key = this.generateKey(prompt, model);
93
+ const now = Date.now();
94
+ // Evict oldest if at capacity
95
+ if (this.cache.size >= this.config.max_entries) {
96
+ this.evictOldest();
97
+ }
98
+ this.cache.set(key, {
99
+ content: response.content ?? "",
100
+ model: response.model ?? model,
101
+ provider: response.provider ?? "unknown",
102
+ tokens: response.tokens ?? 0,
103
+ cost: response.cost ?? 0,
104
+ cached_at: now,
105
+ expires_at: now + this.config.ttl_seconds * 1000,
106
+ });
107
+ }
108
+ /**
109
+ * Invalidate cache for specific model or all
110
+ */
111
+ invalidate(model) {
112
+ if (model) {
113
+ for (const [key, entry] of this.cache.entries()) {
114
+ if (entry.model.includes(model)) {
115
+ this.cache.delete(key);
116
+ }
117
+ }
118
+ }
119
+ else {
120
+ this.cache.clear();
121
+ }
122
+ }
123
+ /**
124
+ * Get cache statistics
125
+ */
126
+ getStats() {
127
+ const total = this.hits + this.misses;
128
+ return {
129
+ hits: this.hits,
130
+ misses: this.misses,
131
+ size: this.cache.size,
132
+ hit_rate: total > 0 ? this.hits / total : 0,
133
+ };
134
+ }
135
+ /**
136
+ * Evict oldest entry by cached_at timestamp
137
+ */
138
+ evictOldest() {
139
+ let oldestKey = null;
140
+ let oldestTime = Infinity;
141
+ for (const [key, entry] of this.cache.entries()) {
142
+ if (entry.cached_at < oldestTime) {
143
+ oldestTime = entry.cached_at;
144
+ oldestKey = key;
145
+ }
146
+ }
147
+ if (oldestKey) {
148
+ this.cache.delete(oldestKey);
149
+ }
150
+ }
151
+ }
152
+ exports.ResponseCache = ResponseCache;
153
+ //# sourceMappingURL=responseCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseCache.js","sourceRoot":"","sources":["../../src/cache/responseCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TMLPD PI CLI
4
+ */
5
+
6
+ const { createTMLPD } = require("./dist/index.js");
7
+
8
+ const args = process.argv.slice(2);
9
+ const command = args[0];
10
+
11
+ async function main() {
12
+ switch (command) {
13
+ case "execute": {
14
+ const tmlpd = createTMLPD();
15
+ const prompt = args.slice(1).join(" ");
16
+ const result = await tmlpd.execute(prompt);
17
+ console.log(JSON.stringify(result, null, 2));
18
+ break;
19
+ }
20
+ case "parallel": {
21
+ const tmlpd = createTMLPD();
22
+ const models = args.slice(1).join(" ").split(",").map(m => m.trim());
23
+ const prompt = "Compare these models";
24
+ const result = await tmlpd.executeParallel(prompt, models);
25
+ console.log(JSON.stringify(result, null, 2));
26
+ break;
27
+ }
28
+ case "cost": {
29
+ const tmlpd = createTMLPD();
30
+ const summary = tmlpd.getCostSummary();
31
+ console.log(JSON.stringify(summary, null, 2));
32
+ break;
33
+ }
34
+ case "status": {
35
+ const tmlpd = createTMLPD();
36
+ const status = tmlpd.getProviderStatus();
37
+ console.log(JSON.stringify(status, null, 2));
38
+ break;
39
+ }
40
+ case "cache": {
41
+ const tmlpd = createTMLPD();
42
+ const stats = tmlpd.getCacheStats();
43
+ console.log(JSON.stringify(stats, null, 2));
44
+ break;
45
+ }
46
+ default:
47
+ console.log(`TMLPD PI v1.0.0
48
+
49
+ Usage:
50
+ tmlpd-pi execute <prompt> Execute single prompt
51
+ tmlpd-pi parallel <models> Execute in parallel
52
+ tmlpd-pi cost Show cost summary
53
+ tmlpd-pi status Show provider status
54
+ tmlpd-pi cache Show cache stats
55
+ `);
56
+ }
57
+ }
58
+
59
+ main().catch(console.error);
@@ -0,0 +1,95 @@
1
+ /**
2
+ * TMLPD Cost Tracker
3
+ *
4
+ * Tracks real-time spending across all providers.
5
+ * Supports per-model budgets, spending alerts, and cost analysis.
6
+ */
7
+ export interface BudgetConfig {
8
+ daily_limit?: number;
9
+ monthly_limit?: number;
10
+ per_model_limits?: Record<string, number>;
11
+ }
12
+ export interface CostAlert {
13
+ type: "daily" | "monthly" | "model" | "budget";
14
+ threshold: number;
15
+ current: number;
16
+ provider?: string;
17
+ model?: string;
18
+ }
19
+ export interface CostSnapshot {
20
+ provider: string;
21
+ model: string;
22
+ input_tokens: number;
23
+ output_tokens: number;
24
+ input_cost: number;
25
+ output_cost: number;
26
+ total_cost: number;
27
+ timestamp: number;
28
+ }
29
+ export interface CostSummary {
30
+ total_cost: number;
31
+ by_provider: Record<string, number>;
32
+ by_model: Record<string, number>;
33
+ daily_costs: Record<string, number>;
34
+ monthly_costs: Record<string, number>;
35
+ request_count: number;
36
+ token_count: {
37
+ input: number;
38
+ output: number;
39
+ };
40
+ average_cost_per_request: number;
41
+ }
42
+ export declare class CostTracker {
43
+ private history;
44
+ private budgets;
45
+ private alerts;
46
+ private alerts_callback;
47
+ private daily_reset;
48
+ private monthly_reset;
49
+ constructor(budgets?: BudgetConfig);
50
+ /**
51
+ * Calculate cost for a model based on tokens
52
+ */
53
+ calculateCost(model: string, input_tokens: number, output_tokens: number): {
54
+ input: number;
55
+ output: number;
56
+ total: number;
57
+ };
58
+ /**
59
+ * Record a request's cost
60
+ */
61
+ record(provider: string, model: string, input_tokens: number, output_tokens: number): CostSnapshot;
62
+ /**
63
+ * Check budgets and trigger alerts
64
+ */
65
+ private checkBudgets;
66
+ /**
67
+ * Emit an alert via callback
68
+ */
69
+ private emitAlert;
70
+ /**
71
+ * Register alert callback
72
+ */
73
+ onAlert(callback: (alert: CostAlert) => void): void;
74
+ /**
75
+ * Get comprehensive cost summary
76
+ */
77
+ getSummary(): CostSummary;
78
+ /**
79
+ * Get remaining budget
80
+ */
81
+ getRemainingBudget(): {
82
+ daily: number | null;
83
+ monthly: number | null;
84
+ per_model: Record<string, number>;
85
+ };
86
+ /**
87
+ * Reset cost history
88
+ */
89
+ reset(): void;
90
+ /**
91
+ * Export cost data for analysis
92
+ */
93
+ export(): CostSnapshot[];
94
+ }
95
+ //# sourceMappingURL=costTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"costTracker.d.ts","sourceRoot":"","sources":["../../src/cost/costTracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoCH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,GAAE,YAAiB;IAOtC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAc3H;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,YAAY;IAkBlG;;OAEG;IACH,OAAO,CAAC,YAAY;IA8CpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAiBjB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAInD;;OAEG;IACH,UAAU,IAAI,WAAW;IAoDzB;;OAEG;IACH,kBAAkB,IAAI;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAuBzG;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,MAAM,IAAI,YAAY,EAAE;CAGzB"}