adaptive-memory-multi-model-router 2.15.4 → 2.16.0

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 (129) hide show
  1. package/AGENT_COUNCIL_FINDINGS.md +123 -98
  2. package/CAMPAIGN_SUMMARY.md +87 -0
  3. package/CHANGELOG.md +7 -1
  4. package/ENTERPRISE_INTEGRATIONS.md +94 -0
  5. package/INTEGRATION_PROGRESS.md +96 -0
  6. package/OPPORTUNITIES_100.md +277 -0
  7. package/POPULARITY_BOOSTERS.md +1 -1
  8. package/README.md +147 -275
  9. package/README_ja.md +17 -21
  10. package/README_zh.md +13 -17
  11. package/TODO_BROWSER_AUTOMATION.md +87 -0
  12. package/a3m-integrations-summary.md +73 -0
  13. package/apps/cost-calculator/README.md +72 -0
  14. package/apps/cost-calculator/calculator.css +280 -0
  15. package/apps/cost-calculator/calculator.js +150 -0
  16. package/apps/cost-calculator/index.html +321 -0
  17. package/apps/cost-calculator/package.json +13 -0
  18. package/articles/ANNOUNCEMENT_reddit_ml.md +76 -0
  19. package/articles/ANNOUNCEMENT_vc/347/244/276/345/214/272.md +71 -0
  20. package/articles/ANNOUNCEMENT_vercel.md +85 -0
  21. package/articles/CHINESE_DIRECTORIES.md +2 -2
  22. package/articles/CHINESE_SUBMISSIONS_READY.md +5 -5
  23. package/articles/HN_POST_READY.md +16 -20
  24. package/articles/INDIEHACKERS_READY.md +19 -34
  25. package/dist/analytics/costAnalytics.d.ts +0 -1
  26. package/dist/benchmark/reproducible.d.ts +0 -1
  27. package/dist/cache/semanticCache.d.ts +0 -1
  28. package/dist/cost/budgetEnforcer.d.ts +0 -1
  29. package/dist/cost/costTracker.d.ts +0 -1
  30. package/dist/ensemble/multiRoundDialog.d.ts +0 -1
  31. package/dist/ensemble/shapleyValue.d.ts +0 -1
  32. package/dist/ensemble.d.ts +0 -1
  33. package/dist/index.d.ts +0 -1
  34. package/dist/integrations/oauth.d.ts +0 -1
  35. package/dist/integrations/scienceAdapter.d.ts +0 -1
  36. package/dist/memory/autoFetch.d.ts +0 -1
  37. package/dist/memory/hybridMemory.d.ts +0 -1
  38. package/dist/memory/memoryTree.d.ts +0 -1
  39. package/dist/memory/obsidianVault.d.ts +0 -1
  40. package/dist/memory/reasoningBank.d.ts +0 -1
  41. package/dist/observability/changeWatch.d.ts +0 -1
  42. package/dist/observability/fatigueDetector.d.ts +0 -1
  43. package/dist/observability/index.d.ts +0 -1
  44. package/dist/observability/metrics.d.ts +0 -1
  45. package/dist/observability/middleware.d.ts +0 -1
  46. package/dist/observability/tracer.d.ts +0 -1
  47. package/dist/observability/types.d.ts +0 -1
  48. package/dist/providers/providerConfig.d.ts +5 -2
  49. package/dist/providers/providerConfig.js +1006 -1
  50. package/dist/providers/providerConfig.js.map +1 -1
  51. package/dist/routing/advancedRouter.d.ts +1 -2
  52. package/dist/routing/advancedRouter.js +84 -0
  53. package/dist/routing/advancedRouter.js.map +1 -1
  54. package/dist/routing/crossModelValidation.d.ts +0 -1
  55. package/dist/routing/providerHealth.d.ts +77 -2
  56. package/dist/routing/providerHealth.js +190 -4
  57. package/dist/routing/providerHealth.js.map +1 -1
  58. package/dist/routing/providerRetry.d.ts +0 -1
  59. package/dist/routing/shadowSampler.d.ts +187 -0
  60. package/dist/routing/shadowSampler.js +306 -0
  61. package/dist/routing/shadowSampler.js.map +1 -0
  62. package/dist/sdk.d.ts +0 -1
  63. package/dist/security/guardrails.d.ts +0 -1
  64. package/dist/server/dashboard.d.ts +0 -1
  65. package/dist/server/handlers/chatHandler.d.ts +0 -1
  66. package/dist/server/handlers/completionsHandler.d.ts +0 -1
  67. package/dist/server/handlers/embeddingsHandler.d.ts +0 -1
  68. package/dist/server/handlers/healthHandler.d.ts +0 -1
  69. package/dist/server/handlers/metricsHandler.d.ts +0 -1
  70. package/dist/server/handlers/modelsHandler.d.ts +0 -1
  71. package/dist/server/metrics.d.ts +0 -1
  72. package/dist/server/modelMapper.d.ts +0 -1
  73. package/dist/server/proxyServer.d.ts +0 -1
  74. package/dist/server/router.d.ts +0 -1
  75. package/dist/server/state.d.ts +0 -1
  76. package/dist/tui/dashboard.d.ts +0 -1
  77. package/dist/utils/costUtils.d.ts +0 -1
  78. package/dist/utils/sorting.d.ts +0 -1
  79. package/dist/utils/tokenUtils.d.ts +0 -1
  80. package/docs/llms-full.txt +153 -286
  81. package/docs/llms.txt +71 -112
  82. package/integrations/browser-use/README.md +155 -0
  83. package/integrations/browser-use/examples/form-filling.ts +179 -0
  84. package/integrations/browser-use/index.ts +145 -0
  85. package/integrations/browser-use/package.json +34 -0
  86. package/integrations/browser-use/tsconfig.json +17 -0
  87. package/integrations/mcp-browser/README.md +177 -0
  88. package/integrations/mcp-browser/package.json +38 -0
  89. package/integrations/mcp-browser/src/index.ts +297 -0
  90. package/integrations/sota-browser/README.md +191 -0
  91. package/integrations/sota-browser/package.json +34 -0
  92. package/llms-full.txt +6 -6
  93. package/llms.txt +62 -112
  94. package/package.json +92 -13
  95. package/packages/a3m-vercel-ai/README.md +161 -0
  96. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts +12 -0
  97. package/packages/a3m-vercel-ai/dist/a3m-language-model.d.ts.map +1 -0
  98. package/packages/a3m-vercel-ai/dist/a3m-language-model.js +289 -0
  99. package/packages/a3m-vercel-ai/dist/a3m-language-model.js.map +1 -0
  100. package/packages/a3m-vercel-ai/dist/index.d.ts +82 -0
  101. package/packages/a3m-vercel-ai/dist/index.d.ts.map +1 -0
  102. package/packages/a3m-vercel-ai/dist/index.js +79 -0
  103. package/packages/a3m-vercel-ai/dist/index.js.map +1 -0
  104. package/packages/a3m-vercel-ai/dist/types.d.ts +97 -0
  105. package/packages/a3m-vercel-ai/dist/types.d.ts.map +1 -0
  106. package/packages/a3m-vercel-ai/dist/types.js +5 -0
  107. package/packages/a3m-vercel-ai/dist/types.js.map +1 -0
  108. package/packages/a3m-vercel-ai/package-lock.json +969 -0
  109. package/packages/a3m-vercel-ai/package.json +46 -0
  110. package/packages/a3m-vercel-ai/src/a3m-language-model.ts +381 -0
  111. package/packages/a3m-vercel-ai/src/index.ts +104 -0
  112. package/packages/a3m-vercel-ai/src/types.ts +116 -0
  113. package/packages/a3m-vercel-ai/tsconfig.json +20 -0
  114. package/src/providers/providerConfig.ts +1053 -1
  115. package/summary.txt +38 -0
  116. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -94
  117. package/.github/ISSUE_TEMPLATE/config.yml +0 -17
  118. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -71
  119. package/.well-known/ai-plugin.json +0 -16
  120. package/adapters/README.md +0 -36
  121. package/adapters/__init__.py +0 -25
  122. package/adapters/a3m_adapter/__init__.py +0 -15
  123. package/adapters/a3m_adapter/adapter/__init__.py +0 -7
  124. package/adapters/a3m_adapter/adapter/config.py +0 -100
  125. package/adapters/a3m_adapter/adapter/langchain.py +0 -155
  126. package/adapters/a3m_adapter/adapter/llamaindex.py +0 -162
  127. package/adapters/a3m_adapter/tests/__init__.py +0 -1
  128. package/adapters/a3m_adapter/tests/test_adapters.py +0 -120
  129. package/adapters/setup.py +0 -23
