adaptive-memory-multi-model-router 1.9.4 → 2.0.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.
Files changed (130) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.md +50 -0
  2. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +37 -0
  4. package/.github/PULL_REQUEST_TEMPLATE.md +44 -0
  5. package/.github/workflows/npm-stats-validation.yml +152 -0
  6. package/.github/workflows/pages.yml +37 -0
  7. package/CHANGELOG.md +122 -0
  8. package/CODE_OF_CONDUCT.md +128 -0
  9. package/CONTRIBUTING.md +110 -0
  10. package/LAUNCH-PAIN-DRIVEN.md +339 -0
  11. package/LAUNCH.md +575 -0
  12. package/POPULARITY_BOOSTERS.md +285 -0
  13. package/README.md +231 -300
  14. package/SECURITY.md +69 -0
  15. package/articles/CONTENT_STRUCTURE.md +292 -0
  16. package/articles/DEVTO_COST_GUIDE.md +473 -0
  17. package/articles/DEVTO_FINAL.md +416 -0
  18. package/articles/DEVTO_MULTI_PROVIDER.md +542 -0
  19. package/articles/HN_10X_BETTER.md +430 -0
  20. package/articles/HN_CHINESE_STYLE.md +308 -0
  21. package/articles/HN_FINAL.md +199 -0
  22. package/articles/HN_POSTED_VERSION.md +56 -0
  23. package/articles/HN_RESEARCH.md +364 -0
  24. package/articles/PAIN-DRIVEN-devto-v2.md +308 -0
  25. package/articles/PAIN-DRIVEN-devto-v3.md +268 -0
  26. package/articles/PAIN-DRIVEN-devto.md +242 -0
  27. package/articles/PAIN-DRIVEN-hackernews-v2.md +138 -0
  28. package/articles/PAIN-DRIVEN-hackernews-v3.md +151 -0
  29. package/articles/PAIN-DRIVEN-hackernews.md +131 -0
  30. package/articles/PAIN-DRIVEN-reddit-v2.md +301 -0
  31. package/articles/PAIN-DRIVEN-reddit-v3.md +236 -0
  32. package/articles/PAIN-DRIVEN-reddit.md +218 -0
  33. package/articles/PAIN-DRIVEN-twitter-v2.md +110 -0
  34. package/articles/PAIN-DRIVEN-twitter-v3.md +121 -0
  35. package/articles/PAIN-DRIVEN-twitter.md +120 -0
  36. package/articles/PORTKEY_VS_A3M.md +147 -0
  37. package/articles/REDDIT_FINAL.md +232 -0
  38. package/articles/TWITTER_FINAL.md +167 -0
  39. package/articles/WHY_10X_BETTER.md +261 -0
  40. package/articles/WHY_CHINESE_STYLE_BETTER.md +323 -0
  41. package/articles/ai-discoverability-llm-routing.md +210 -0
  42. package/articles/devto-llm-routing.md +109 -0
  43. package/articles/hackernews-show-hn.md +65 -0
  44. package/articles/hashnode-llm-cost-optimization.md +125 -0
  45. package/articles/medium-building-llm-router.md +205 -0
  46. package/articles/reddit-ml.md +86 -0
  47. package/articles/twitter-thread-cost-savings.md +98 -0
  48. package/articles/youtube-tutorial-script.md +262 -0
  49. package/assets/banner.svg +109 -0
  50. package/assets/logo.svg +68 -0
  51. package/assets/social-preview.svg +64 -0
  52. package/demo/demo-script.md +53 -0
  53. package/dist/analytics/costAnalytics.d.ts +77 -0
  54. package/dist/analytics/costAnalytics.d.ts.map +1 -0
  55. package/dist/analytics/costAnalytics.js +219 -0
  56. package/dist/analytics/costAnalytics.js.map +1 -0
  57. package/dist/cache/semanticCache.d.ts +62 -0
  58. package/dist/cache/semanticCache.d.ts.map +1 -0
  59. package/dist/cache/semanticCache.js +176 -0
  60. package/dist/cache/semanticCache.js.map +1 -0
  61. package/dist/cli.js +35 -0
  62. package/dist/geo/generativeEngineOptimization.js +321 -0
  63. package/dist/geo/geoRouter.js +387 -0
  64. package/dist/index.d.ts +4 -723
  65. package/dist/index.js +11 -344
  66. package/dist/index.js.map +1 -1
  67. package/dist/integrations/langchainAdapter.d.ts +146 -0
  68. package/dist/integrations/langchainAdapter.d.ts.map +1 -0
  69. package/dist/integrations/langchainAdapter.js +731 -0
  70. package/dist/integrations/langchainAdapter.js.map +1 -0
  71. package/dist/integrations/oauth.d.ts +69 -0
  72. package/dist/integrations/oauth.d.ts.map +1 -0
  73. package/dist/integrations/oauth.js +225 -21
  74. package/dist/integrations/oauth.js.map +1 -0
  75. package/dist/memory/autoFetch.d.ts +39 -0
  76. package/dist/memory/autoFetch.d.ts.map +1 -0
  77. package/dist/memory/autoFetch.js +80 -88
  78. package/dist/memory/autoFetch.js.map +1 -0
  79. package/dist/memory/memoryTree.d.ts +76 -0
  80. package/dist/memory/memoryTree.d.ts.map +1 -0
  81. package/dist/memory/memoryTree.js +185 -130
  82. package/dist/memory/memoryTree.js.map +1 -0
  83. package/dist/memory/obsidianVault.d.ts +71 -0
  84. package/dist/memory/obsidianVault.d.ts.map +1 -0
  85. package/dist/memory/obsidianVault.js +207 -22
  86. package/dist/memory/obsidianVault.js.map +1 -0
  87. package/dist/providers/providerConfig.d.ts +49 -0
  88. package/dist/providers/providerConfig.d.ts.map +1 -0
  89. package/dist/providers/providerConfig.js +806 -401
  90. package/dist/providers/providerConfig.js.map +1 -0
  91. package/dist/security/guardrails.d.ts +76 -0
  92. package/dist/security/guardrails.d.ts.map +1 -0
  93. package/dist/security/guardrails.js +479 -0
  94. package/dist/security/guardrails.js.map +1 -0
  95. package/dist/security/inputValidation.js +351 -0
  96. package/dist/server/dashboard.d.ts +58 -0
  97. package/dist/server/dashboard.d.ts.map +1 -0
  98. package/dist/server/dashboard.js +553 -0
  99. package/dist/server/dashboard.js.map +1 -0
  100. package/dist/server/modelMapper.d.ts +43 -0
  101. package/dist/server/modelMapper.d.ts.map +1 -0
  102. package/dist/server/modelMapper.js +154 -0
  103. package/dist/server/modelMapper.js.map +1 -0
  104. package/dist/server/proxyServer.d.ts +41 -0
  105. package/dist/server/proxyServer.d.ts.map +1 -0
  106. package/dist/server/proxyServer.js +932 -0
  107. package/dist/server/proxyServer.js.map +1 -0
  108. package/dist/skills/__tests__/skill_manager.test.d.ts +2 -0
  109. package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -0
  110. package/dist/skills/__tests__/skill_manager.test.js +268 -0
  111. package/dist/skills/__tests__/skill_manager.test.js.map +1 -0
  112. package/docs/geo/GENERATIVE_ENGINE_OPTIMIZATION.md +232 -0
  113. package/docs-site/index.html +347 -0
  114. package/llms.txt +138 -0
  115. package/package.json +72 -7
  116. package/playground/README.md +51 -0
  117. package/playground/codesandbox.json +12 -0
  118. package/playground/index.js +39 -0
  119. package/scripts/update-npm-badges.js +158 -0
  120. package/src/analytics/costAnalytics.ts +304 -0
  121. package/src/cache/semanticCache.ts +221 -0
  122. package/src/index.ts +6 -0
  123. package/src/integrations/langchainAdapter.ts +955 -0
  124. package/src/providers/providerConfig.ts +923 -0
  125. package/src/security/guardrails.ts +585 -0
  126. package/src/server/dashboard.ts +610 -0
  127. package/src/server/modelMapper.ts +182 -0
  128. package/src/server/proxyServer.ts +1105 -0
  129. package/src/types/langchain.d.ts +83 -0
  130. package/tsconfig.build.json +20 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticCache.js","sourceRoot":"","sources":["../../src/cache/semanticCache.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -3,6 +3,7 @@
