adaptive-memory-multi-model-router 2.15.5 → 2.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/auto-submit-sitemap.yml +41 -0
- package/.github/workflows/mcp-pypi-publish.yml +34 -0
- package/.github/workflows/pypi-publish.yml +61 -17
- package/.github/workflows/tmlpd-publish.yml +23 -0
- package/README.md +181 -207
- package/RELEASE_v2.16.0.md +149 -0
- package/TECHNICAL_README.md +253 -0
- package/discoverability-diagnosis.md +280 -0
- package/dist/analytics/costAnalytics.d.ts.map +1 -1
- package/dist/benchmark/reproducible.d.ts.map +1 -1
- package/dist/cache/semanticCache.d.ts.map +1 -1
- package/dist/cli/setupWizard.d.ts +257 -50
- package/dist/cli/setupWizard.d.ts.map +1 -1
- package/dist/cli/setupWizard.js +419 -109
- package/dist/cli/setupWizard.js.map +1 -1
- package/dist/cli/tui.js +96 -67
- package/dist/cli.js +9 -0
- package/dist/cost/budgetEnforcer.d.ts.map +1 -1
- package/dist/cost/costTracker.d.ts.map +1 -1
- package/dist/ensemble/multiRoundDialog.d.ts.map +1 -1
- package/dist/ensemble/shapleyValue.d.ts.map +1 -1
- package/dist/ensemble.d.ts +1 -1
- package/dist/ensemble.js +141 -0
- package/dist/integrations/langchainAdapter.d.ts.map +1 -1
- package/dist/integrations/langchainAdapter.js +3 -3
- package/dist/integrations/langchainAdapter.js.map +1 -1
- package/dist/integrations/oauth.d.ts.map +1 -1
- package/dist/integrations/scienceAdapter.d.ts.map +1 -1
- package/dist/memory/autoFetch.d.ts.map +1 -1
- package/dist/memory/hybridMemory.d.ts.map +1 -1
- package/dist/memory/memoryTree.d.ts.map +1 -1
- package/dist/memory/obsidianVault.d.ts.map +1 -1
- package/dist/memory/reasoningBank.d.ts.map +1 -1
- package/dist/observability/metrics.d.ts.map +1 -1
- package/dist/observability/tracer.d.ts.map +1 -1
- package/dist/providers/providerConfig.d.ts.map +1 -1
- package/dist/providers/providerConfig.js +32 -17
- package/dist/providers/providerConfig.js.map +1 -1
- package/dist/routing/advancedRouter.d.ts.map +1 -1
- package/dist/routing/advancedRouter.js +106 -14
- package/dist/routing/advancedRouter.js.map +1 -1
- package/dist/routing/providerHealth.d.ts.map +1 -1
- package/dist/routing/providerRetry.d.ts.map +1 -1
- package/dist/routing/shadowSampler.js.map +1 -1
- package/dist/security/guardrails.d.ts.map +1 -1
- package/dist/server/handlers/chatHandler.d.ts.map +1 -1
- package/dist/server/handlers/completionsHandler.d.ts.map +1 -1
- package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -1
- package/dist/server/handlers/healthHandler.d.ts.map +1 -1
- package/dist/server/handlers/metricsHandler.d.ts.map +1 -1
- package/dist/server/handlers/modelsHandler.d.ts.map +1 -1
- package/dist/server/metrics.d.ts.map +1 -1
- package/dist/server/proxyServer.d.ts.map +1 -1
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/state.d.ts.map +1 -1
- package/dist/skills/__tests__/skill_manager.test.js +5 -265
- package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
- package/dist/utils/tokenUtils.d.ts.map +1 -1
- package/docs/ARTICLE_Biology_Inspired_Routing.md +208 -0
- package/docs/ARTICLE_Master.md +78 -0
- package/docs/ARTICLE_Master_CN.md +78 -0
- package/docs/ARTICLE_OpenRouter_Stripe.md +140 -0
- package/docs/DEVPTO_ARTICLE.md +84 -0
- package/docs/HUMAN_STYLE_GUIDE.md +75 -0
- package/docs/IMPRINT_PLAN.md +88 -0
- package/docs/OPENROUTER_ALTERNATIVE.md +184 -0
- package/docs/SOCIAL_CAMPAIGN.md +316 -0
- package/docs/anthropic.html +45 -0
- package/docs/best-llm-routers-2025.html +157 -0
- package/docs/cerebras.html +43 -0
- package/docs/cli-cheatsheet.md +286 -212
- package/docs/deepseek.html +44 -0
- package/docs/google.html +47 -0
- package/docs/groq.html +44 -0
- package/docs/mistral.html +43 -0
- package/docs/ollama.html +50 -0
- package/docs/openai.html +57 -0
- package/docs/sitemap.xml +69 -57
- package/docs-site/blog/best-llm-routers-2025.html +157 -0
- package/docs-site/index.html +59 -0
- package/docs-site/providers/anthropic.html +45 -0
- package/docs-site/providers/cerebras.html +43 -0
- package/docs-site/providers/deepseek.html +44 -0
- package/docs-site/providers/google.html +47 -0
- package/docs-site/providers/groq.html +44 -0
- package/docs-site/providers/index.html +41 -0
- package/docs-site/providers/mistral.html +43 -0
- package/docs-site/providers/ollama.html +50 -0
- package/docs-site/providers/openai.html +57 -0
- package/docs-site/sitemap.xml +69 -0
- package/package.json +36 -124
- package/python/README.md +33 -106
- package/python/mcp-server/a3m_mcp/__init__.py +20 -10
- package/python/mcp-server/a3m_mcp/server.py +172 -306
- package/python/pyproject.toml +6 -3
- package/scripts/submit-sitemap.sh +52 -0
- package/src/__types__/registry.d.ts +14 -0
- package/src/cli/setupWizard.ts +443 -112
- package/src/cli/tui.ts +159 -0
- package/src/ensemble.ts +154 -1
- package/src/integrations/langchainAdapter.ts +2 -2
- package/src/providers/providerConfig.ts +32 -17
- package/src/providers/registry.js +27 -0
- package/src/routing/advancedRouter.ts +99 -14
- package/src/routing/shadowSampler.ts +1 -1
- package/test-install/package.json +12 -0
- package/tests/tsconfig.json +0 -1
- package/tmlpd-pi-extension/README.md +105 -44
- package/tmlpd-pi-extension/docs/demo.svg +33 -0
- package/tmlpd-pi-extension/package.json +35 -106
- package/tmlpd-pi-extension/src/tokenOptimization/contextStratifier.ts +163 -0
- package/tmlpd-pi-extension/src/tokenOptimization/fetchOnceLocal.ts +136 -0
- package/tmlpd-pi-extension/src/tokenOptimization/index.ts +197 -0
- package/tmlpd-pi-extension/src/tokenOptimization/interAgentCompression.ts +157 -0
- package/tmlpd-pi-extension/src/tokenOptimization/schemaContract.ts +101 -0
- package/tmlpd-pi-extension/src/tokenOptimization/semanticCache.ts +248 -0
- package/tmlpd-pi-extension/src/tokenOptimization/tokenAwareFallback.ts +192 -0
- package/tmlpd-pi-extension/test/verify.js +21 -0
- package/tsconfig.build.json +2 -0
- package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts +0 -12
- package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts.map +0 -1
- package/packages/a3m-vercel-ai/dist/a3m-language-model.js +0 -289
- package/packages/a3m-vercel-ai/dist/a3m-language-model.js.map +0 -1
- package/packages/a3m-vercel-ai/dist/index.d.ts +0 -82
- package/packages/a3m-vercel-ai/dist/index.d.ts.map +0 -1
- package/packages/a3m-vercel-ai/dist/index.js +0 -79
- package/packages/a3m-vercel-ai/dist/index.js.map +0 -1
- package/packages/a3m-vercel-ai/dist/types.d.ts +0 -97
- package/packages/a3m-vercel-ai/dist/types.d.ts.map +0 -1
- package/packages/a3m-vercel-ai/dist/types.js +0 -5
- package/packages/a3m-vercel-ai/dist/types.js.map +0 -1
- package/python/a3m_router.egg-info/PKG-INFO +0 -172
- package/python/a3m_router.egg-info/SOURCES.txt +0 -17
- package/python/a3m_router.egg-info/dependency_links.txt +0 -1
- package/python/a3m_router.egg-info/requires.txt +0 -24
- package/python/a3m_router.egg-info/top_level.txt +0 -1
- package/python/dist/a3m_router-2.2.1-py3-none-any.whl +0 -0
- package/python/dist/a3m_router-2.2.1.tar.gz +0 -0
- package/python/dist/a3m_router-2.2.2-py3-none-any.whl +0 -0
- package/python/dist/a3m_router-2.2.2.tar.gz +0 -0
- package/src/skills/__tests__/skill_manager.test.ts +0 -328
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
- package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
- package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cli.js +0 -59
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
- package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
- package/tmlpd-pi-extension/dist/index.d.ts +0 -723
- package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/index.js +0 -239
- package/tmlpd-pi-extension/dist/index.js.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
- package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
- package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
- package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
- package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
- package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
- package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adaptive-memory-multi-model-router",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "
|
|
5
|
-
"main": "
|
|
3
|
+
"version": "2.16.1",
|
|
4
|
+
"description": "A3M Router: Parallel LLM routing gateway with ensemble voting — 14% faster than OpenRouter, 92% cheaper | 80+ providers | Fixed: main entry point, TypeScript 5.8, blessed types | npm: 6K+/mo | PyPI: 700+/mo",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"a3m-router": "./dist/cli.js",
|
|
8
8
|
"a3m": "./dist/cli.js"
|
|
@@ -10,140 +10,41 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"start": "node dist/cli.js serve",
|
|
12
12
|
"test": "node --test",
|
|
13
|
-
"
|
|
13
|
+
"test:vitest": "npx vitest run",
|
|
14
|
+
"test:coverage": "npx vitest run --coverage",
|
|
15
|
+
"test:watch": "npx vitest",
|
|
16
|
+
"lint": "eslint src/",
|
|
17
|
+
"build": "tsc -p tsconfig.build.json"
|
|
14
18
|
},
|
|
15
19
|
"keywords": [
|
|
16
|
-
"
|
|
17
|
-
"a3m-router",
|
|
18
|
-
"adaptive-memory-multi-model-router",
|
|
19
|
-
"llm-router",
|
|
20
|
-
"llm-routing",
|
|
21
|
-
"model-routing",
|
|
22
|
-
"ai-router",
|
|
23
|
-
"ai-gateway",
|
|
24
|
-
"ai-routing",
|
|
25
|
-
"routing",
|
|
20
|
+
"llm",
|
|
26
21
|
"router",
|
|
27
22
|
"gateway",
|
|
28
|
-
"multi-llm",
|
|
29
23
|
"openai",
|
|
30
24
|
"anthropic",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"gpt",
|
|
34
|
-
"gpt-4",
|
|
35
|
-
"llama",
|
|
36
|
-
"llama-3",
|
|
37
|
-
"deepseek",
|
|
38
|
-
"mistral",
|
|
39
|
-
"groq",
|
|
40
|
-
"qwen",
|
|
41
|
-
"kimi",
|
|
42
|
-
"xai",
|
|
43
|
-
"cohere",
|
|
25
|
+
"multi-provider",
|
|
26
|
+
"cost-optimization",
|
|
44
27
|
"langchain",
|
|
45
|
-
"vercel-ai",
|
|
46
28
|
"llamaindex",
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"cost-reduction",
|
|
50
|
-
"caching",
|
|
51
|
-
"semantic-cache",
|
|
52
|
-
"context-cache",
|
|
53
|
-
"prompt-cache",
|
|
54
|
-
"fallback",
|
|
55
|
-
"failover",
|
|
56
|
-
"smart-fallback",
|
|
57
|
-
"smart-failover",
|
|
58
|
-
"guardrails",
|
|
59
|
-
"ai-guardrails",
|
|
60
|
-
"circuit-breaker",
|
|
61
|
-
"streaming",
|
|
62
|
-
"streaming-llm",
|
|
63
|
-
"retry",
|
|
64
|
-
"ai-agent",
|
|
65
|
-
"multi-agent",
|
|
66
|
-
"autonomous-agents",
|
|
67
|
-
"rag",
|
|
68
|
-
"chatbot",
|
|
69
|
-
"ai-coding",
|
|
70
|
-
"code-generation",
|
|
71
|
-
"text-generation",
|
|
72
|
-
"extraction",
|
|
73
|
-
"summarization",
|
|
74
|
-
"smart-routing",
|
|
75
|
-
"semantic-routing",
|
|
76
|
-
"tier-routing",
|
|
77
|
-
"intent-routing",
|
|
78
|
-
"content-routing",
|
|
79
|
-
"dynamic-routing",
|
|
80
|
-
"adaptive-routing",
|
|
81
|
-
"load-balancer",
|
|
82
|
-
"load-balancing",
|
|
83
|
-
"parallel-execution",
|
|
84
|
-
"multi-model",
|
|
85
|
-
"multi-provider",
|
|
86
|
-
"openai-compatible",
|
|
87
|
-
"openai-gateway",
|
|
88
|
-
"openai-proxy",
|
|
29
|
+
"agentkit",
|
|
30
|
+
"a3m",
|
|
89
31
|
"openrouter",
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"observability",
|
|
93
|
-
"health-check",
|
|
94
|
-
"open-source",
|
|
95
|
-
"self-hosted",
|
|
96
|
-
"local-llm",
|
|
97
|
-
"serverless",
|
|
98
|
-
"cost-optimization",
|
|
99
|
-
"token-optimization",
|
|
100
|
-
"llm-cost",
|
|
101
|
-
"token-saving",
|
|
102
|
-
"cost-analytics",
|
|
103
|
-
"cost-tracking",
|
|
104
|
-
"budget-alerts",
|
|
105
|
-
"cache",
|
|
106
|
-
"chatgpt",
|
|
107
|
-
"agent",
|
|
108
|
-
"low-cost-llm",
|
|
109
|
-
"cheaper-llm",
|
|
110
|
-
"provider-failover",
|
|
111
|
-
"response-cache",
|
|
112
|
-
"llm-failover",
|
|
113
|
-
"api-cost-reduction",
|
|
114
|
-
"multi-llm-router",
|
|
115
|
-
"multi-model-router",
|
|
116
|
-
"llm-proxy",
|
|
32
|
+
"litellm",
|
|
33
|
+
"proxy",
|
|
117
34
|
"api-gateway",
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"
|
|
121
|
-
"
|
|
122
|
-
"playwright",
|
|
123
|
-
"puppeteer",
|
|
124
|
-
"web-scraping",
|
|
125
|
-
"anti-detection",
|
|
126
|
-
"stealth-browser",
|
|
127
|
-
"crawling",
|
|
128
|
-
"text-extraction",
|
|
129
|
-
"data-extraction",
|
|
130
|
-
"form-filling",
|
|
131
|
-
"content-generation",
|
|
132
|
-
"model-selection",
|
|
133
|
-
"provider-aggregation",
|
|
134
|
-
"langchain-adapter",
|
|
135
|
-
"llamaindex-adapter",
|
|
136
|
-
"vector-search",
|
|
35
|
+
"artificial-intelligence",
|
|
36
|
+
"machine-learning",
|
|
37
|
+
"nlp",
|
|
38
|
+
"transformers",
|
|
137
39
|
"embeddings",
|
|
138
|
-
"
|
|
139
|
-
"
|
|
140
|
-
"vllm"
|
|
40
|
+
"rag",
|
|
41
|
+
"vector-search"
|
|
141
42
|
],
|
|
142
43
|
"repository": {
|
|
143
44
|
"type": "git",
|
|
144
45
|
"url": "https://github.com/Das-rebel/a3m-router"
|
|
145
46
|
},
|
|
146
|
-
"homepage": "https://
|
|
47
|
+
"homepage": "https://github.com/Das-rebel/a3m-router#readme",
|
|
147
48
|
"dependencies": {
|
|
148
49
|
"blessed": "^0.1.81",
|
|
149
50
|
"nanoid": "^6.0.0"
|
|
@@ -152,7 +53,18 @@
|
|
|
152
53
|
"node": ">=18.0.0"
|
|
153
54
|
},
|
|
154
55
|
"devDependencies": {
|
|
155
|
-
"@types/
|
|
156
|
-
"
|
|
157
|
-
|
|
56
|
+
"@types/blessed": "^0.1.25",
|
|
57
|
+
"@types/express": "^5.0.6",
|
|
58
|
+
"@types/node": "^22.0.0",
|
|
59
|
+
"typescript": "^5.8.0",
|
|
60
|
+
"vitest": "^5.0.0"
|
|
61
|
+
},
|
|
62
|
+
"funding": {
|
|
63
|
+
"type": "github",
|
|
64
|
+
"url": "https://github.com/sponsors/Das-rebel"
|
|
65
|
+
},
|
|
66
|
+
"bugs": {
|
|
67
|
+
"url": "https://github.com/Das-rebel/a3m-router/issues"
|
|
68
|
+
},
|
|
69
|
+
"pypi": "https://pypi.org/project/a3m-router/"
|
|
158
70
|
}
|
package/python/README.md
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
# A3M Router Python
|
|
1
|
+
# A3M Router - Python Package
|
|
2
2
|
|
|
3
|
-
**Intelligent LLM routing
|
|
3
|
+
**Intelligent LLM routing for Python applications.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://pypi.org/project/a3m-router/)
|
|
6
|
+
[](https://pypi.org/project/a3m-router/)
|
|
7
|
+
[](https://www.npmjs.com/package/adaptive-memory-multi-model-router)
|
|
8
|
+
|
|
9
|
+
## Why A3M Router?
|
|
10
|
+
|
|
11
|
+
| Problem | Solution |
|
|
12
|
+
|---------|----------|
|
|
13
|
+
| GPT-4o is $15/1M tokens | A3M routes to $0.001 providers |
|
|
14
|
+
| Managing 80+ API keys | One endpoint, A3M handles the rest |
|
|
15
|
+
| Provider goes down | Automatic failover to next best option |
|
|
16
|
+
| Need best answer, cost doesn't matter | Parallel ensemble calls |
|
|
6
17
|
|
|
7
18
|
## Installation
|
|
8
19
|
|
|
@@ -13,117 +24,33 @@ pip install a3m-router
|
|
|
13
24
|
## Quick Start
|
|
14
25
|
|
|
15
26
|
```python
|
|
16
|
-
from a3m import A3MRouter
|
|
17
|
-
|
|
18
|
-
router = A3MRouter(base_url="http://localhost:8787")
|
|
19
|
-
|
|
20
|
-
# Auto-routes to optimal provider
|
|
21
|
-
response = await router.chat("What is 2+2?")
|
|
22
|
-
# → Routes to Groq, costs ~$0.000001
|
|
23
|
-
|
|
24
|
-
# See routing decision before executing
|
|
25
|
-
decision = await router.route("Explain quantum computing")
|
|
26
|
-
print(f"Model: {decision.model}")
|
|
27
|
-
print(f"Tier: {decision.tier}")
|
|
28
|
-
print(f"Cost: ${decision.cost:.6f}")
|
|
27
|
+
from a3m.router import A3MRouter
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
router = A3MRouter(model="auto")
|
|
30
|
+
result = router.route("Explain quantum entanglement")
|
|
31
|
+
print(result.content)
|
|
33
32
|
```
|
|
34
33
|
|
|
35
|
-
##
|
|
34
|
+
## Features
|
|
36
35
|
|
|
37
|
-
- **
|
|
38
|
-
- **
|
|
39
|
-
- **
|
|
40
|
-
- **
|
|
41
|
-
- **
|
|
42
|
-
- **Cost analytics**: Track spending and savings
|
|
43
|
-
|
|
44
|
-
## Framework Adapters
|
|
45
|
-
|
|
46
|
-
| Adapter | Use Case | Install |
|
|
47
|
-
|---------|----------|---------|
|
|
48
|
-
| **LangChain** | Chain-based AI workflows | `pip install a3m-router[langchain]` |
|
|
49
|
-
| **LlamaIndex** | RAG and document QA | `pip install a3m-router[llamaindex]` |
|
|
50
|
-
| **Qdrant** | Vector search + RAG | `pip install a3m-router[qdrant]` |
|
|
51
|
-
| **Weaviate** | Vector search + RAG | `pip install a3m-router[weaviate]` |
|
|
52
|
-
|
|
53
|
-
All adapters:
|
|
54
|
-
```bash
|
|
55
|
-
pip install a3m-router[all]
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Routing Tiers
|
|
59
|
-
|
|
60
|
-
| Tier | Providers | Cost | When Used |
|
|
61
|
-
|------|-----------|------|-----------|
|
|
62
|
-
| **free** | Ollama, vLLM | $0 | Local inference |
|
|
63
|
-
| **cheap** | Groq, DeepSeek | ~$0.001/1K | Simple Q&A, short code |
|
|
64
|
-
| **mid** | GPT-4o-mini, Claude-haiku | ~$0.01/1K | Standard tasks |
|
|
65
|
-
| **premium** | GPT-4o, Claude-sonnet | ~$0.15/1K | Complex reasoning |
|
|
66
|
-
|
|
67
|
-
## API Reference
|
|
68
|
-
|
|
69
|
-
### A3MRouter
|
|
70
|
-
|
|
71
|
-
```python
|
|
72
|
-
router = A3MRouter(
|
|
73
|
-
base_url="http://localhost:8787", # A3M Router server URL
|
|
74
|
-
timeout=30.0, # Request timeout
|
|
75
|
-
)
|
|
76
|
-
```
|
|
36
|
+
- **80+ Providers** - OpenAI, Anthropic, Groq, Mistral, DeepSeek, and more
|
|
37
|
+
- **14% Faster** - Optimized routing vs OpenRouter
|
|
38
|
+
- **92% Cheaper** - Routes to cheapest capable provider
|
|
39
|
+
- **OpenAI Compatible** - Use existing OpenAI SDK code
|
|
40
|
+
- **Adaptive Memory** - Learns from routing patterns
|
|
77
41
|
|
|
78
|
-
|
|
79
|
-
|--------|-------------|
|
|
80
|
-
| `chat(message)` | Send chat message with auto-routing |
|
|
81
|
-
| `route(query)` | Get routing decision (no execution) |
|
|
82
|
-
| `route_batch(queries)` | Route multiple queries |
|
|
83
|
-
| `stream_chat(message)` | Stream response tokens |
|
|
84
|
-
| `models()` | List all available models |
|
|
85
|
-
| `health()` | Provider health status |
|
|
86
|
-
| `cost_report()` | Cost analytics |
|
|
87
|
-
|
|
88
|
-
### LangChain Example
|
|
89
|
-
|
|
90
|
-
```python
|
|
91
|
-
from a3m import LangChainAdapter
|
|
92
|
-
from langchain.schema import HumanMessage
|
|
93
|
-
|
|
94
|
-
llm = LangChainAdapter(base_url="http://localhost:8787")
|
|
95
|
-
response = llm([HumanMessage(content="What is RAG?")])
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### LlamaIndex Example
|
|
99
|
-
|
|
100
|
-
```python
|
|
101
|
-
from a3m import LlamaIndexAdapter
|
|
102
|
-
|
|
103
|
-
llm = LlamaIndexAdapter()
|
|
104
|
-
response = llm.complete("Explain transformers")
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## Server Setup
|
|
108
|
-
|
|
109
|
-
Start the A3M Router server:
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# Via npm
|
|
113
|
-
npx a3m-router serve
|
|
114
|
-
|
|
115
|
-
# Via Docker
|
|
116
|
-
docker-compose up -d
|
|
117
|
-
```
|
|
42
|
+
## Performance
|
|
118
43
|
|
|
119
|
-
|
|
44
|
+
| Metric | A3M Router | OpenRouter |
|
|
45
|
+
|--------|-------------|------------|
|
|
46
|
+
| Latency | 162ms | 189ms |
|
|
47
|
+
| Cost/1K | $0.00012 | $0.0015 |
|
|
48
|
+
| Quality | 94% | 92% |
|
|
120
49
|
|
|
121
|
-
##
|
|
50
|
+
## Documentation
|
|
122
51
|
|
|
123
|
-
|
|
124
|
-
- **npm Package**: https://www.npmjs.com/package/adaptive-memory-multi-model-router
|
|
125
|
-
- **Documentation**: https://das-rebel.github.io/a3m-router
|
|
52
|
+
Full documentation: https://github.com/Das-rebel/a3m-router#readme
|
|
126
53
|
|
|
127
54
|
## License
|
|
128
55
|
|
|
129
|
-
MIT
|
|
56
|
+
MIT License
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""
|
|
2
|
+
A3M Router MCP Server
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
pip install a3m-mcp-server # Install as package
|
|
4
|
+
MCP (Model Context Protocol) server for A3M Router.
|
|
5
|
+
Provides intelligent LLM routing and ensemble execution as MCP tools.
|
|
6
6
|
"""
|
|
7
|
+
|
|
8
|
+
__version__ = "1.0.0"
|
|
9
|
+
|
|
10
|
+
# Try to import MCP components
|
|
11
|
+
HAS_MCP = False
|
|
12
|
+
SERVER_NAME = "a3m-router"
|
|
13
|
+
|
|
7
14
|
try:
|
|
8
|
-
from .server import
|
|
15
|
+
from mcp.server.lowlevel import Server
|
|
16
|
+
from mcp import Tool
|
|
17
|
+
HAS_MCP = True
|
|
9
18
|
except ImportError:
|
|
10
|
-
|
|
11
|
-
HAS_MCP = False
|
|
12
|
-
SERVER_NAME = "a3m-router"
|
|
19
|
+
pass
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
# Import main if available
|
|
22
|
+
try:
|
|
23
|
+
from .server import main
|
|
24
|
+
except ImportError:
|
|
25
|
+
main = None
|