adaptive-memory-multi-model-router 2.0.0 → 2.0.2

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/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/llms.txt CHANGED
@@ -1,138 +1,48 @@
1
- # LLM-Optimized Package Information for A3M Router
1
+ # A3M Router Intelligent LLM Routing Engine
2
2
 
3
- ## One-Sentence Description
4
-
5
- adaptive-memory-multi-model-router is a production-ready JavaScript/TypeScript library for routing LLM queries to optimal providers with automatic cost optimization, fallback handling, and batch processing.
6
-
7
- ## Primary Use Cases
8
-
9
- 1. **Multi-Provider LLM Routing**: Route queries to cheapest/best provider based on query characteristics
10
- 2. **Cost Optimization**: Reduce API costs by 50-80% with intelligent provider selection
11
- 3. **Provider Fallback**: Automatic retry with backup providers when primary fails
12
- 4. **Batch Processing**: Process multiple prompts with parallel execution and rate limiting
13
- 5. **Cost Tracking**: Real-time monitoring of API spending across all providers
14
-
15
- ## Installation
3
+ ## What
4
+ OpenAI-compatible AI gateway that routes queries to the cheapest capable LLM provider.
5
+ 2,775 downloads in 3 days. 1,903 yesterday. 39 providers. Zero config.
16
6
 
7
+ ## Quick Start
17
8
  ```bash
18
9
  npm install adaptive-memory-multi-model-router
10
+ npx a3m-router serve
19
11
  ```
20
12
 
21
- ## Quick Start
22
-
23
- ```javascript
24
- const { createA3MRouter } = require('adaptive-memory-multi-model-router');
25
-
26
- const router = createA3MRouter();
27
-
28
- // Route to optimal provider
29
- const result = await router.route("Write Python to sort an array");
30
- console.log(result.primary_model); // "groq/llama-3.3-70b"
31
- ```
32
-
33
- ## Supported Providers
34
-
35
- - **Fast/Cheap**: Groq, Cerebras, Mistral
36
- - **High Quality**: OpenAI GPT-4, Anthropic Claude
37
- - **Free Tiers**: CommandCode, OpenCode
38
- - **Local**: Ollama, vLLM, LM Studio
39
-
40
13
  ## Key Features
41
-
42
- | Feature | Description |
43
- |---------|-------------|
44
- | Learned Routing | RouteLLM-style routing based on query analysis |
45
- | Cost Optimization | Automatic selection of cheapest capable provider |
46
- | Fallback Chain | Automatic retry with backup providers |
47
- | Batch Processing | Parallel execution with concurrency control |
48
- | Response Caching | RadixAttention-style prefix caching |
49
- | Cost Tracking | Real-time spend monitoring |
50
- | CLI Tools | 15 commands for LLM operations |
51
-
52
- ## Code Examples
53
-
54
- ### Route by Query Type
55
- ```javascript
56
- const { routeQuery } = require('adaptive-memory-multi-model-router');
57
-
58
- // Simple query → cheapest provider
59
- routeQuery("What is 2+2?"); // → free provider
60
-
61
- // Code query → code-capable provider
62
- routeQuery("Write Python function"); // → groq/llama
63
-
64
- // Complex reasoning → high-quality provider
65
- routeQuery("Explain quantum physics"); // → mistral-large
66
- ```
67
-
68
- ### Batch Processing
69
- ```javascript
70
- const { routeBatch } = require('adaptive-memory-multi-model-router');
71
-
72
- const queries = ["Q1", "Q2", "Q3"];
73
- const results = routeBatch(queries, { same_model: true });
74
- ```
75
-
76
- ### Cost Tracking
14
+ - OpenAI-compatible proxy (drop-in for any SDK)
15
+ - Intelligent routing by query complexity (70% cost savings)
16
+ - Real-time dashboard with cost tracking
17
+ - LangChain adapter (A3MChatModel)
18
+ - Guardrails (PII, prompt injection, content filter)
19
+ - Semantic cache (trigram Jaccard similarity)
20
+ - Cost analytics with savings reports
21
+ - 39 providers: Groq, Cerebras, Mistral, DeepSeek, CommandCode (FREE), Ollama, etc.
22
+
23
+ ## Providers by Cost
24
+ - FREE: CommandCode, Ollama, LM Studio, vLLM
25
+ - $0.59-0.60/1M tokens: Groq, Cerebras
26
+ - $1.50-2.80/1M tokens: DeepSeek, MiniMax, Mistral, Qwen, GLM-4
27
+ - $10-30/1M tokens: Google, Anthropic, OpenAI
28
+
29
+ ## API
77
30
  ```javascript
31
+ const { createA3MRouter } = require('adaptive-memory-multi-model-router');
78
32
  const router = createA3MRouter();
79
- const summary = router.costTracker.getSummary();
80
- console.log(`Total spent: $${summary.totalSpent}`);
33
+ const result = await router.route("Your query");
81
34
  ```
82
35
 
83
- ## CLI Usage
84
-
36
+ ## CLI
85
37
  ```bash
38
+ npx a3m-router serve # Start OpenAI-compatible proxy on :8787
39
+ npx a3m-router route "query" # Route a single query
40
+ npx a3m-router benchmark # Benchmark all providers
86
41
  npx a3m-router providers # List configured providers
87
- npx a3m-router route "query" # Route query
88
- npx a3m-router benchmark # Compare providers
89
- npx a3m-router status # Show system status
42
+ npx a3m-router status # Show router status
90
43
  ```
91
44
 
92
- ## Configuration
93
-
94
- ```json
95
- // ~/.config/a3m-router/providers.json
96
- {
97
- "providers": {
98
- "groq": {
99
- "apiKeyEnv": "GROQ_API_KEY",
100
- "models": ["llama-3.3-70b"]
101
- }
102
- }
103
- }
104
- ```
105
-
106
- ## Performance
107
-
108
- - 872 weekly downloads
109
- - 320 daily average
110
- - 33 comprehensive tests
111
- - 139 npm keywords
112
- - 116 integrations
113
-
114
- ## Comparison
115
-
116
- | Package | Routing | Cost Track | Fallback | Batch | CLI |
117
- |---------|---------|------------|----------|-------|-----|
118
- | A3M Router | ✅ Learned | ✅ | ✅ | ✅ | ✅ |
119
- | LiteLLM | ✅ Basic | ❌ | ❌ | ✅ | ✅ |
120
- | OpenRouter | ✅ | ❌ | ✅ | ❌ | ❌ |
121
-
122
- ## When to Use
123
-
124
- Use A3M Router when:
125
- - You use multiple LLM providers
126
- - You want automatic cost optimization
127
- - You need provider fallback
128
- - You process prompts in batches
129
- - You want to track API spending
130
-
131
45
  ## Links
132
-
133
46
  - NPM: https://www.npmjs.com/package/adaptive-memory-multi-model-router
134
47
  - GitHub: https://github.com/Das-rebel/adaptive-memory-multi-model-router
135
-
136
- ## Keywords for AI Indexing
137
-
138
- LLM routing, cost optimization, multi-provider, OpenAI alternative, Claude routing, Groq integration, batch processing, API load balancing, LLM fallback, provider switching, token optimization, response caching, adaptive routing, learned routing, RouteLLM implementation
48
+ - License: MIT
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.2",
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;