3
3
  * A3M Router CLI - Adaptive Memory Multi-Model Router
4
4
  *
5
5
  * Commands:
6
+ * npx a3m-router serve [--port 8787] Start OpenAI-compatible proxy server
6
7
  * npx a3m-router route <query> Route query to best provider
7
8
  * npx a3m-router batch <q1> <q2>.. Route multiple queries
8
9
  * npx a3m-router providers List all configured providers
@@ -24,6 +25,13 @@ const {
24
25
  getAvailableProviders, providerConfig, registerProvider, loadProviders,
25
26
  } = require('./index.js');
26
27
 
28
+ let createProxyServer;
29
+ try {
30
+ createProxyServer = require('./server/proxyServer.js').createProxyServer;
31
+ } catch (e) {
32
+ // Server module not yet compiled
33
+ }
34
+
27
35
  const args = process.argv.slice(2);
28
36
  const command = args[0];
29
37
 
@@ -394,11 +402,36 @@ async function main() {
394
402
  break;
395
403
  }
396
404
 
405
+ case 'serve': {
406
+ if (!createProxyServer) {
407
+ console.error('\n Error: Server module not available.');
408
+ console.error(' Build first: npm run build');
409
+ console.error(' Or use directly: node -e "require(\'./server/proxyServer.js\').createProxyServer()"\n');
410
+ process.exit(1);
411
+ }
412
+
413
+ // Parse --port argument
414
+ var portArg = args.indexOf('--port');
415
+ var port = undefined;
416
+ if (portArg !== -1 && args[portArg + 1]) {
417
+ port = parseInt(args[portArg + 1], 10);
418
+ if (isNaN(port)) {
419
+ console.error(' Error: --port must be a number');
420
+ process.exit(1);
421
+ }
422
+ }
423
+
424
+ console.log('\n Starting A3M Router Proxy Server...');
425
+ createProxyServer(port);
426
+ break;
427
+ }
428
+
397
429
  default:
