adaptive-memory-multi-model-router 2.16.0 → 2.16.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.
Files changed (248) hide show
  1. package/.github/workflows/adapters-ci.yml +142 -0
  2. package/.github/workflows/auto-submit-sitemap.yml +41 -0
  3. package/.github/workflows/ci.yml +2 -5
  4. package/.github/workflows/mcp-pypi-publish.yml +34 -0
  5. package/.github/workflows/pypi-publish.yml +146 -0
  6. package/.github/workflows/tmlpd-publish.yml +23 -0
  7. package/README.md +245 -148
  8. package/RELEASE_v2.16.0.md +149 -0
  9. package/TECHNICAL_README.md +253 -0
  10. package/adapters/README.md +36 -0
  11. package/adapters/__init__.py +25 -0
  12. package/adapters/a3m_adapter/__init__.py +51 -0
  13. package/adapters/a3m_adapter/adapter/__init__.py +22 -0
  14. package/adapters/a3m_adapter/adapter/autogen.py +169 -0
  15. package/adapters/a3m_adapter/adapter/config.py +100 -0
  16. package/adapters/a3m_adapter/adapter/haystack.py +197 -0
  17. package/adapters/a3m_adapter/adapter/langchain.py +155 -0
  18. package/adapters/a3m_adapter/adapter/langgraph.py +196 -0
  19. package/adapters/a3m_adapter/adapter/llamaindex.py +162 -0
  20. package/adapters/a3m_adapter/adapter/pinecone.py +217 -0
  21. package/adapters/a3m_adapter/adapter/vercel.py +188 -0
  22. package/adapters/a3m_adapter/tests/__init__.py +1 -0
  23. package/adapters/a3m_adapter/tests/test_adapters.py +118 -0
  24. package/adapters/a3m_adapter/tests/test_integration.py +80 -0
  25. package/adapters/requirements-dev.txt +6 -0
  26. package/adapters/requirements.txt +4 -0
  27. package/adapters/setup.py +23 -0
  28. package/demo.py +251 -0
  29. package/discoverability-diagnosis.md +280 -0
  30. package/dist/analytics/costAnalytics.d.ts.map +1 -1
  31. package/dist/benchmark/reproducible.d.ts.map +1 -1
  32. package/dist/cache/semanticCache.d.ts.map +1 -1
  33. package/dist/cli/setupWizard.d.ts +257 -50
  34. package/dist/cli/setupWizard.d.ts.map +1 -1
  35. package/dist/cli/setupWizard.js +419 -109
  36. package/dist/cli/setupWizard.js.map +1 -1
  37. package/dist/cli/tui.d.ts +6 -0
  38. package/dist/cli/tui.js +96 -67
  39. package/dist/cli/tui.js.map +1 -0
  40. package/dist/cli.js +9 -0
  41. package/dist/cost/budgetEnforcer.d.ts.map +1 -1
  42. package/dist/cost/costTracker.d.ts.map +1 -1
  43. package/dist/ensemble/multiRoundDialog.d.ts.map +1 -1
  44. package/dist/ensemble/shapleyValue.d.ts.map +1 -1
  45. package/dist/ensemble.d.ts +1 -1
  46. package/dist/ensemble.js +141 -0
  47. package/dist/integrations/langchainAdapter.d.ts.map +1 -1
  48. package/dist/integrations/langchainAdapter.js +3 -3
  49. package/dist/integrations/langchainAdapter.js.map +1 -1
  50. package/dist/integrations/oauth.d.ts.map +1 -1
  51. package/dist/integrations/scienceAdapter.d.ts.map +1 -1
  52. package/dist/memory/autoFetch.d.ts.map +1 -1
  53. package/dist/memory/hybridMemory.d.ts.map +1 -1
  54. package/dist/memory/memoryTree.d.ts.map +1 -1
  55. package/dist/memory/obsidianVault.d.ts.map +1 -1
  56. package/dist/memory/reasoningBank.d.ts.map +1 -1
  57. package/dist/observability/metrics.d.ts.map +1 -1
  58. package/dist/observability/tracer.d.ts.map +1 -1
  59. package/dist/providers/providerConfig.d.ts.map +1 -1
  60. package/dist/providers/providerConfig.js +32 -17
  61. package/dist/providers/providerConfig.js.map +1 -1
  62. package/dist/routing/advancedRouter.d.ts.map +1 -1
  63. package/dist/routing/advancedRouter.js +106 -14
  64. package/dist/routing/advancedRouter.js.map +1 -1
  65. package/dist/routing/providerHealth.d.ts.map +1 -1
  66. package/dist/routing/providerRetry.d.ts.map +1 -1
  67. package/dist/routing/shadowSampler.d.ts.map +1 -0
  68. package/dist/routing/shadowSampler.js.map +1 -1
  69. package/dist/security/guardrails.d.ts.map +1 -1
  70. package/dist/server/handlers/chatHandler.d.ts.map +1 -1
  71. package/dist/server/handlers/completionsHandler.d.ts.map +1 -1
  72. package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -1
  73. package/dist/server/handlers/healthHandler.d.ts.map +1 -1
  74. package/dist/server/handlers/metricsHandler.d.ts.map +1 -1
  75. package/dist/server/handlers/modelsHandler.d.ts.map +1 -1
  76. package/dist/server/metrics.d.ts.map +1 -1
  77. package/dist/server/proxyServer.d.ts.map +1 -1
  78. package/dist/server/router.d.ts.map +1 -1
  79. package/dist/server/state.d.ts.map +1 -1
  80. package/dist/skills/__tests__/skill_manager.test.js +5 -265
  81. package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
  82. package/dist/utils/tokenUtils.d.ts.map +1 -1
  83. package/docker-compose.yml +84 -60
  84. package/docs/ARTICLE_Biology_Inspired_Routing.md +208 -0
  85. package/docs/ARTICLE_Master.md +78 -0
  86. package/docs/ARTICLE_Master_CN.md +78 -0
  87. package/docs/ARTICLE_OpenRouter_Stripe.md +140 -0
  88. package/docs/DEVPTO_ARTICLE.md +84 -0
  89. package/docs/HUMAN_STYLE_GUIDE.md +75 -0
  90. package/docs/IMPRINT_PLAN.md +88 -0
  91. package/docs/OPENROUTER_ALTERNATIVE.md +184 -0
  92. package/docs/SOCIAL_CAMPAIGN.md +316 -0
  93. package/docs/anthropic.html +45 -0
  94. package/docs/best-llm-routers-2025.html +157 -0
  95. package/docs/cerebras.html +43 -0
  96. package/docs/cli-cheatsheet.md +286 -212
  97. package/docs/comparison.md +2 -2
  98. package/docs/deepseek.html +44 -0
  99. package/docs/google.html +47 -0
  100. package/docs/groq.html +44 -0
  101. package/docs/llms-full.txt +360 -138
  102. package/docs/llms.txt +70 -71
  103. package/docs/mistral.html +43 -0
  104. package/docs/ollama.html +50 -0
  105. package/docs/openai.html +57 -0
  106. package/docs/sitemap.xml +69 -57
  107. package/docs-site/blog/best-llm-routers-2025.html +157 -0
  108. package/docs-site/index.html +68 -9
  109. package/docs-site/providers/anthropic.html +45 -0
  110. package/docs-site/providers/cerebras.html +43 -0
  111. package/docs-site/providers/deepseek.html +44 -0
  112. package/docs-site/providers/google.html +47 -0
  113. package/docs-site/providers/groq.html +44 -0
  114. package/docs-site/providers/index.html +41 -0
  115. package/docs-site/providers/mistral.html +43 -0
  116. package/docs-site/providers/ollama.html +50 -0
  117. package/docs-site/providers/openai.html +57 -0
  118. package/docs-site/sitemap.xml +69 -0
  119. package/llms.txt +70 -62
  120. package/package.json +44 -182
  121. package/packages/agentkit-adapter/LICENSE +21 -0
  122. package/packages/agentkit-adapter/README.md +126 -0
  123. package/packages/agentkit-adapter/examples/agentkit-example.ts +139 -0
  124. package/packages/agentkit-adapter/package.json +57 -0
  125. package/packages/agentkit-adapter/src/adapter.ts +381 -0
  126. package/packages/agentkit-adapter/src/index.ts +36 -0
  127. package/packages/agentkit-adapter/src/types.ts +105 -0
  128. package/packages/agentkit-adapter/src/util.ts +13 -0
  129. package/packages/agentkit-adapter/tsconfig.json +22 -0
  130. package/prometheus.yml +8 -0
  131. package/python/README.md +35 -81
  132. package/python/a3m/__init__.py +32 -3
  133. package/python/a3m/adapters/__init__.py +21 -0
  134. package/python/a3m/adapters/langchain.py +190 -0
  135. package/python/a3m/adapters/llamaindex.py +249 -0
  136. package/python/a3m/adapters/qdrant.py +240 -0
  137. package/python/a3m/adapters/weaviate.py +263 -0
  138. package/python/a3m/client.py +5 -0
  139. package/python/build_verify.sh +32 -0
  140. package/python/mcp-server/README.md +172 -0
  141. package/python/mcp-server/a3m_mcp/__init__.py +25 -0
  142. package/python/mcp-server/a3m_mcp/__main__.py +15 -0
  143. package/python/mcp-server/a3m_mcp/server.py +205 -0
  144. package/python/mcp-server/pyproject.toml +24 -0
  145. package/python/pyproject.toml +60 -6
  146. package/python/setup.py +3 -28
  147. package/scripts/submit-sitemap.sh +52 -0
  148. package/src/__types__/registry.d.ts +14 -0
  149. package/src/cli/setupWizard.ts +443 -112
  150. package/src/cli/tui.ts +159 -0
  151. package/src/ensemble.ts +154 -1
  152. package/src/integrations/langchainAdapter.ts +2 -2
  153. package/src/providers/providerConfig.ts +32 -17
  154. package/src/providers/registry.js +27 -0
  155. package/src/routing/advancedRouter.ts +99 -14
  156. package/src/routing/shadowSampler.ts +1 -1
  157. package/test-install/package.json +12 -0
  158. package/tests/tsconfig.json +0 -1
  159. package/tmlpd-pi-extension/README.md +105 -44
  160. package/tmlpd-pi-extension/docs/demo.svg +33 -0
  161. package/tmlpd-pi-extension/package.json +35 -106
  162. package/tmlpd-pi-extension/src/tokenOptimization/contextStratifier.ts +163 -0
  163. package/tmlpd-pi-extension/src/tokenOptimization/fetchOnceLocal.ts +136 -0
  164. package/tmlpd-pi-extension/src/tokenOptimization/index.ts +197 -0
  165. package/tmlpd-pi-extension/src/tokenOptimization/interAgentCompression.ts +157 -0
  166. package/tmlpd-pi-extension/src/tokenOptimization/schemaContract.ts +101 -0
  167. package/tmlpd-pi-extension/src/tokenOptimization/semanticCache.ts +248 -0
  168. package/tmlpd-pi-extension/src/tokenOptimization/tokenAwareFallback.ts +192 -0
  169. package/tmlpd-pi-extension/test/verify.js +21 -0
  170. package/tsconfig.build.json +3 -2
  171. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts +0 -12
  172. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts.map +0 -1
  173. package/packages/a3m-vercel-ai/dist/a3m-language-model.js +0 -289
  174. package/packages/a3m-vercel-ai/dist/a3m-language-model.js.map +0 -1
  175. package/packages/a3m-vercel-ai/dist/index.d.ts +0 -82
  176. package/packages/a3m-vercel-ai/dist/index.d.ts.map +0 -1
  177. package/packages/a3m-vercel-ai/dist/index.js +0 -79
  178. package/packages/a3m-vercel-ai/dist/index.js.map +0 -1
  179. package/packages/a3m-vercel-ai/dist/types.d.ts +0 -97
  180. package/packages/a3m-vercel-ai/dist/types.d.ts.map +0 -1
  181. package/packages/a3m-vercel-ai/dist/types.js +0 -5
  182. package/packages/a3m-vercel-ai/dist/types.js.map +0 -1
  183. package/src/skills/__tests__/skill_manager.test.ts +0 -328
  184. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
  185. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
  186. package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
  187. package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
  188. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
  189. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
  190. package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
  191. package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
  192. package/tmlpd-pi-extension/dist/cli.js +0 -59
  193. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
  194. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
  195. package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
  196. package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
  197. package/tmlpd-pi-extension/dist/index.d.ts +0 -723
  198. package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
  199. package/tmlpd-pi-extension/dist/index.js +0 -239
  200. package/tmlpd-pi-extension/dist/index.js.map +0 -1
  201. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
  202. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
  203. package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
  204. package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
  205. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
  206. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
  207. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
  208. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
  209. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
  210. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
  211. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
  212. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
  213. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
  214. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
  215. package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
  216. package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
  217. package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
  218. package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
  219. package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
  220. package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
  221. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
  222. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
  223. package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
  224. package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
  225. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
  226. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
  227. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
  228. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
  229. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
  230. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
  231. package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
  232. package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
  233. package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
  234. package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
  235. package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
  236. package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
  237. package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
  238. package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
  239. package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
  240. package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
  241. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
  242. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
  243. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
  244. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
  245. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
  246. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
  247. package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
  248. package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +0 -1
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Token-Aware Fallback Chain - Token Optimization Pattern #3
3
+ *
4
+ * Route to smaller models when high-token content is detected.
5
+ * Reduces cost by using cheap models for simple/high-volume queries.
6
+ *
7
+ * Based on: arXiv:2608.17188 - Token Optimization and Context Window Management
8
+ */
9
+
10
+ export interface TokenThreshold {
11
+ maxTokens: number;
12
+ models: string[]; // Available models at this tier
13
+ }
14
+
15
+ export interface TokenAwareFallbackConfig {
16
+ thresholds: TokenThreshold[];
17
+ defaultModel?: string;
18
+ enableDynamicThreshold?: boolean;
19
+ }
20
+
21
+ export interface FallbackDecision {
22
+ targetModel: string;
23
+ tier: "cheap" | "medium" | "expensive";
24
+ estimatedTokens: number;
25
+ reasoning: string;
26
+ }
27
+
28
+ /**
29
+ * Model cost tiers (approximate, per 1M tokens)
30
+ */
31
+ const MODEL_COSTS: Record<string, number> = {
32
+ // Cheap tier (< $0.50/1M)
33
+ "gpt-4o-mini": 0.15,
34
+ "claude-haiku": 0.25,
35
+ "gemini-flash": 0.075,
36
+ "gpt-3.5-turbo": 0.50,
37
+
38
+ // Medium tier ($0.50 - $3.00/1M)
39
+ "gpt-4o": 2.50,
40
+ "claude-sonnet": 3.00,
41
+ "gemini-pro": 1.25,
42
+
43
+ // Expensive tier (> $3.00/1M)
44
+ "gpt-4-turbo": 10.00,
45
+ "claude-opus": 15.00,
46
+ "gpt-4": 30.00,
47
+ };
48
+
49
+ export class TokenAwareFallback {
50
+ private config: TokenAwareFallbackConfig;
51
+
52
+ constructor(config: Partial<TokenAwareFallbackConfig> = {}) {
53
+ this.config = {
54
+ thresholds: config.thresholds ?? [
55
+ { maxTokens: 500, models: ["gpt-4o-mini", "claude-haiku", "gemini-flash"] },
56
+ { maxTokens: 2000, models: ["gpt-4o", "claude-sonnet", "gemini-pro"] },
57
+ { maxTokens: Infinity, models: ["gpt-4o", "claude-opus", "gpt-4-turbo"] },
58
+ ],
59
+ defaultModel: config.defaultModel ?? "gpt-4o",
60
+ enableDynamicThreshold: config.enableDynamicThreshold ?? false,
61
+ };
62
+ }
63
+
64
+ /**
65
+ * Estimate token count from text (rough approximation)
66
+ */
67
+ estimateTokens(text: string): number {
68
+ // ~4 characters per token for English
69
+ return Math.ceil(text.length / 4);
70
+ }
71
+
72
+ /**
73
+ * Estimate tokens including history
74
+ */
75
+ estimateTotalTokens(
76
+ query: string,
77
+ history?: Array<{ content: string }>
78
+ ): number {
79
+ let total = this.estimateTokens(query);
80
+
81
+ if (history) {
82
+ total += history.reduce((sum, msg) => sum + this.estimateTokens(msg.content), 0);
83
+ }
84
+
85
+ return total;
86
+ }
87
+
88
+ /**
89
+ * Select appropriate model based on token count
90
+ */
91
+ selectModel(estimatedTokens: number): FallbackDecision {
92
+ for (const threshold of this.config.thresholds) {
93
+ if (estimatedTokens <= threshold.maxTokens) {
94
+ const model = threshold.models[0]; // Select first available in tier
95
+ const tier = this.getModelTier(model);
96
+
97
+ return {
98
+ targetModel: model,
99
+ tier,
100
+ estimatedTokens,
101
+ reasoning: `Selected ${tier} model ${model} for ${estimatedTokens} tokens`,
102
+ };
103
+ }
104
+ }
105
+
106
+ // Fallback to default
107
+ return {
108
+ targetModel: this.config.defaultModel!,
109
+ tier: "medium",
110
+ estimatedTokens,
111
+ reasoning: `Defaulting to ${this.config.defaultModel} for ${estimatedTokens} tokens`,
112
+ };
113
+ }
114
+
115
+ /**
116
+ * Get cost tier for a model
117
+ */
118
+ private getModelTier(model: string): "cheap" | "medium" | "expensive" {
119
+ const cost = MODEL_COSTS[model.toLowerCase()] ?? 1.0;
120
+ if (cost < 0.5) return "cheap";
121
+ if (cost < 3.0) return "medium";
122
+ return "expensive";
123
+ }
124
+
125
+ /**
126
+ * Create fallback chain for a query
127
+ */
128
+ createFallbackChain(
129
+ query: string,
130
+ history?: Array<{ content: string }>
131
+ ): string[] {
132
+ const estimatedTokens = this.estimateTotalTokens(query, history);
133
+ const chain: string[] = [];
134
+
135
+ // Find appropriate tier and all models in that tier
136
+ for (const threshold of this.config.thresholds) {
137
+ if (estimatedTokens <= threshold.maxTokens) {
138
+ chain.push(...threshold.models);
139
+ break;
140
+ }
141
+ }
142
+
143
+ // If still empty, add all models
144
+ if (chain.length === 0) {
145
+ for (const threshold of this.config.thresholds) {
146
+ chain.push(...threshold.models);
147
+ }
148
+ }
149
+
150
+ return chain;
151
+ }
152
+
153
+ /**
154
+ * Estimate cost savings vs always using expensive model
155
+ */
156
+ estimateSavings(
157
+ query: string,
158
+ history?: Array<{ content: string }>
159
+ ): { savingsPercent: number; cheapModel: string; expensiveModel: string } {
160
+ const estimatedTokens = this.estimateTotalTokens(query, history);
161
+ const decision = this.selectModel(estimatedTokens);
162
+
163
+ const cheapCost = this.getModelCost(decision.targetModel) * estimatedTokens / 1_000_000;
164
+ const expensiveCost = this.getModelCost("gpt-4-turbo") * estimatedTokens / 1_000_000;
165
+
166
+ const savingsPercent = expensiveCost > 0
167
+ ? ((expensiveCost - cheapCost) / expensiveCost) * 100
168
+ : 0;
169
+
170
+ return {
171
+ savingsPercent: Math.round(savingsPercent * 100) / 100,
172
+ cheapModel: decision.targetModel,
173
+ expensiveModel: "gpt-4-turbo",
174
+ };
175
+ }
176
+
177
+ /**
178
+ * Get model cost per 1M tokens
179
+ */
180
+ getModelCost(model: string): number {
181
+ return MODEL_COSTS[model.toLowerCase()] ?? 1.0;
182
+ }
183
+
184
+ /**
185
+ * Get all configured thresholds
186
+ */
187
+ getThresholds(): TokenThreshold[] {
188
+ return this.config.thresholds;
189
+ }
190
+ }
191
+
192
+ export default TokenAwareFallback;
@@ -0,0 +1,21 @@
1
+ // Smoke test: package compiles, core exports + tokenOptimization module load
2
+ const assert = require("assert");
3
+
4
+ const mod = require("../dist/index.js");
5
+
6
+ // Core exports exist
7
+ for (const name of ["createTMLPD", "TMLPDTools", "ResponseCache", "CostTracker", "ProviderRegistry"]) {
8
+ assert(name in mod, `missing core export: ${name}`);
9
+ }
10
+
11
+ // tokenOptimization sub-module loads (added v1.3.2)
12
+ const to = require("../dist/tokenOptimization/index.js");
13
+ for (const name of ["SemanticCache", "ContextStratifier", "TokenAwareFallback", "SchemaContractor", "FetchOnceProcessor"]) {
14
+ assert(name in to, `missing tokenOptimization export: ${name}`);
15
+ }
16
+
17
+ // SemanticCache basic behavior
18
+ const cache = new to.SemanticCache({ maxEntries: 10 });
19
+ assert(typeof cache.get === "function" && typeof cache.set === "function", "SemanticCache API broken");
20
+
21
+ console.log("✓ smoke test passed — dist loads, tokenOptimization exports verified");
@@ -13,8 +13,7 @@
13
13
  "sourceMap": true,