@@ -0,0 +1,161 @@
1
+ # a3m-vercel-ai
2
+
3
+ **A3M Router provider for Vercel AI SDK** — intelligent cost-based routing with parallel execution, automatic fallback, and 60%+ cost savings.
4
+
5
+ ## Features
6
+
7
+ - 🔀 **Automatic Model Selection** — Routes to the cheapest capable provider automatically
8
+ - ⚡ **Parallel Ensemble** — Runs multiple providers simultaneously, picks the best result
9
+ - 💰 **60%+ Cost Savings** — Routes simple queries to free/cheap providers automatically
10
+ - 🔄 **Automatic Fallback** — If primary provider fails, routes to next best option
11
+ - 🛡️ **Circuit Breakers** — Skips degraded providers automatically
12
+ - 📊 **Cost Tracking** — Per-request cost visibility in response metadata
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install a3m-vercel-ai ai
18
+ ```
19
+
20
+ ## Quick Start
21
+
22
+ ```typescript
23
+ import { createA3MProvider } from 'a3m-vercel-ai';
24
+ import { generateText } from 'ai';
25
+
26
+ const a3m = createA3MProvider();
27
+
28
+ const result = await generateText({
29
+ model: a3m('auto'),
30
+ prompt: 'What is the capital of France?',
31
+ });
32
+
33
+ console.log(result.text);
34
+ // A3M automatically routes to the cheapest capable provider
35
+ ```
36
+
37
+ ## Configuration
38
+
39
+ ```typescript
40
+ const a3m = createA3MProvider({
41
+ // A3M Router endpoint (default: http://localhost:8787)
42
+ baseURL: process.env.A3M_ROUTER_URL || 'http://localhost:8787',
43
+
44
+ // API key (default: 'not-needed' for local)
45
+ apiKey: process.env.A3M_API_KEY,
46
+
47
+ // Enable parallel ensemble execution
48
+ parallelEnsemble: true,
49
+
50
+ // Number of providers to run in parallel (default: 3)
51
+ parallelCount: 3,
52
+
53
+ // Enable stealth mode for browser automation
54
+ stealth: false,
55
+
56
+ // Cache configuration
57
+ cache: {
58
+ enabled: true,
59
+ ttl: 3600, // 1 hour
60
+ },
61
+
62
+ // Provider API keys (if not using environment variables)
63
+ providers: {
64
+ openai: { apiKey: process.env.OPENAI_API_KEY },
65
+ anthropic: { apiKey: process.env.ANTHROPIC_API_KEY },
66
+ groq: { apiKey: process.env.GROQ_API_KEY },
67
+ },
68
+ });
69
+ ```
70
+
71
+ ## Next.js App Router Example
72
+
73
+ ```typescript
74
+ // app/api/chat/route.ts
75
+ import { createA3MProvider } from 'a3m-vercel-ai';
76
+ import { streamText } from 'ai';
77
+
78
+ const a3m = createA3MProvider({
79
+ parallelEnsemble: true,
80
+ });
81
+
82
+ export async function POST(req: Request) {
83
+ const { messages } = await req.json();
84
+
85
+ const result = await streamText({
86
+ model: a3m('auto'),
87
+ messages,
88
+ });
89
+
90
+ return result.toDataStreamResponse();
91
+ }
92
+ ```
93
+
94
+ ## Streaming Response
95
+
96
+ ```typescript
97
+ const result = await streamText({
98
+ model: a3m('auto'),
99
+ prompt: 'Write a story about a robot...',
100
+ });
101
+
102
+ // Stream to response
103
+ return result.toDataStreamResponse();
104
+
105
+ // Or accumulate and use
106
+ const { text } = await result.consumeStream();
107
+ console.log(text);
108
+ ```
109
+
110
+ ## How It Works
111
+
112
+ A3M Router analyzes each request and routes to the optimal provider:
113
+
114
+ | Request Type | Example | Routed To | Why |
115
+ |-------------|---------|-----------|-----|
116
+ | Simple Q&A | "What is 2+2?" | Groq (free) | Basic math,不需要高级模型 |
117
+ | Code generation | "Write a sorting function" | DeepSeek Coder | 专用代码模型 |
118
+ | Complex analysis | "Analyze this legal contract" | Claude 3.5 | 需要长上下文 |
119
+ | Creative writing | "Write a poem" | GPT-4o | 创意任务 |
120
+
121
+ ## Cost Savings
122
+
123
+ | Setup | Monthly Cost (100K requests) |
124
+ |-------|-------------------------------|
125
+ | GPT-4o only | $3,000 |
126
+ | Claude only | $2,500 |
127
+ | **A3M Router** | **$800** |
128
+
129
+ ## Environment Variables
130
+
131
+ Configure your provider API keys:
132
+
133
+ ```bash
134
+ # .env.local
135
+ A3M_ROUTER_URL=http://localhost:8787
136
+ OPENAI_API_KEY=sk-...
137
+ ANTHROPIC_API_KEY=sk-ant-...
138
+ GROQ_API_KEY=gsk_...
139
+ ```
140
+
141
+ ## Requirements
142
+
143
+ - Node.js 18+
144
+ - Vercel AI SDK 3.0+
145
+ - A3M Router running (or use hosted version)
146
+
147
+ ## Start A3M Router
148
+
149
+ ```bash
150
+ # Install A3M Router
151
+ npm install -g adaptive-memory-multi-model-router
152
+
153
+ # Start the router
154
+ a3m-router serve
155
+
156
+ # Router now running at http://localhost:8787
157
+ ```
158
+
159
+ ## License
160
+
161
+ MIT
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,289 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a3m-language-model.js","sourceRoot":"","sources":["../src/a3m-language-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,79 @@
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 { createA3MLanguageModel } from './a3m-language-model';
21
+ import { createA3MLanguageModel } from './a3m-language-model';
22
+ /**
23
+ * Create an A3M Router provider for Vercel AI SDK
24
+ */
25
+ export function createA3MProvider(config = {}) {
26
+ const languageModel = createA3MLanguageModel(config);
27
+ const provider = Object.assign((modelId) => {
28
+ // Return the language model - A3M handles model selection internally
29
+ return languageModel;
30
+ }, {
31
+ name: 'a3m',
32
+ // Allow accessing config for introspection
33
+ __config: config,
34
+ });
35
+ return provider;
36
+ }
37
+ /**
38
+ * Example usage with Next.js App Router
39
+ *
40
+ * ```typescript
41
+ * // app/api/chat/route.ts
42
+ * import { createA3MProvider } from '@a3m/vercel-ai';
43
+ * import { generateText } from 'ai';
44
+ *
45
+ * const a3m = createA3MProvider({
46
+ * parallelEnsemble: true,
47
+ * });
48
+ *
49
+ * export async function POST(req: Request) {
50
+ * const { messages } = await req.json();
51
+ *
52
+ * const result = await generateText({
53
+ * model: a3m('auto'),
54
+ * messages,
55
+ * });
56
+ *
57
+ * return Response.json(result);
58
+ * }
59
+ * ```
60
+ */
61
+ /**
62
+ * Example usage with streaming
63
+ *
64
+ * ```typescript
65
+ * import { createA3MProvider } from '@a3m/vercel-ai';
66
+ * import { streamText } from 'ai';
67
+ *
68
+ * const a3m = createA3MProvider();
69
+ *
70
+ * const result = await streamText({
71
+ * model: a3m('auto'),
72
+ * prompt: 'Write a story about a robot...',
73
+ * });
74
+ *
75
+ * // Stream to response
76
+ * return result.toDataStreamResponse();
77
+ * ```
78
+ */
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAe9D;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAA0B,EAAE;IAC5D,MAAM,aAAa,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAC5B,CAAC,OAAe,EAAE,EAAE;QAClB,qEAAqE;QACrE,OAAO,aAAa,CAAC;IACvB,CAAC,EACD;QACE,IAAI,EAAE,KAAc;QACpB,2CAA2C;QAC3C,QAAQ,EAAE,MAAM;KACjB,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;;;;;;;;;GAiBG"}