adaptive-memory-multi-model-router 2.0.0 → 2.0.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.
@@ -0,0 +1,160 @@
1
+ ---
2
+ title: "A3M Router v2.0: Now an OpenAI-Compatible AI Gateway with 39 Providers 🚀"
3
+ published: true
4
+ description: "Drop-in OpenAI proxy, LangChain adapter, guardrails, semantic cache, cost analytics, and 39 LLM providers — all in one npm package"
5
+ tags: node, javascript, ai, webdev
6
+ canonical_url: https://github.com/Das-rebel/adaptive-memory-multi-model-router
7
+ ---
8
+
9
+ We just shipped A3M Router v2.0.0 — the biggest update since launch.
10
+
11
+ **What started as a simple routing library is now a full AI Gateway.**
12
+
13
+ ## What's New
14
+
15
+ ### 1. OpenAI-Compatible Proxy Server
16
+
17
+ ```bash
18
+ npx a3m-router serve
19
+ ```
20
+
21
+ That's it. You now have an OpenAI-compatible API proxy running on `localhost:8787`.
22
+
23
+ ```python
24
+ # Drop-in replacement — just change the base URL
25
+ from openai import OpenAI
26
+
27
+ client = OpenAI(
28
+ base_url="http://localhost:8787/v1",
29
+ api_key="not-needed" # A3M Router handles provider keys
30
+ )
31
+
32
+ response = client.chat.completions.create(
33
+ model="auto", # Intelligent routing
34
+ messages=[{"role": "user", "content": "Hello"}]
35
+ )
36
+ ```
37
+
38
+ **Any OpenAI SDK works without code changes.** Python, Node, LangChain, LlamaIndex — just point `base_url` to A3M Router.
39
+
40
+ ### 2. Real-Time Dashboard
41
+
42
+ ```
43
+ http://localhost:8787/
44
+ ```
45
+
46
+ Live dashboard showing:
47
+ - Request volume and costs
48
+ - Provider status (online/offline)
49
+ - Request log with routing decisions
50
+ - Cost breakdown by provider
51
+
52
+ ### 3. LangChain Adapter
53
+
54
+ ```javascript
55
+ import { A3MChatModel } from 'adaptive-memory-multi-model-router/langchain';
56
+
57
+ const model = new A3MChatModel({ modelName: 'auto' });
58
+ const response = await model.invoke([new HumanMessage("Hello")]);
59
+ ```
60
+
61
+ Drop-in replacement for `ChatOpenAI`. Supports streaming, tool calling, and structured output.
62
+
63
+ ### 4. Guardrails Engine
64
+
65
+ ```javascript
66
+ import { GuardrailEngine } from 'adaptive-memory-multi-model-router';
67
+
68
+ const guardrail = new GuardrailEngine({
69
+ promptInjection: true,
70
+ piiDetection: true,
71
+ contentFilter: true
72
+ });
73
+
74
+ const result = await guardrail.checkInput(userInput);
75
+ if (result.blocked) {
76
+ // Prompt injection or PII detected
77
+ console.log(result.reason);
78
+ }
79
+ ```
80
+
81
+ Built-in detection for:
82
+ - Prompt injection attempts
83
+ - PII (emails, phones, SSNs, credit cards, API keys)
84
+ - Harmful content
85
+ - Language detection for routing
86
+
87
+ ### 5. Semantic Cache
88
+
89
+ ```javascript
90
+ import { SemanticCache } from 'adaptive-memory-multi-model-router';
91
+
92
+ const cache = new SemanticCache({ similarityThreshold: 0.92 });
93
+
94
+ // First query: miss, calls provider
95
+ const result1 = await cache.get("What is Python?");
96
+
97
+ // Semantically similar: HIT (no API call!)
98
+ const result2 = await cache.get("Tell me about Python");
99
+ ```
100
+
101
+ Catches semantically similar queries using n-gram similarity. No embedding API needed.
102
+
103
+ ### 6. Cost Analytics
104
+
105
+ ```javascript
106
+ import { CostAnalytics } from 'adaptive-memory-multi-model-router';
107
+
108
+ const analytics = new CostAnalytics();
109
+ analytics.record({ provider: 'groq', cost: 0.001, latency: 420 });
110
+
111
+ const savings = analytics.getSavings('openai');
112
+ // Total saved: $X, XX% cheaper, projected monthly savings: $Y
113
+ ```
114
+
115
+ ### 7. 39 Providers (was 12)
116
+
117
+ New providers added:
118
+ - **Local**: Ollama, LM Studio, vLLM
119
+ - **Cheap/Fast**: DeepInfra, Together AI, Fireworks, Anyscale, Novita, SambaNova
120
+ - **Mid-tier**: Cohere, Perplexity, AI21
121
+ - **Asian**: DeepSeek, Moonshot, Qwen, Zhipu, Yi
122
+ - **Enterprise**: Azure OpenAI, AWS Bedrock, Google Vertex
123
+
124
+ ## Quick Start
125
+
126
+ ```bash
127
+ # Install
128
+ npm install adaptive-memory-multi-model-router
129
+
130
+ # Start the gateway
131
+ npx a3m-router serve
132
+
133
+ # Or use as a library
134
+ node -e "const { createA3MRouter } = require('adaptive-memory-multi-model-router'); ..."
135
+ ```
136
+
137
+ ## The Numbers
138
+
139
+ | Metric | v1.9.5 | v2.0.0 |
140
+ |--------|--------|--------|
141
+ | Providers | 12 | 39 |
142
+ | Exports | 13 | 17 |
143
+ | Proxy server | ❌ | ✅ |
144
+ | Dashboard | ❌ | ✅ |
145
+ | LangChain | ❌ | ✅ |
146
+ | Guardrails | Basic | Full engine |
147
+ | Semantic cache | ❌ | ✅ |
148
+ | Cost analytics | Basic | Full analytics |
149
+
150
+ ## Links
151
+
152
+ - **GitHub**: https://github.com/Das-rebel/adaptive-memory-multi-model-router
153
+ - **NPM**: https://www.npmjs.com/package/adaptive-memory-multi-model-router
154
+ - **872+ weekly downloads**
155
+
156
+ MIT license. Open source. No vendor lock-in.
157
+
158
+ ---
159
+
160
+ *Built because I was tired of marketing claims. Sharing the data so you don't have to benchmark yourself.*
package/dist/index.d.ts CHANGED
@@ -1,4 +1,31 @@
1
+ export { routeQuery, routeBatch, recommendForTask, extractQueryFeatures, MODEL_PROFILES, updateModelProfile, getProviderHealth, } from './routing/advancedRouter';
2
+ export { DEFAULT_PROVIDERS, getAvailableProviders, registerProvider, deregisterProvider, updateProvider, healthCheck, checkAllProviders, findCheapestAvailableProvider, findFastestAvailableProvider, loadConfig, saveConfig, } from './providers/providerConfig';
3
+ export type { ProviderTier, ProviderFormat, ProviderType, ProviderCost, ProviderDefinition, } from './providers/providerConfig';
4
+ export { CostTracker } from './cost/costTracker';
5
+ export { MemoryTree } from './memory/memoryTree';
6
+ export type { MemoryChunk, TreeNode } from './memory/memoryTree';
7
+ export { countTokens, estimateTokens } from './utils/tokenUtils';
8
+ export { MODEL_COSTS } from './utils/tokenUtils';
1
9
  export { SemanticCache } from './cache/semanticCache';