398
430
  console.log('\n🔀 A3M Router — Adaptive Memory Multi-Model Router');
399
431
  console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
400
432
  console.log('');
401
433
  console.log(' Commands:');
434
+ console.log(' serve [--port 8787] Start OpenAI-compatible proxy server');
402
435
  console.log(' route <query> Route query to best provider');
403
436
  console.log(' batch <q1> <q2>.. Route multiple queries');
404
437
  console.log(' compare <query> Compare providers side by side');
@@ -420,6 +453,8 @@ async function main() {
420
453
  console.log(' Env: GROQ_API_KEY, CEREBRAS_API_KEY, MISTRAL_API_KEY, etc.');
421
454
  console.log('');
422
455
  console.log(' Examples:');
456
+ console.log(' npx a3m-router serve # Start proxy on :8787');
457
+ console.log(' npx a3m-router serve --port 3000 # Start proxy on :3000');
423
458
  console.log(' npx a3m-router route "Write a Python function to sort"');
424
459
  console.log(' npx a3m-router compare "What is 2+2?"');
425
460
  console.log(' npx a3m-router providers');
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ /**
3
+ * A3M Router - Generative Engine Optimization (GEO)
4
+ *
5
+ * Features to make the package discoverable by AI agents and LLMs:
6
+ * - Structured metadata for AI consumption
7
+ * - Intent-to-code mapping
8
+ * - AI-friendly documentation generation
9
+ * - LLM-optimized examples
10
+ */
11
+
12
+ // Intent-to-code mapping for AI agents
13
+ const INTENT_MAP = {
14
+ // Routing intents
15
+ 'route llm query': {
16
+ code: `const { routeQuery } = require('adaptive-memory-multi-model-router');
17
+ const result = routeQuery("Your query here");
18
+ console.log(result.primary_model);`,
19
+ description: 'Route a query to the optimal LLM provider',
20
+ },
21
+ 'route to cheapest provider': {
22
+ code: `const { routeQuery } = require('adaptive-memory-multi-model-router');
23
+ const result = routeQuery("Your query", { budget_multiplier: 0.3 });`,
24
+ description: 'Route to cheapest capable provider',
25
+ },
26
+ 'route to best quality': {
27
+ code: `const { routeQuery } = require('adaptive-memory-multi-model-router');
28
+ const result = routeQuery("Your query", { quality_priority: true });`,
29
+ description: 'Route to highest quality provider',
30
+ },
31
+
32
+ // Batch processing intents
33
+ 'batch process prompts': {
34
+ code: `const { routeBatch } = require('adaptive-memory-multi-model-router');
35
+ const queries = ["Q1", "Q2", "Q3"];
36
+ const results = routeBatch(queries);`,
37
+ description: 'Process multiple prompts with automatic routing',
38
+ },
39
+ 'parallel llm calls': {
40
+ code: `const { routeBatch } = require('adaptive-memory-multi-model-router');
41
+ const results = routeBatch(queries, { concurrency: 5 });`,
42
+ description: 'Execute LLM calls in parallel',
43
+ },
44
+
45
+ // Cost tracking intents
46
+ 'track llm costs': {
47
+ code: `const { createA3MRouter } = require('adaptive-memory-multi-model-router');
48
+ const router = createA3MRouter();
49
+ const summary = router.costTracker.getSummary();
50
+ console.log(\`Total: \$\${summary.totalSpent}\`);`,
51
+ description: 'Track API costs across all providers',
52
+ },
53
+ 'estimate api cost': {
54
+ code: `const { estimateCost } = require('adaptive-memory-multi-model-router');
55
+ const cost = estimateCost(1000, 500, 'gpt-4o');
56
+ console.log(\`Cost: \$\${cost.toFixed(6)}\`);`,
57
+ description: 'Estimate cost before making API call',
58
+ },
59
+
60
+ // Provider management intents
61
+ 'list llm providers': {
62
+ code: `const { getAvailableProviders } = require('adaptive-memory-multi-model-router');
63
+ const providers = getAvailableProviders();
64
+ console.log(Object.keys(providers));`,
65
+ description: 'List all configured LLM providers',
66
+ },
67
+ 'add custom provider': {
68
+ code: `const { registerProvider } = require('adaptive-memory-multi-model-router');
69
+ registerProvider('my-provider', {
70
+ baseUrl: 'https://api.myprovider.com',
71
+ models: ['my-model'],
72
+ type: 'api'
73
+ });`,
74
+ description: 'Register a custom LLM provider',
75
+ },
76
+ 'check provider health': {
77
+ code: `const { providerConfig } = require('adaptive-memory-multi-model-router');
78
+ const health = await providerConfig.healthCheck('groq');
79
+ console.log(health.healthy ? '✅' : '❌');`,
80
+ description: 'Check if a provider is healthy',
81
+ },
82
+
83
+ // Caching intents
84
+ 'cache llm responses': {
85
+ code: `const { createA3MRouter } = require('adaptive-memory-multi-model-router');
86
+ const router = createA3MRouter({ cache: { ttl_seconds: 3600 } });`,
87
+ description: 'Enable response caching',
88
+ },
89
+
90
+ // Fallback intents
91
+ 'setup llm fallback': {
92
+ code: `const { createA3MRouter } = require('adaptive-memory-multi-model-router');
93
+ const router = createA3MRouter();
94
+ // Fallback is automatic - just use router.route()`,
95
+ description: 'Automatic fallback when providers fail',
96
+ },
97
+
98
+ // CLI intents
99
+ 'route from command line': {
100
+ code: `npx a3m-router route "Your query here"`,
101
+ description: 'Route queries via CLI',
102
+ },
103
+ 'benchmark providers': {
104
+ code: `npx a3m-router benchmark`,
105
+ description: 'Compare all configured providers',
106
+ },
107
+ };
108
+
109
+ // AI-optimized package metadata
110
+ const PACKAGE_METADATA = {
111
+ name: 'adaptive-memory-multi-model-router',
112
+ shortName: 'A3M Router',
113
+ category: 'LLM Routing & Cost Optimization',
114
+ primaryUseCases: [
115
+ 'Route LLM queries to optimal providers',
116
+ 'Reduce API costs through intelligent selection',
117
+ 'Handle provider failures with automatic fallback',
118
+ 'Process prompts in parallel batches',
119
+ 'Track spending across multiple LLM APIs',
120
+ ],
121
+ keyFeatures: [
122
+ 'Learned routing based on query analysis',
123
+ 'Cost optimization (50-80% savings)',
124
+ 'Automatic provider fallback',
125
+ 'Batch processing with rate limiting',
126
+ 'Response caching',
127
+ 'Real-time cost tracking',
128
+ 'CLI tools',
129
+ ],
130
+ supportedProviders: [
131
+ 'Groq', 'Cerebras', 'Mistral', 'OpenAI', 'Anthropic',
132
+ 'Google', 'DeepSeek', 'CommandCode', 'OpenCode',
133
+ 'Ollama', 'vLLM', 'LM Studio',
134
+ ],
135
+ alternatives: ['LiteLLM', 'OpenRouter', 'Helicone'],
136
+ differentiators: [
137
+ 'Learned routing (not just proxying)',
138
+ 'Cost-quality tradeoff optimization',
139
+ 'Generic provider system (user-configurable)',
140
+ 'Built-in fallback and retry',
141
+ 'Comprehensive CLI',
142
+ ],
143
+ };
144
+
145
+ // Keywords for AI indexing
146
+ const AI_INDEXING_KEYWORDS = [
147
+ // Primary
148
+ 'llm routing', 'cost optimization', 'multi-provider', 'adaptive routing',
149
+ // Features
150
+ 'batch processing', 'parallel execution', 'fallback', 'retry', 'load balancing',
151
+ // Providers
152
+ 'openai', 'anthropic', 'claude', 'groq', 'cerebras', 'mistral',
153
+ // Concepts
154
+ 'routellm', 'radix-attention', 'medusa', 'token compression',
155
+ // Use cases
156
+ 'api gateway', 'llm proxy', 'model router', 'cost tracking',
157
+ // Integrations
158
+ 'github', 'slack', 'telegram', 'notion', 'discord',
159
+ // Technical
160
+ 'typescript', 'javascript', 'nodejs', 'cli', 'sdk',
161
+ ];
162
+
163
+ class GenerativeEngineOptimizer {
164
+ constructor() {
165
+ this.intentMap = INTENT_MAP;
166
+ this.metadata = PACKAGE_METADATA;
167
+ this.keywords = AI_INDEXING_KEYWORDS;
168
+ }
169
+
170
+ /**
171
+ * Get code example for a specific intent
172
+ */
173
+ getCodeForIntent(intent) {
174
+ const normalized = intent.toLowerCase().trim();
175
+
176
+ // Exact match
177
+ if (this.intentMap[normalized]) {
178
+ return this.intentMap[normalized];
179
+ }
180
+
181
+ // Partial match
182
+ for (const [key, value] of Object.entries(this.intentMap)) {
183
+ if (normalized.includes(key) || key.includes(normalized)) {
184
+ return value;
185
+ }
186
+ }
187
+
188
+ // Fuzzy match - find best similarity
189
+ let bestMatch = null;
190
+ let bestScore = 0;
191
+
192
+ for (const key of Object.keys(this.intentMap)) {
193
+ const score = this.calculateSimilarity(normalized, key);
194
+ if (score > bestScore && score > 0.3) {
195
+ bestScore = score;
196
+ bestMatch = key;
197
+ }
198
+ }
199
+
200
+ return bestMatch ? this.intentMap[bestMatch] : null;
201
+ }
202
+
203
+ /**
204
+ * Simple similarity calculation
205
+ */
206
+ calculateSimilarity(a, b) {
207
+ const aWords = a.split(/\s+/);
208
+ const bWords = b.split(/\s+/);
209
+
210
+ const intersection = aWords.filter(word => bWords.includes(word));
211
+ return intersection.length / Math.max(aWords.length, bWords.length);
212
+ }
213
+
214
+ /**
215
+ * Get all intents matching a category
216
+ */
217
+ getIntentsByCategory(category) {
218
+ const categories = {
219
+ routing: ['route llm query', 'route to cheapest provider', 'route to best quality'],
220
+ batch: ['batch process prompts', 'parallel llm calls'],
221
+ cost: ['track llm costs', 'estimate api cost'],
222
+ providers: ['list llm providers', 'add custom provider', 'check provider health'],
223
+ caching: ['cache llm responses'],
224
+ fallback: ['setup llm fallback'],
225
+ cli: ['route from command line', 'benchmark providers'],
226
+ };
227
+
228
+ const keys = categories[category] || [];
229
+ return keys.map(key => this.intentMap[key]).filter(Boolean);
230
+ }
231
+
232
+ /**
233
+ * Generate AI-optimized documentation
234
+ */
235
+ generateAIDocumentation() {
236
+ return {
237
+ metadata: this.metadata,
238
+ quickStart: this.intentMap['route llm query'],
239
+ commonIntents: Object.entries(this.intentMap).slice(0, 5).map(([intent, data]) => ({
240
+ intent,
241
+ ...data,
242
+ })),
243
+ keywords: this.keywords,
244
+ };
245
+ }
246
+
247
+ /**
248
+ * Get package metadata for AI consumption
249
+ */
250
+ getPackageMetadata() {
251
+ return {
252
+ ...this.metadata,
253
+ installation: 'npm install adaptive-memory-multi-model-router',
254
+ github: 'https://github.com/Das-rebel/adaptive-memory-multi-model-router',
255
+ npm: 'https://www.npmjs.com/package/adaptive-memory-multi-model-router',
256
+ weeklyDownloads: 872,
257
+ testCount: 33,
258
+ keywordCount: 139,
259
+ };
260
+ }
261
+
262
+ /**
263
+ * Search intents by keyword
264
+ */
265
+ searchIntents(keyword) {
266
+ const results = [];
267
+ const normalized = keyword.toLowerCase();
268
+
269
+ for (const [intent, data] of Object.entries(this.intentMap)) {
270
+ if (intent.includes(normalized) || data.description.toLowerCase().includes(normalized)) {
271
+ results.push({ intent, ...data });
272
+ }
273
+ }
274
+
275
+ return results;
276
+ }
277
+
278
+ /**
279
+ * Get comparison with alternatives
280
+ */
281
+ getComparison() {
282
+ return {
283
+ package: this.metadata.name,
284
+ alternatives: this.metadata.alternatives,
285
+ differentiators: this.metadata.differentiators,
286
+ recommendation: 'Use A3M Router for learned routing with cost optimization. Use LiteLLM for simple proxying. Use OpenRouter for hosted routing.',
287
+ };
288
+ }
289
+ }
290
+
291
+ // Convenience functions
292
+ function getCodeForIntent(intent) {
293
+ const geo = new GenerativeEngineOptimizer();
294
+ return geo.getCodeForIntent(intent);
295
+ }
296
+
297
+ function searchIntents(keyword) {
298
+ const geo = new GenerativeEngineOptimizer();
299
+ return geo.searchIntents(keyword);
300
+ }
301
+
302
+ function getPackageMetadata() {
303
+ const geo = new GenerativeEngineOptimizer();
304
+ return geo.getPackageMetadata();
305
+ }
306
+
307
+ function generateAIDocumentation() {
308
+ const geo = new GenerativeEngineOptimizer();
309
+ return geo.generateAIDocumentation();
310
+ }
311
+
312
+ module.exports = {
313
+ GenerativeEngineOptimizer,
314
+ getCodeForIntent,
315
+ searchIntents,
316
+ getPackageMetadata,
317
+ generateAIDocumentation,
318
+ INTENT_MAP,
319
+ PACKAGE_METADATA,
320
+ AI_INDEXING_KEYWORDS,
321
+ };