adaptive-memory-multi-model-router 2.16.0 → 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.
Files changed (245) 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.js +96 -67
  38. package/dist/cli.js +9 -0
  39. package/dist/cost/budgetEnforcer.d.ts.map +1 -1
  40. package/dist/cost/costTracker.d.ts.map +1 -1
  41. package/dist/ensemble/multiRoundDialog.d.ts.map +1 -1
  42. package/dist/ensemble/shapleyValue.d.ts.map +1 -1
  43. package/dist/ensemble.d.ts +1 -1
  44. package/dist/ensemble.js +141 -0
  45. package/dist/integrations/langchainAdapter.d.ts.map +1 -1
  46. package/dist/integrations/langchainAdapter.js +3 -3
  47. package/dist/integrations/langchainAdapter.js.map +1 -1
  48. package/dist/integrations/oauth.d.ts.map +1 -1
  49. package/dist/integrations/scienceAdapter.d.ts.map +1 -1
  50. package/dist/memory/autoFetch.d.ts.map +1 -1
  51. package/dist/memory/hybridMemory.d.ts.map +1 -1
  52. package/dist/memory/memoryTree.d.ts.map +1 -1
  53. package/dist/memory/obsidianVault.d.ts.map +1 -1
  54. package/dist/memory/reasoningBank.d.ts.map +1 -1
  55. package/dist/observability/metrics.d.ts.map +1 -1
  56. package/dist/observability/tracer.d.ts.map +1 -1
  57. package/dist/providers/providerConfig.d.ts.map +1 -1
  58. package/dist/providers/providerConfig.js +32 -17
  59. package/dist/providers/providerConfig.js.map +1 -1
  60. package/dist/routing/advancedRouter.d.ts.map +1 -1
  61. package/dist/routing/advancedRouter.js +106 -14
  62. package/dist/routing/advancedRouter.js.map +1 -1
  63. package/dist/routing/providerHealth.d.ts.map +1 -1
  64. package/dist/routing/providerRetry.d.ts.map +1 -1
  65. package/dist/routing/shadowSampler.js.map +1 -1
  66. package/dist/security/guardrails.d.ts.map +1 -1
  67. package/dist/server/handlers/chatHandler.d.ts.map +1 -1
  68. package/dist/server/handlers/completionsHandler.d.ts.map +1 -1
  69. package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -1
  70. package/dist/server/handlers/healthHandler.d.ts.map +1 -1
  71. package/dist/server/handlers/metricsHandler.d.ts.map +1 -1
  72. package/dist/server/handlers/modelsHandler.d.ts.map +1 -1
  73. package/dist/server/metrics.d.ts.map +1 -1
  74. package/dist/server/proxyServer.d.ts.map +1 -1
  75. package/dist/server/router.d.ts.map +1 -1
  76. package/dist/server/state.d.ts.map +1 -1
  77. package/dist/skills/__tests__/skill_manager.test.js +5 -265
  78. package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
  79. package/dist/utils/tokenUtils.d.ts.map +1 -1
  80. package/docker-compose.yml +84 -60
  81. package/docs/ARTICLE_Biology_Inspired_Routing.md +208 -0
  82. package/docs/ARTICLE_Master.md +78 -0
  83. package/docs/ARTICLE_Master_CN.md +78 -0
  84. package/docs/ARTICLE_OpenRouter_Stripe.md +140 -0
  85. package/docs/DEVPTO_ARTICLE.md +84 -0
  86. package/docs/HUMAN_STYLE_GUIDE.md +75 -0
  87. package/docs/IMPRINT_PLAN.md +88 -0
  88. package/docs/OPENROUTER_ALTERNATIVE.md +184 -0
  89. package/docs/SOCIAL_CAMPAIGN.md +316 -0
  90. package/docs/anthropic.html +45 -0
  91. package/docs/best-llm-routers-2025.html +157 -0
  92. package/docs/cerebras.html +43 -0
  93. package/docs/cli-cheatsheet.md +286 -212
  94. package/docs/comparison.md +2 -2
  95. package/docs/deepseek.html +44 -0
  96. package/docs/google.html +47 -0
  97. package/docs/groq.html +44 -0
  98. package/docs/llms-full.txt +360 -138
  99. package/docs/llms.txt +70 -71
  100. package/docs/mistral.html +43 -0
  101. package/docs/ollama.html +50 -0
  102. package/docs/openai.html +57 -0
  103. package/docs/sitemap.xml +69 -57
  104. package/docs-site/blog/best-llm-routers-2025.html +157 -0
  105. package/docs-site/index.html +68 -9
  106. package/docs-site/providers/anthropic.html +45 -0
  107. package/docs-site/providers/cerebras.html +43 -0
  108. package/docs-site/providers/deepseek.html +44 -0
  109. package/docs-site/providers/google.html +47 -0
  110. package/docs-site/providers/groq.html +44 -0
  111. package/docs-site/providers/index.html +41 -0
  112. package/docs-site/providers/mistral.html +43 -0
  113. package/docs-site/providers/ollama.html +50 -0
  114. package/docs-site/providers/openai.html +57 -0
  115. package/docs-site/sitemap.xml +69 -0
  116. package/llms.txt +70 -62
  117. package/package.json +44 -182
  118. package/packages/agentkit-adapter/LICENSE +21 -0
  119. package/packages/agentkit-adapter/README.md +126 -0
  120. package/packages/agentkit-adapter/examples/agentkit-example.ts +139 -0
  121. package/packages/agentkit-adapter/package.json +57 -0
  122. package/packages/agentkit-adapter/src/adapter.ts +381 -0
  123. package/packages/agentkit-adapter/src/index.ts +36 -0
  124. package/packages/agentkit-adapter/src/types.ts +105 -0
  125. package/packages/agentkit-adapter/src/util.ts +13 -0
  126. package/packages/agentkit-adapter/tsconfig.json +22 -0
  127. package/prometheus.yml +8 -0
  128. package/python/README.md +35 -81
  129. package/python/a3m/__init__.py +32 -3
  130. package/python/a3m/adapters/__init__.py +21 -0
  131. package/python/a3m/adapters/langchain.py +190 -0
  132. package/python/a3m/adapters/llamaindex.py +249 -0
  133. package/python/a3m/adapters/qdrant.py +240 -0
  134. package/python/a3m/adapters/weaviate.py +263 -0
  135. package/python/a3m/client.py +5 -0
  136. package/python/build_verify.sh +32 -0
  137. package/python/mcp-server/README.md +172 -0
  138. package/python/mcp-server/a3m_mcp/__init__.py +25 -0
  139. package/python/mcp-server/a3m_mcp/__main__.py +15 -0
  140. package/python/mcp-server/a3m_mcp/server.py +205 -0
  141. package/python/mcp-server/pyproject.toml +24 -0
  142. package/python/pyproject.toml +60 -6
  143. package/python/setup.py +3 -28
  144. package/scripts/submit-sitemap.sh +52 -0
  145. package/src/__types__/registry.d.ts +14 -0
  146. package/src/cli/setupWizard.ts +443 -112
  147. package/src/cli/tui.ts +159 -0
  148. package/src/ensemble.ts +154 -1
  149. package/src/integrations/langchainAdapter.ts +2 -2
  150. package/src/providers/providerConfig.ts +32 -17
  151. package/src/providers/registry.js +27 -0
  152. package/src/routing/advancedRouter.ts +99 -14
  153. package/src/routing/shadowSampler.ts +1 -1
  154. package/test-install/package.json +12 -0
  155. package/tests/tsconfig.json +0 -1
  156. package/tmlpd-pi-extension/README.md +105 -44
  157. package/tmlpd-pi-extension/docs/demo.svg +33 -0
  158. package/tmlpd-pi-extension/package.json +35 -106
  159. package/tmlpd-pi-extension/src/tokenOptimization/contextStratifier.ts +163 -0
  160. package/tmlpd-pi-extension/src/tokenOptimization/fetchOnceLocal.ts +136 -0
  161. package/tmlpd-pi-extension/src/tokenOptimization/index.ts +197 -0
  162. package/tmlpd-pi-extension/src/tokenOptimization/interAgentCompression.ts +157 -0
  163. package/tmlpd-pi-extension/src/tokenOptimization/schemaContract.ts +101 -0
  164. package/tmlpd-pi-extension/src/tokenOptimization/semanticCache.ts +248 -0
  165. package/tmlpd-pi-extension/src/tokenOptimization/tokenAwareFallback.ts +192 -0
  166. package/tmlpd-pi-extension/test/verify.js +21 -0
  167. package/tsconfig.build.json +3 -2
  168. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts +0 -12
  169. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts.map +0 -1
  170. package/packages/a3m-vercel-ai/dist/a3m-language-model.js +0 -289
  171. package/packages/a3m-vercel-ai/dist/a3m-language-model.js.map +0 -1
  172. package/packages/a3m-vercel-ai/dist/index.d.ts +0 -82
  173. package/packages/a3m-vercel-ai/dist/index.d.ts.map +0 -1
  174. package/packages/a3m-vercel-ai/dist/index.js +0 -79
  175. package/packages/a3m-vercel-ai/dist/index.js.map +0 -1
  176. package/packages/a3m-vercel-ai/dist/types.d.ts +0 -97
  177. package/packages/a3m-vercel-ai/dist/types.d.ts.map +0 -1
  178. package/packages/a3m-vercel-ai/dist/types.js +0 -5
  179. package/packages/a3m-vercel-ai/dist/types.js.map +0 -1
  180. package/src/skills/__tests__/skill_manager.test.ts +0 -328
  181. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
  182. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
  183. package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
  184. package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
  185. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
  186. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
  187. package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
  188. package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
  189. package/tmlpd-pi-extension/dist/cli.js +0 -59
  190. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
  191. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
  192. package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
  193. package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
  194. package/tmlpd-pi-extension/dist/index.d.ts +0 -723
  195. package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
  196. package/tmlpd-pi-extension/dist/index.js +0 -239
  197. package/tmlpd-pi-extension/dist/index.js.map +0 -1
  198. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
  199. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
  200. package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
  201. package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
  202. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
  203. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
  204. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
  205. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
  206. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
  207. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
  208. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
  209. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
  210. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
  211. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
  212. package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
  213. package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
  214. package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
  215. package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
  216. package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
  217. package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
  218. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
  219. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
  220. package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
  221. package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
  222. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
  223. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
  224. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
  225. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
  226. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
  227. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
  228. package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
  229. package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
  230. package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
  231. package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
  232. package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
  233. package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
  234. package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
  235. package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
  236. package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
  237. package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
  238. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
  239. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
  240. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
  241. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
  242. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
  243. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
  244. package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
  245. 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"}