2
10
  export { GuardrailEngine } from './security/guardrails';
3
11
  export { CostAnalytics } from './analytics/costAnalytics';
4
- export { ProxyServer } from './server/proxyServer';
12
+ export { createProxyServer } from './server/proxyServer';
13
+ import { getAvailableProviders, healthCheck } from './providers/providerConfig';
14
+ import { MemoryTree } from './memory/memoryTree';
15
+ export interface A3MRouterOptions {
16
+ defaultProvider?: string;
17
+ enableCache?: boolean;
18
+ enableGuardrails?: boolean;
19
+ costLimit?: number;
20
+ }
21
+ export declare function createA3MRouter(options?: A3MRouterOptions): {
22
+ route: any;
23
+ routeBatch: any;
24
+ recommendForTask: any;
25
+ getAvailableProviders: typeof getAvailableProviders;
26
+ healthCheck: typeof healthCheck;
27
+ costTracker: any;
28
+ memoryTree: MemoryTree;
29
+ options: A3MRouterOptions;
30
+ };
31
+ export default createA3MRouter;
package/dist/index.js CHANGED
@@ -1,7 +1,56 @@
1
1
  "use strict";
2
+ // A3M Router - Main Entry Point
3
+ // Version: 2.0.0
2
4
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProxyServer = exports.CostAnalytics = exports.GuardrailEngine = exports.SemanticCache = void 0;
4
- // v2.0.0 additions
5
+ exports.createProxyServer = exports.CostAnalytics = exports.GuardrailEngine = exports.SemanticCache = exports.MODEL_COSTS = exports.estimateTokens = exports.countTokens = exports.MemoryTree = exports.CostTracker = exports.saveConfig = exports.loadConfig = exports.findFastestAvailableProvider = exports.findCheapestAvailableProvider = exports.checkAllProviders = exports.healthCheck = exports.updateProvider = exports.deregisterProvider = exports.registerProvider = exports.getAvailableProviders = exports.DEFAULT_PROVIDERS = exports.getProviderHealth = exports.updateModelProfile = exports.MODEL_PROFILES = exports.extractQueryFeatures = exports.recommendForTask = exports.routeBatch = exports.routeQuery = void 0;
6
+ exports.createA3MRouter = createA3MRouter;
7
+ // ============================================================
8
+ // ROUTING ENGINE
9
+ // ============================================================
10
+ var advancedRouter_1 = require("./routing/advancedRouter");
11
+ Object.defineProperty(exports, "routeQuery", { enumerable: true, get: function () { return advancedRouter_1.routeQuery; } });
12
+ Object.defineProperty(exports, "routeBatch", { enumerable: true, get: function () { return advancedRouter_1.routeBatch; } });
13
+ Object.defineProperty(exports, "recommendForTask", { enumerable: true, get: function () { return advancedRouter_1.recommendForTask; } });
14
+ Object.defineProperty(exports, "extractQueryFeatures", { enumerable: true, get: function () { return advancedRouter_1.extractQueryFeatures; } });
15
+ Object.defineProperty(exports, "MODEL_PROFILES", { enumerable: true, get: function () { return advancedRouter_1.MODEL_PROFILES; } });
16
+ Object.defineProperty(exports, "updateModelProfile", { enumerable: true, get: function () { return advancedRouter_1.updateModelProfile; } });
17
+ Object.defineProperty(exports, "getProviderHealth", { enumerable: true, get: function () { return advancedRouter_1.getProviderHealth; } });
18
+ // ============================================================
19
+ // PROVIDERS
20
+ // ============================================================
21
+ var providerConfig_1 = require("./providers/providerConfig");
22
+ Object.defineProperty(exports, "DEFAULT_PROVIDERS", { enumerable: true, get: function () { return providerConfig_1.DEFAULT_PROVIDERS; } });
23
+ Object.defineProperty(exports, "getAvailableProviders", { enumerable: true, get: function () { return providerConfig_1.getAvailableProviders; } });
24
+ Object.defineProperty(exports, "registerProvider", { enumerable: true, get: function () { return providerConfig_1.registerProvider; } });
25
+ Object.defineProperty(exports, "deregisterProvider", { enumerable: true, get: function () { return providerConfig_1.deregisterProvider; } });
26
+ Object.defineProperty(exports, "updateProvider", { enumerable: true, get: function () { return providerConfig_1.updateProvider; } });
27
+ Object.defineProperty(exports, "healthCheck", { enumerable: true, get: function () { return providerConfig_1.healthCheck; } });
28
+ Object.defineProperty(exports, "checkAllProviders", { enumerable: true, get: function () { return providerConfig_1.checkAllProviders; } });
29
+ Object.defineProperty(exports, "findCheapestAvailableProvider", { enumerable: true, get: function () { return providerConfig_1.findCheapestAvailableProvider; } });
30
+ Object.defineProperty(exports, "findFastestAvailableProvider", { enumerable: true, get: function () { return providerConfig_1.findFastestAvailableProvider; } });
31
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return providerConfig_1.loadConfig; } });
32
+ Object.defineProperty(exports, "saveConfig", { enumerable: true, get: function () { return providerConfig_1.saveConfig; } });
33
+ // ============================================================
34
+ // COST TRACKING
35
+ // ============================================================
36
+ var costTracker_1 = require("./cost/costTracker");
37
+ Object.defineProperty(exports, "CostTracker", { enumerable: true, get: function () { return costTracker_1.CostTracker; } });
38
+ // ============================================================
39
+ // MEMORY
40
+ // ============================================================
41
+ var memoryTree_1 = require("./memory/memoryTree");
42
+ Object.defineProperty(exports, "MemoryTree", { enumerable: true, get: function () { return memoryTree_1.MemoryTree; } });
43
+ // ============================================================
44
+ // UTILITIES
45
+ // ============================================================
46
+ var tokenUtils_1 = require("./utils/tokenUtils");
47
+ Object.defineProperty(exports, "countTokens", { enumerable: true, get: function () { return tokenUtils_1.countTokens; } });
48
+ Object.defineProperty(exports, "estimateTokens", { enumerable: true, get: function () { return tokenUtils_1.estimateTokens; } });
49
+ var tokenUtils_2 = require("./utils/tokenUtils");
50
+ Object.defineProperty(exports, "MODEL_COSTS", { enumerable: true, get: function () { return tokenUtils_2.MODEL_COSTS; } });
51
+ // ============================================================
52
+ // v2.0.0 FEATURES
53
+ // ============================================================
5
54
  var semanticCache_1 = require("./cache/semanticCache");