14
14
  "types": ["node"],
15
15
  "resolveJsonModule": true,
16
- "moduleResolution": "node",
17
- "ignoreDeprecations": "6.0"
16
+ "moduleResolution": "node"
18
17
  },
19
18
  "include": ["src/**/*"],
20
19
  "exclude": [
@@ -22,7 +21,9 @@
22
21
  "dist",
23
22
  "src/skills/__tests__",
24
23
  "src/cli/setupWizard.ts",
24
+ "src/cli/tui.ts",
25
25
  "src/integrations/langchainAdapter.ts",
26
+ "src/tui/dashboard.ts",
26
27
  "src/tui/index.ts",
27
28
  "src/benchmark/comprehensive.ts"
28
29
  ]
@@ -1,12 +0,0 @@
1
- /**
2
- * A3M Router Language Model for Vercel AI SDK (v3)
3
- *
4
- * Implements the LanguageModelV1 interface from @ai-sdk/provider
5
- */
6
- import { LanguageModelV1 } from '@ai-sdk/provider';
7
- import type { A3MRouterConfig } from './types';
8
- /**
9
- * Create an A3M Router Language Model for Vercel AI SDK
10
- */
11
- export declare function createA3MLanguageModel(config?: A3MRouterConfig): LanguageModelV1;
12
- //# sourceMappingURL=a3m-language-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a3m-language-model.d.ts","sourceRoot":"","sources":["../src/a3m-language-model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EAOhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA6C/C;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,eAAoB,mBA6TlE"}
@@ -1,289 +0,0 @@
1
- /**
2
- * A3M Router Language Model for Vercel AI SDK (v3)
3
- *
4
- * Implements the LanguageModelV1 interface from @ai-sdk/provider
5
- */
6
- /**
7
- * Convert Vercel AI SDK prompt format to OpenAI format for A3M
8
- */
9
- function convertMessages(prompt) {
10
- const result = [];
11
- // Handle string prompts
12
- if (typeof prompt === 'string') {
13
- return [{ role: 'user', content: prompt }];
14
- }
15
- // messages is an array of prompt parts
16
- for (const part of prompt) {
17
- if (part.role === 'system') {
18
- result.push({ role: 'system', content: part.content });
19
- }
20
- else if (part.role === 'user') {
21
- if (typeof part.content === 'string') {
22
- result.push({ role: 'user', content: part.content });
23
- }
24
- else if (Array.isArray(part.content)) {
25
- const textContent = part.content
26
- .filter((p) => p.type === 'text')
27
- .map(p => p.text)
28
- .join('\n');
29
- result.push({ role: 'user', content: textContent });
30
- }
31
- }
32
- else if (part.role === 'assistant') {
33
- if (typeof part.content === 'string') {
34
- result.push({ role: 'assistant', content: part.content });
35
- }
36
- else if (Array.isArray(part.content)) {
37
- const textContent = part.content
38
- .filter((p) => p.type === 'text')
39
- .map(p => p.text)
40
- .join('\n');
41
- result.push({ role: 'assistant', content: textContent });
42
- }
43
- }
44
- }
45
- return result;
46
- }
47
- /**
48
- * Create an A3M Router Language Model for Vercel AI SDK
49
- */
50
- export function createA3MLanguageModel(config = {}) {
51
- const baseURL = config.baseURL || 'http://localhost:8787';
52
- const apiKey = config.apiKey || 'not-needed';
53
- const model = {
54
- specificationVersion: 'v1',
55
- provider: 'a3m',
56
- modelId: 'auto',
57
- defaultObjectGenerationMode: undefined,
58
- async doGenerate(options) {
59
- const messages = convertMessages(options.prompt);
60
- // Extract system prompt if present
61
- const systemMessages = messages.filter(m => m.role === 'system');
62
- const nonSystemMessages = messages.filter(m => m.role !== 'system');
63
- const system = systemMessages.map(m => m.content).join('\n');
64
- // Build the request body for A3M
65
- const requestBody = {
66
- model: 'auto',
67
- messages: nonSystemMessages.length > 0 ? nonSystemMessages : [{ role: 'user', content: ' ' }],
68
- };
69
- if (system) {
70
- requestBody.system = system;
71
- }
72
- if (options.temperature !== undefined) {
73
- requestBody.temperature = options.temperature;
74
- }
75
- if (options.maxTokens !== undefined) {
76
- requestBody.max_tokens = options.maxTokens;
77
- }
78
- if (options.topP !== undefined) {
79
- requestBody.top_p = options.topP;
80
- }
81
- if (options.stopSequences !== undefined) {
82
- requestBody.stop = options.stopSequences;
83
- }
84
- if (config.parallelEnsemble) {
85
- requestBody.parallel = config.parallelCount || 3;
86
- }
87
- if (config.stealth) {
88
- requestBody.stealth = true;
89
- }
90
- try {
91
- // Call A3M Router
92
- const response = await fetch(`${baseURL}/v1/chat/completions`, {
93
- method: 'POST',
94
- headers: {
95
- 'Content-Type': 'application/json',
96
- 'Authorization': `Bearer ${apiKey}`,
97
- },
98
- body: JSON.stringify(requestBody),
99
- });
100
- if (!response.ok) {
101
- const error = await response.text();
102
- throw new Error(`A3M Router error: ${response.status} ${error}`);
103
- }
104
- const data = await response.json();
105
- const choice = data.choices[0];
106
- return {
107
- text: choice.message.content || undefined,
108
- toolCalls: choice.message.tool_calls?.map(tc => ({
109
- toolCallType: 'function',
110
- toolCallId: tc.id,
111
- toolName: tc.function.name,
112
- args: tc.function.arguments,
113
- })),
114
- finishReason: choice.finish_reason || 'stop',
115
- usage: {
116
- promptTokens: data.usage?.prompt_tokens || 0,
117
- completionTokens: data.usage?.completion_tokens || 0,
118
- totalTokens: data.usage?.total_tokens || 0,
119
- },
120
- rawCall: {
121
- rawPrompt: messages,
122
- rawSettings: requestBody,
123
- },
124
- providerMetadata: data._meta ? {
125
- a3m: {
126
- provider: data._meta.provider,
127
- cost: data._meta.cost,
128
- },
129
- } : undefined,
130
- };
131
- }
132
- catch (error) {
133
- throw new Error(`A3M Router generation failed: ${error instanceof Error ? error.message : String(error)}`);
134
- }
135
- },
136
- doStream(options) {
137
- const messages = convertMessages(options.prompt);
138
- // Extract system prompt if present
139
- const systemMessages = messages.filter(m => m.role === 'system');
140
- const nonSystemMessages = messages.filter(m => m.role !== 'system');
141
- const system = systemMessages.map(m => m.content).join('\n');
142
- const requestBody = {
143
- model: 'auto',
144
- messages: nonSystemMessages.length > 0 ? nonSystemMessages : [{ role: 'user', content: ' ' }],
145
- stream: true,
146
- };
147
- if (system) {
148
- requestBody.system = system;
149
- }
150
- if (options.temperature !== undefined) {
151
- requestBody.temperature = options.temperature;
152
- }
153
- if (options.maxTokens !== undefined) {
154
- requestBody.max_tokens = options.maxTokens;
155
- }
156
- if (config.parallelEnsemble) {
157
- requestBody.parallel = config.parallelCount || 3;
158
- }
159
- if (config.stealth) {
160
- requestBody.stealth = true;
161
- }
162
- let attemptCount = 0;
163
- const maxAttempts = 3;
164
- const doStream = async () => {
165
- attemptCount++;
166
- try {
167
- const response = await fetch(`${baseURL}/v1/chat/completions`, {
168
- method: 'POST',
169
- headers: {
170
- 'Content-Type': 'application/json',
171
- 'Authorization': `Bearer ${apiKey}`,
172
- },
173
- body: JSON.stringify(requestBody),
174
- });
175
- if (!response.ok) {
176
- const error = await response.text();
177
- throw new Error(`A3M Router streaming error: ${response.status} ${error}`);
178
- }
179
- if (!response.body) {
180
- throw new Error('A3M Router: no response body');
181
- }
182
- const stream = new ReadableStream({
183
- async start(controller) {
184
- const reader = response.body.getReader();
185
- const decoder = new TextDecoder();
186
- let buffer = '';
187
- try {
188
- while (true) {
189
- const { done, value } = await reader.read();
190
- if (done) {
191
- controller.close();
192
- break;
193
- }
194
- buffer += decoder.decode(value, { stream: true });
195
- const lines = buffer.split('\n');
196
- buffer = lines.pop() || '';
197
- for (const line of lines) {
198
- if (line.startsWith('data: ')) {
199
- const data = line.slice(6);
200
- if (data === '[DONE]') {
201
- controller.close();
202
- return;
203
- }
204
- try {
205
- const parsed = JSON.parse(data);
206
- // Handle chat completion chunks
207
- if (parsed.choices?.[0]?.delta?.content) {
208
- const chunk = parsed.choices[0].delta.content;
209
- controller.enqueue({
210
- type: 'text-delta',
211
- textDelta: chunk,
212
- });
213
- }
214
- // Handle tool call start
215
- if (parsed.choices?.[0]?.delta?.tool_calls?.[0]) {
216
- const toolCall = parsed.choices[0].delta.tool_calls[0];
217
- if (toolCall.id) {
218
- controller.enqueue({
219
- type: 'tool-call',
220
- toolCallType: 'function',
221
- toolCallId: toolCall.id,
222
- toolName: toolCall.function?.name || '',
223
- args: toolCall.function?.arguments || '',
224
- });
225
- }
226
- }
227
- // Handle tool call delta
228
- if (parsed.choices?.[0]?.delta?.tool_calls?.[0]?.function?.arguments) {
229
- const argsDelta = parsed.choices[0].delta.tool_calls[0].function.arguments;
230
- if (argsDelta) {
231
- controller.enqueue({
232
- type: 'tool-call-delta',
233
- toolCallType: 'function',
234
- toolCallId: parsed.choices[0].delta.tool_calls[0].id,
235
- toolName: parsed.choices[0].delta.tool_calls[0].function?.name || '',
236
- argsTextDelta: argsDelta,
237
- });
238
- }
239
- }
240
- // Handle finish
241
- if (parsed.choices?.[0]?.finish_reason) {
242
- controller.enqueue({
243
- type: 'finish',
244
- finishReason: parsed.choices[0].finish_reason,
245
- usage: {
246
- promptTokens: parsed.usage?.prompt_tokens || 0,
247
- completionTokens: parsed.usage?.completion_tokens || 0,
248
- },
249
- });
250
- }
251
- }
252
- catch {
253
- // Skip malformed JSON
254
- }
255
- }
256
- }
257
- }
258
- }
259
- catch (streamError) {
260
- controller.error(streamError);
261
- }
262
- },
263
- });
264
- return {
265
- stream,
266
- rawCall: {
267
- rawPrompt: messages,
268
- rawSettings: requestBody,
269
- },
270
- };
271
- }
272
- catch (error) {
273
- if (attemptCount < maxAttempts) {
274
- await new Promise(resolve => setTimeout(resolve, 1000 * attemptCount));
275
- return doStream();
276
- }
277
- throw error;
278
- }
279
- };
280
- return new Promise((resolve, reject) => {
281
- doStream()
282
- .then(resolve)
283
- .catch(reject);
284
- });
285
- },
286
- };
287
- return model;
288
- }
289
- //# sourceMappingURL=a3m-language-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a3m-language-model.js","sourceRoot":"","sources":["../src/a3m-language-model.ts"],"names":[],"mappings":"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"}
@@ -1,82 +0,0 @@
1
- /**
2
- * @a3m/vercel-ai - A3M Router Provider for Vercel AI SDK
3
- *
4
- * Drop-in replacement that routes to the cheapest capable provider
5
- * with parallel execution, caching, and automatic fallback.
6
- *
7
- * @example
8
- * ```typescript
9
- * import { createA3MProvider } from '@a3m/vercel-ai';
10
- * import { generateText } from 'ai';
11
- *
12
- * const a3m = createA3MProvider();
13
- *
14
- * const { text } = await generateText({
15
- * model: a3m('auto'),
16
- * prompt: 'What is the capital of France?',
17
- * });
18
- * ```
19
- */
20
- export type { A3MRouterConfig, A3MRouteResponse, A3MStreamChunk } from './types';
21
- export { createA3MLanguageModel } from './a3m-language-model';
22
- import type { LanguageModelV1 } from '@ai-sdk/provider';
23
- import type { A3MRouterConfig } from './types';
24
- /**
25
- * A3M Router provider for Vercel AI SDK
26
- */
27
- export interface A3MProvider {
28
- name: 'a3m';
29
- /**
30
- * Returns an A3M language model.
31
- *
32
- * @param modelId - Use 'auto' for automatic routing, or specify a model like 'gpt-4', 'claude-3', etc.
33
- */
34
- (modelId: string): LanguageModelV1;
35
- }
36
- /**
37
- * Create an A3M Router provider for Vercel AI SDK
38
- */
39
- export declare function createA3MProvider(config?: A3MRouterConfig): A3MProvider;
40
- /**
41
- * Example usage with Next.js App Router
42
- *
43
- * ```typescript
44
- * // app/api/chat/route.ts
45
- * import { createA3MProvider } from '@a3m/vercel-ai';
46
- * import { generateText } from 'ai';
47
- *
48
- * const a3m = createA3MProvider({
49
- * parallelEnsemble: true,
50
- * });
51
- *
52
- * export async function POST(req: Request) {
53
- * const { messages } = await req.json();
54
- *
55
- * const result = await generateText({
56
- * model: a3m('auto'),
57
- * messages,
58
- * });
59
- *
60
- * return Response.json(result);
61
- * }
62
- * ```
63
- */
64
- /**
65
- * Example usage with streaming
66
- *
67
- * ```typescript
68
- * import { createA3MProvider } from '@a3m/vercel-ai';
69
- * import { streamText } from 'ai';
70
- *
71
- * const a3m = createA3MProvider();
72
- *
73
- * const result = await streamText({
74
- * model: a3m('auto'),
75
- * prompt: 'Write a story about a robot...',
76
- * });
77
- *
78
- * // Stream to response
79
- * return result.toDataStreamResponse();
80
- * ```
81
- */
82
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ;;;;OAIG;IACH,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,eAAoB,GAAG,WAAW,CAgB3E;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;;;;;;;;;GAiBG"}