6
55
  Object.defineProperty(exports, "SemanticCache", { enumerable: true, get: function () { return semanticCache_1.SemanticCache; } });
7
56
  var guardrails_1 = require("./security/guardrails");
@@ -9,5 +58,28 @@ Object.defineProperty(exports, "GuardrailEngine", { enumerable: true, get: funct
9
58
  var costAnalytics_1 = require("./analytics/costAnalytics");
10
59
  Object.defineProperty(exports, "CostAnalytics", { enumerable: true, get: function () { return costAnalytics_1.CostAnalytics; } });
11
60
  var proxyServer_1 = require("./server/proxyServer");
12
- Object.defineProperty(exports, "ProxyServer", { enumerable: true, get: function () { return proxyServer_1.ProxyServer; } });
61
+ Object.defineProperty(exports, "createProxyServer", { enumerable: true, get: function () { return proxyServer_1.createProxyServer; } });
62
+ // ============================================================
63
+ // CONVENIENCE: Create a router instance
64
+ // ============================================================
65
+ const advancedRouter_2 = require("./routing/advancedRouter");
66
+ const providerConfig_2 = require("./providers/providerConfig");
67
+ const costTracker_2 = require("./cost/costTracker");
68
+ const memoryTree_2 = require("./memory/memoryTree");
69
+ function createA3MRouter(options) {
70
+ const costTracker = new costTracker_2.CostTracker();
71
+ const memoryTree = new memoryTree_2.MemoryTree();
72
+ return {
73
+ route: advancedRouter_2.routeQuery,
74
+ routeBatch: advancedRouter_2.routeBatch,
75
+ recommendForTask: advancedRouter_2.recommendForTask,
76
+ getAvailableProviders: providerConfig_2.getAvailableProviders,
77
+ healthCheck: providerConfig_2.healthCheck,
78
+ costTracker,
79
+ memoryTree,
80
+ options: options || {},
81
+ };
82
+ }
83
+ // Default export
84
+ exports.default = createA3MRouter;
13
85
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,mBAAmB;AACnB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,oDAAwD;AAA/C,6GAAA,eAAe,OAAA;AACxB,2DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,oDAAmD;AAA1C,0GAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,iBAAiB;;;AAgFjB,0CAcC;AA5FD,+DAA+D;AAC/D,iBAAiB;AACjB,+DAA+D;AAC/D,2DAQkC;AAPhC,4GAAA,UAAU,OAAA;AACV,4GAAA,UAAU,OAAA;AACV,kHAAA,gBAAgB,OAAA;AAChB,sHAAA,oBAAoB,OAAA;AACpB,gHAAA,cAAc,OAAA;AACd,oHAAA,kBAAkB,OAAA;AAClB,mHAAA,iBAAiB,OAAA;AAGnB,+DAA+D;AAC/D,YAAY;AACZ,+DAA+D;AAC/D,6DAYoC;AAXlC,mHAAA,iBAAiB,OAAA;AACjB,uHAAA,qBAAqB,OAAA;AACrB,kHAAA,gBAAgB,OAAA;AAChB,oHAAA,kBAAkB,OAAA;AAClB,gHAAA,cAAc,OAAA;AACd,6GAAA,WAAW,OAAA;AACX,mHAAA,iBAAiB,OAAA;AACjB,+HAAA,6BAA6B,OAAA;AAC7B,8HAAA,4BAA4B,OAAA;AAC5B,4GAAA,UAAU,OAAA;AACV,4GAAA,UAAU,OAAA;AAWZ,+DAA+D;AAC/D,gBAAgB;AAChB,+DAA+D;AAC/D,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AAEpB,+DAA+D;AAC/D,SAAS;AACT,+DAA+D;AAC/D,kDAAiD;AAAxC,wGAAA,UAAU,OAAA;AAGnB,+DAA+D;AAC/D,YAAY;AACZ,+DAA+D;AAC/D,iDAAiE;AAAxD,yGAAA,WAAW,OAAA;AAAE,4GAAA,cAAc,OAAA;AACpC,iDAAiD;AAAxC,yGAAA,WAAW,OAAA;AAEpB,+DAA+D;AAC/D,kBAAkB;AAClB,+DAA+D;AAC/D,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,oDAAwD;AAA/C,6GAAA,eAAe,OAAA;AACxB,2DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,oDAAyD;AAAhD,gHAAA,iBAAiB,OAAA;AAE1B,+DAA+D;AAC/D,wCAAwC;AACxC,+DAA+D;AAC/D,6DAAoF;AACpF,+DAAgF;AAChF,oDAAiD;AACjD,oDAAiD;AASjD,SAAgB,eAAe,CAAC,OAA0B;IACxD,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,uBAAU,EAAE,CAAC;IAEpC,OAAO;QACL,KAAK,EAAE,2BAAU;QACjB,UAAU,EAAV,2BAAU;QACV,gBAAgB,EAAhB,iCAAgB;QAChB,qBAAqB,EAArB,sCAAqB;QACrB,WAAW,EAAX,4BAAW;QACX,WAAW;QACX,UAAU;QACV,OAAO,EAAE,OAAO,IAAI,EAAE;KACvB,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,kBAAe,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adaptive-memory-multi-model-router",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "shortName": "A3M Router",
5
5
  "displayName": "A3M Router - Adaptive Memory Multi-Model Router",
6
6
  "description": "\ud83d\udd00 Intelligent LLM routing engine with OpenAI-compatible proxy, LangChain adapter, guardrails, semantic cache, cost analytics, and 40+ providers",
package/src/index.ts CHANGED
@@ -1,6 +1,99 @@
1
+ // A3M Router - Main Entry Point
2
+ // Version: 2.0.0
1
3
 
2
- // v2.0.0 additions
4
+ // ============================================================
5
+ // ROUTING ENGINE
6
+ // ============================================================
7
+ export {
8
+ routeQuery,
9
+ routeBatch,
10
+ recommendForTask,
11
+ extractQueryFeatures,
12
+ MODEL_PROFILES,
13
+ updateModelProfile,
14
+ getProviderHealth,
15
+ } from './routing/advancedRouter';
16
+
17
+ // ============================================================
18
+ // PROVIDERS
19
+ // ============================================================
20
+ export {
21
+ DEFAULT_PROVIDERS,
22
+ getAvailableProviders,
23
+ registerProvider,
24
+ deregisterProvider,
25
+ updateProvider,
26
+ healthCheck,
27
+ checkAllProviders,
28
+ findCheapestAvailableProvider,
29
+ findFastestAvailableProvider,
30
+ loadConfig,
31
+ saveConfig,
32
+ } from './providers/providerConfig';
33
+
34
+ export type {
35
+ ProviderTier,
36
+ ProviderFormat,
37
+ ProviderType,
38
+ ProviderCost,
39
+ ProviderDefinition,
40
+ } from './providers/providerConfig';
41
+
42
+ // ============================================================
43
+ // COST TRACKING
44
+ // ============================================================
45
+ export { CostTracker } from './cost/costTracker';
46
+
47
+ // ============================================================
48
+ // MEMORY
49
+ // ============================================================
50
+ export { MemoryTree } from './memory/memoryTree';
51
+ export type { MemoryChunk, TreeNode } from './memory/memoryTree';
52
+
53
+ // ============================================================
54
+ // UTILITIES
55
+ // ============================================================
56
+ export { countTokens, estimateTokens } from './utils/tokenUtils';
57
+ export { MODEL_COSTS } from './utils/tokenUtils';
58
+
59
+ // ============================================================
60
+ // v2.0.0 FEATURES
61
+ // ============================================================
3
62
  export { SemanticCache } from './cache/semanticCache';
4
63
  export { GuardrailEngine } from './security/guardrails';
5
64
  export { CostAnalytics } from './analytics/costAnalytics';
6
- export { ProxyServer } from './server/proxyServer';
65
+ export { createProxyServer } from './server/proxyServer';
66
+
67
+ // ============================================================
68
+ // CONVENIENCE: Create a router instance
69
+ // ============================================================
70
+ import { routeQuery, routeBatch, recommendForTask } from './routing/advancedRouter';
71
+ import { getAvailableProviders, healthCheck } from './providers/providerConfig';
72
+ import { CostTracker } from './cost/costTracker';
73
+ import { MemoryTree } from './memory/memoryTree';
74
+
75
+ export interface A3MRouterOptions {
76
+ defaultProvider?: string;
77
+ enableCache?: boolean;
78
+ enableGuardrails?: boolean;
79
+ costLimit?: number;
80
+ }
81
+
82
+ export function createA3MRouter(options?: A3MRouterOptions) {
83
+ const costTracker = new CostTracker();
84
+ const memoryTree = new MemoryTree();
85
+
86
+ return {
87
+ route: routeQuery,
88
+ routeBatch,
89
+ recommendForTask,
90
+ getAvailableProviders,
91
+ healthCheck,
92
+ costTracker,
93
+ memoryTree,
94
+ options: options || {},
95
+ };
96
+ }
97
+
98
+ // Default export
99
+ export default createA3MRouter;