@ax-llm/ax-ai-sdk-provider 14.0.26 → 14.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.cjs CHANGED
@@ -119,7 +119,7 @@ var AxAgentProvider = class {
119
119
  type: "tool-call",
120
120
  toolName: this.funcInfo.name,
121
121
  toolCallId,
122
- args: input
122
+ input
123
123
  }
124
124
  ]
125
125
  },
@@ -130,7 +130,7 @@ var AxAgentProvider = class {
130
130
  type: "tool-result",
131
131
  toolName: this.funcInfo.name,
132
132
  toolCallId,
133
- result: res
133
+ output: { type: "text", value: JSON.stringify(res) }
134
134
  }
135
135
  ]
136
136
  }
@@ -141,8 +141,8 @@ var AxAgentProvider = class {
141
141
  }
142
142
  };
143
143
  var AxAIProvider = class {
144
- specificationVersion = "v1";
145
- defaultObjectGenerationMode = "json";
144
+ specificationVersion = "v2";
145
+ supportedUrls = {};
146
146
  ai;
147
147
  config;
148
148
  modelId;
@@ -155,52 +155,56 @@ var AxAIProvider = class {
155
155
  return this.ai.getName();
156
156
  }
157
157
  async doGenerate(options) {
158
- const { req, warnings } = createChatRequest(options);
158
+ const req = createChatRequest(options);
159
159
  const res = await this.ai.chat(req);
160
160
  const choice = res.results.at(0);
161
161
  if (!choice) {
162
162
  throw new Error("No choice returned");
163
163
  }
164
+ const content = [];
165
+ if (choice.content) {
166
+ content.push({ type: "text", text: choice.content });
167
+ }
168
+ if (choice.functionCalls) {
169
+ for (const tc of choice.functionCalls) {
170
+ content.push({
171
+ type: "tool-call",
172
+ toolCallId: tc.id,
173
+ toolName: tc.function.name,
174
+ input: typeof tc.function.params === "string" ? tc.function.params : JSON.stringify(tc.function.params)
175
+ });
176
+ }
177
+ }
164
178
  return {
165
- text: choice.content ?? void 0,
166
- toolCalls: choice.functionCalls?.map((tc) => ({
167
- toolCallType: "function",
168
- toolCallId: tc.id,
169
- toolName: tc.function.name,
170
- args: typeof tc.function.params === "string" ? tc.function.params : JSON.stringify(tc.function.params)
171
- })),
179
+ content,
172
180
  finishReason: mapAxFinishReason(choice.finishReason),
173
181
  usage: {
174
- promptTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
175
- completionTokens: res.modelUsage?.tokens?.completionTokens ?? 0
182
+ inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
183
+ outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,
184
+ totalTokens: (res.modelUsage?.tokens?.promptTokens ?? 0) + (res.modelUsage?.tokens?.completionTokens ?? 0)
176
185
  },
177
- rawCall: { rawPrompt: "", rawSettings: req.modelConfig ?? {} },
178
- warnings
186
+ warnings: []
179
187
  };
180
188
  }
181
189
  async doStream(options) {
182
- const { req, warnings } = createChatRequest(options);
190
+ const req = createChatRequest(options);
183
191
  const res = await this.ai.chat(req, {
184
192
  stream: true
185
193
  });
186
194
  return {
187
- stream: res.pipeThrough(new AxToSDKTransformer()),
188
- rawCall: { rawPrompt: "", rawSettings: req.modelConfig ?? {} },
189
- warnings
195
+ stream: res.pipeThrough(new AxToSDKTransformer())
190
196
  };
191
197
  }
192
198
  };
193
- function prepareToolsAndToolChoice(mode) {
194
- if (!mode.tools || mode.tools.length === 0) {
199
+ function prepareToolsAndToolChoice(tools, toolChoice) {
200
+ if (!tools || tools.length === 0) {
195
201
  return {};
196
202
  }
197
- const tools = mode.tools;
198
203
  const functions = tools.map((f) => ({
199
204
  name: f.name,
200
- description: "description" in f ? f.description ?? "" : "",
201
- parameters: f.parameters
205
+ description: f.description ?? "",
206
+ parameters: f.inputSchema
202
207
  }));
203
- const toolChoice = mode.toolChoice;
204
208
  if (!toolChoice) {
205
209
  return { functions };
206
210
  }
@@ -242,18 +246,22 @@ function convertToAxChatPrompt(prompt) {
242
246
  case "text": {
243
247
  return { type: "text", text: part.text };
244
248
  }
245
- case "image": {
246
- if (!part.mimeType) {
247
- throw new Error("Image part must have a mimeType");
249
+ case "file": {
250
+ if (!part.mediaType) {
251
+ throw new Error("File part must have a mediaType");
248
252
  }
249
- if (!ArrayBuffer.isView(part.image)) {
250
- throw new Error("Image part must have an ArrayBuffer");
253
+ let dataContent;
254
+ if (typeof part.data === "string") {
255
+ dataContent = part.data;
256
+ } else if (part.data instanceof URL) {
257
+ dataContent = part.data.toString();
258
+ } else {
259
+ dataContent = Buffer.from(part.data).toString("base64");
251
260
  }
252
- const image = Buffer.from(part.image).toString("base64");
253
261
  return {
254
262
  type: "image",
255
- mimeType: part.mimeType,
256
- image
263
+ mimeType: part.mediaType,
264
+ image: dataContent
257
265
  };
258
266
  }
259
267
  default:
@@ -278,7 +286,7 @@ function convertToAxChatPrompt(prompt) {
278
286
  type: "function",
279
287
  function: {
280
288
  name: part.toolName,
281
- params: part.args
289
+ params: typeof part.input === "string" ? JSON.parse(part.input) : part.input
282
290
  }
283
291
  });
284
292
  break;
@@ -304,7 +312,7 @@ function convertToAxChatPrompt(prompt) {
304
312
  messages.push({
305
313
  role: "function",
306
314
  functionId: part.toolCallId,
307
- result: JSON.stringify(part.result, null, 2)
315
+ result: typeof part.output === "object" && part.output?.type === "text" ? part.output.value : JSON.stringify(part.output, null, 2)
308
316
  });
309
317
  }
310
318
  break;
@@ -330,9 +338,10 @@ function mapAxFinishReason(finishReason) {
330
338
  }
331
339
  }
332
340
  function createChatRequest({
333
- mode,
341
+ tools,
342
+ toolChoice,
334
343
  prompt,
335
- maxTokens,
344
+ maxOutputTokens,
336
345
  temperature,
337
346
  topP,
338
347
  frequencyPenalty,
@@ -343,54 +352,46 @@ function createChatRequest({
343
352
  chatPrompt: convertToAxChatPrompt(prompt),
344
353
  ...frequencyPenalty != null ? { frequencyPenalty } : {},
345
354
  ...presencePenalty != null ? { presencePenalty } : {},
346
- ...maxTokens != null ? { maxTokens } : {},
355
+ ...maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {},
347
356
  ...temperature != null ? { temperature } : {},
348
357
  ...topP != null ? { topP } : {}
349
358
  };
350
- const warnings = [];
351
- switch (mode.type) {
352
- case "regular": {
353
- return {
354
- req: { ...req, ...prepareToolsAndToolChoice(mode) },
355
- warnings
356
- };
357
- }
358
- case "object-json": {
359
- return {
360
- req,
361
- warnings
362
- };
363
- }
364
- case "object-tool": {
365
- const tool = {
366
- type: "function",
367
- function: {
368
- name: mode.tool.name,
369
- params: mode.tool.parameters
370
- }
371
- };
372
- return {
373
- req: { ...req, ...tool },
374
- warnings
375
- };
376
- }
377
- default: {
378
- throw new Error("Unsupported type");
379
- }
359
+ if (tools && tools.length > 0) {
360
+ const functionTools = tools.filter(
361
+ (tool) => tool.type === "function"
362
+ );
363
+ return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };
380
364
  }
365
+ return req;
381
366
  }
382
367
  var AxToSDKTransformer = class extends import_web.TransformStream {
383
368
  usage = {
384
- promptTokens: 0,
385
- completionTokens: 0
369
+ inputTokens: 0,
370
+ outputTokens: 0,
371
+ totalTokens: 0
386
372
  };
387
373
  finishReason = "other";
388
374
  functionCalls = [];
375
+ hasStarted = false;
376
+ textStarted = false;
389
377
  constructor() {
390
378
  const transformer = {
391
379
  transform: (chunk, controller) => {
380
+ if (!this.hasStarted) {
381
+ controller.enqueue({
382
+ type: "stream-start",
383
+ warnings: []
384
+ });
385
+ this.hasStarted = true;
386
+ }
392
387
  const choice = chunk.results.at(0);
393
388
  if (!choice) {
389
+ if (this.textStarted) {
390
+ controller.enqueue({
391
+ type: "text-end",
392
+ id: "text-content"
393
+ });
394
+ }
394
395
  const val = {
395
396
  type: "finish",
396
397
  finishReason: this.finishReason,
@@ -401,8 +402,9 @@ var AxToSDKTransformer = class extends import_web.TransformStream {
401
402
  }
402
403
  if (chunk.modelUsage) {
403
404
  this.usage = {
404
- promptTokens: this.usage.promptTokens + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
405
- completionTokens: this.usage.completionTokens + (chunk.modelUsage.tokens?.completionTokens ?? 0)
405
+ inputTokens: (this.usage.inputTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
406
+ outputTokens: (this.usage.outputTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0),
407
+ totalTokens: (this.usage.totalTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0)
406
408
  };
407
409
  }
408
410
  if (choice.functionCalls) {
@@ -412,10 +414,10 @@ var AxToSDKTransformer = class extends import_web.TransformStream {
412
414
  );
413
415
  if (index === -1) {
414
416
  this.functionCalls.push({
415
- toolCallType: "function",
417
+ type: "tool-call",
416
418
  toolCallId: fc.id,
417
419
  toolName: fc.function.name,
418
- args: typeof fc.function.params === "string" ? fc.function.params : JSON.stringify(fc.function.params)
420
+ input: typeof fc.function.params === "string" ? fc.function.params : JSON.stringify(fc.function.params)
419
421
  });
420
422
  } else {
421
423
  const obj = this.functionCalls[index];
@@ -423,29 +425,39 @@ var AxToSDKTransformer = class extends import_web.TransformStream {
423
425
  continue;
424
426
  }
425
427
  if (typeof fc.function.params === "string") {
426
- obj.args = (obj.args ?? "") + fc.function.params;
428
+ obj.input = (obj.input || "") + fc.function.params;
427
429
  } else {
428
- obj.args = JSON.stringify(fc.function.params);
430
+ obj.input = JSON.stringify(fc.function.params);
429
431
  }
430
432
  }
431
433
  this.finishReason = "tool-calls";
432
434
  }
433
435
  }
434
436
  if (choice.content && choice.content.length > 0) {
437
+ if (!this.textStarted) {
438
+ controller.enqueue({
439
+ type: "text-start",
440
+ id: "text-content"
441
+ });
442
+ this.textStarted = true;
443
+ }
435
444
  controller.enqueue({
436
445
  type: "text-delta",
437
- textDelta: choice.content ?? ""
446
+ id: "text-content",
447
+ delta: choice.content ?? ""
438
448
  });
439
449
  this.finishReason = mapAxFinishReason(choice.finishReason);
440
450
  }
441
451
  },
442
452
  flush: (controller) => {
453
+ if (this.textStarted) {
454
+ controller.enqueue({
455
+ type: "text-end",
456
+ id: "text-content"
457
+ });
458
+ }
443
459
  for (const fc of this.functionCalls) {
444
- const tc = {
445
- type: "tool-call",
446
- ...fc
447
- };
448
- controller.enqueue(tc);
460
+ controller.enqueue(fc);
449
461
  }
450
462
  const val = {
451
463
  type: "finish",
package/index.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts","../provider.ts","../../../node_modules/nanoid/index.js"],"sourcesContent":["import { AxAgentProvider, AxAIProvider } from './provider.js';\n\nexport { AxAgentProvider, AxAIProvider };\n","// cspell:ignore Streamable\n\nimport {\n type ReadableStream,\n TransformStream,\n type TransformStreamDefaultController,\n} from 'node:stream/web';\nimport type {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionTool,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type {\n AxAIService,\n AxAgentic,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n} from '@ax-llm/ax/index.js';\nimport type { CoreMessage } from 'ai';\nimport { customAlphabet } from 'nanoid';\nimport type { ReactNode } from 'react';\nimport { z } from 'zod';\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\ntype AxChatRequestChatPrompt = Writeable<AxChatRequest['chatPrompt'][0]>;\n\ntype AxConfig = {\n fetch?: typeof fetch;\n};\n\ntype Streamable = ReactNode | Promise<ReactNode>;\ntype Renderer<T> = (\n args: T\n) =>\n | Streamable\n | Generator<Streamable, Streamable, void>\n | AsyncGenerator<Streamable, Streamable, void>;\n\nconst nanoid = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 7\n);\n\nexport class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {\n private readonly config?: AxConfig;\n private readonly funcInfo: AxFunction;\n private generateFunction: Renderer<OUT>;\n private updateState: (msgs: readonly CoreMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly CoreMessage[]) => void;\n generate: Renderer<OUT>;\n config?: Readonly<AxConfig>;\n }>) {\n this.funcInfo = agent.getFunction();\n this.generateFunction = generate;\n this.updateState = updateState;\n this.config = config;\n }\n\n get description() {\n return this.funcInfo.description;\n }\n\n get parameters(): z.ZodTypeAny {\n const schema = this.funcInfo.parameters ?? {\n type: 'object',\n properties: {},\n };\n\n return convertToZodSchema(schema);\n }\n\n get generate(): Renderer<IN> {\n const fn = async (input: IN) => {\n const res = (await this.funcInfo.func(input)) as OUT;\n const toolCallId = nanoid();\n\n this.updateState([\n {\n role: 'assistant',\n content: [\n {\n type: 'tool-call',\n toolName: this.funcInfo.name,\n toolCallId,\n args: input,\n },\n ],\n },\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolName: this.funcInfo.name,\n toolCallId,\n result: res,\n },\n ],\n },\n ]);\n\n return this.generateFunction(res);\n };\n return fn as Renderer<IN>;\n }\n}\n\nexport class AxAIProvider implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'json';\n\n private readonly ai: AxAIService;\n private readonly config?: AxConfig;\n\n public modelId: string;\n\n constructor(ai: AxAIService, config?: Readonly<AxConfig>) {\n this.ai = ai;\n this.config = config;\n this.modelId = this.ai.getName();\n }\n\n get provider(): string {\n return this.ai.getName();\n }\n\n async doGenerate(\n options: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { req, warnings } = createChatRequest(options);\n const res = (await this.ai.chat(req)) as AxChatResponse;\n const choice = res.results.at(0);\n\n if (!choice) {\n throw new Error('No choice returned');\n }\n\n return {\n text: choice.content ?? undefined,\n toolCalls: choice.functionCalls?.map((tc) => ({\n toolCallType: 'function',\n toolCallId: tc.id,\n toolName: tc.function.name,\n args:\n typeof tc.function.params === 'string'\n ? tc.function.params\n : JSON.stringify(tc.function.params),\n })),\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: {\n promptTokens: res.modelUsage?.tokens?.promptTokens ?? 0,\n completionTokens: res.modelUsage?.tokens?.completionTokens ?? 0,\n },\n rawCall: { rawPrompt: '', rawSettings: req.modelConfig ?? {} },\n warnings,\n };\n }\n\n async doStream(\n options: Readonly<Parameters<LanguageModelV1['doStream']>[0]>\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { req, warnings } = createChatRequest(options);\n\n const res = (await this.ai.chat(req, {\n stream: true,\n })) as ReadableStream<AxChatResponse>;\n\n return {\n stream: res.pipeThrough(new AxToSDKTransformer()) as any,\n rawCall: { rawPrompt: '', rawSettings: req.modelConfig ?? {} },\n warnings,\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Readonly<\n Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & { type: 'regular' }\n >\n): Pick<AxChatRequest, 'functions' | 'functionCall'> {\n // when the tools array is empty, change it to undefined to prevent errors:\n if (!mode.tools || mode.tools.length === 0) {\n return {};\n }\n\n const tools = mode.tools as Array<LanguageModelV1FunctionTool>;\n const functions = tools.map((f) => ({\n name: f.name,\n description: 'description' in f ? (f.description ?? '') : '',\n parameters: f.parameters as AxFunctionJSONSchema,\n }));\n\n const toolChoice = mode.toolChoice;\n if (!toolChoice) {\n return { functions };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { functions, functionCall: 'auto' };\n case 'none':\n return { functions, functionCall: 'none' };\n case 'required':\n return { functions, functionCall: 'required' };\n case 'tool':\n return {\n functions,\n functionCall: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n };\n default: {\n const ExhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${ExhaustiveCheck}`);\n }\n }\n}\n\nfunction convertToAxChatPrompt(\n prompt: Readonly<LanguageModelV1Prompt>\n): AxChatRequest['chatPrompt'] {\n const messages: AxChatRequest['chatPrompt'] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'image': {\n if (!part.mimeType) {\n throw new Error('Image part must have a mimeType');\n }\n if (!ArrayBuffer.isView(part.image)) {\n throw new Error('Image part must have an ArrayBuffer');\n }\n const image = Buffer.from(part.image).toString('base64');\n return {\n type: 'image',\n mimeType: part.mimeType,\n image,\n };\n }\n default:\n throw new Error(`Unsupported part: ${part}`);\n // case 'audio': {\n // if (!part.data) {\n // throw new Error('Audio part must have a audio');\n // }\n // if (!ArrayBuffer.isView(part.data)) {\n // throw new Error('Audio part must have an ArrayBuffer');\n // }\n // const data = Buffer.from(part.data).toString('base64');\n // return {\n // type: 'audio',\n // format: 'wav',\n // data\n // };\n // }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Extract<\n AxChatRequestChatPrompt,\n { role: 'assistant' }\n >['functionCalls'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n params: part.args as Record<string, unknown>,\n },\n });\n break;\n }\n\n default: {\n const ExhaustiveCheck = part;\n throw new Error(`Unsupported part: ${ExhaustiveCheck}`);\n }\n }\n }\n\n const functionCalls = toolCalls.length === 0 ? undefined : toolCalls;\n\n if (functionCalls || text.length > 0) {\n messages.push({\n role: 'assistant',\n content: text,\n functionCalls,\n });\n }\n\n break;\n }\n case 'tool': {\n for (const part of content) {\n messages.push({\n role: 'function' as const,\n functionId: part.toolCallId,\n result: JSON.stringify(part.result, null, 2),\n });\n }\n break;\n }\n default: {\n const ExhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${ExhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n\nfunction mapAxFinishReason(\n finishReason: AxChatResponseResult['finishReason']\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'function_call':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n\nfunction createChatRequest({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n //seed,\n}: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>): {\n req: AxChatRequest;\n warnings: LanguageModelV1CallWarning[];\n} {\n const req: AxChatRequest = {\n chatPrompt: convertToAxChatPrompt(prompt),\n ...(frequencyPenalty != null ? { frequencyPenalty } : {}),\n ...(presencePenalty != null ? { presencePenalty } : {}),\n ...(maxTokens != null ? { maxTokens } : {}),\n ...(temperature != null ? { temperature } : {}),\n ...(topP != null ? { topP } : {}),\n };\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n switch (mode.type) {\n case 'regular': {\n return {\n req: { ...req, ...prepareToolsAndToolChoice(mode) },\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n req,\n warnings,\n };\n }\n\n case 'object-tool': {\n const tool = {\n type: 'function',\n function: {\n name: mode.tool.name,\n params: mode.tool.parameters,\n },\n };\n return {\n req: { ...req, ...tool },\n warnings,\n };\n }\n\n default: {\n throw new Error('Unsupported type');\n }\n }\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV1StreamPart\n> {\n private usage: Extract<\n LanguageModelV1StreamPart,\n { type: 'finish' }\n >['usage'] = {\n promptTokens: 0,\n completionTokens: 0,\n };\n\n private finishReason: Extract<\n LanguageModelV1StreamPart,\n { type: 'finish' }\n >['finishReason'] = 'other';\n\n private functionCalls: LanguageModelV1FunctionToolCall[] = [];\n\n constructor() {\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV1StreamPart>\n ) => {\n const choice = chunk.results.at(0);\n if (!choice) {\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = {\n promptTokens:\n this.usage.promptTokens +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0),\n completionTokens:\n this.usage.completionTokens +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n };\n }\n\n if (choice.functionCalls) {\n for (const fc of choice.functionCalls) {\n const index = this.functionCalls.findIndex(\n (f) => f.toolCallId === fc.id\n );\n if (index === -1) {\n this.functionCalls.push({\n toolCallType: 'function' as const,\n toolCallId: fc.id,\n toolName: fc.function.name,\n args:\n typeof fc.function.params === 'string'\n ? fc.function.params\n : JSON.stringify(fc.function.params),\n });\n } else {\n const obj = this.functionCalls[index];\n if (!obj) {\n continue;\n }\n if (typeof fc.function.params === 'string') {\n obj.args = (obj.args ?? '') + fc.function.params;\n } else {\n obj.args = JSON.stringify(fc.function.params);\n }\n }\n this.finishReason = 'tool-calls';\n }\n }\n\n if (choice.content && choice.content.length > 0) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: choice.content ?? '',\n });\n this.finishReason = mapAxFinishReason(choice.finishReason);\n }\n },\n flush: (\n controller: TransformStreamDefaultController<LanguageModelV1StreamPart>\n ) => {\n for (const fc of this.functionCalls) {\n const tc = {\n type: 'tool-call' as const,\n ...fc,\n };\n controller.enqueue(tc);\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n controller.terminate();\n },\n };\n\n super(transformer);\n }\n}\n\ntype AnyZod =\n | z.AnyZodObject\n | z.ZodString\n | z.ZodNumber\n | z.ZodBoolean\n | z.ZodArray<AnyZod>\n | z.ZodOptional<AnyZod>;\n\nfunction convertToZodSchema(\n jsonSchema: Readonly<AxFunctionJSONSchema>\n): AnyZod {\n const { type, properties, required, items } = jsonSchema;\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'array':\n if (!items) {\n throw new Error(\"Array type must have 'items' property.\");\n }\n return z.array(convertToZodSchema(items));\n case 'object': {\n if (!properties) {\n throw new Error(\"Object type must have 'properties' property.\");\n }\n const shape: Record<string, AnyZod> = {};\n\n for (const [key, value] of Object.entries(properties)) {\n const schema = convertToZodSchema(value);\n let val = required?.includes(key) ? schema : schema.optional();\n val = value.description ? val.describe(value.description) : val;\n shape[key] = val;\n }\n return z.object(shape);\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n"],"mappings":"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","names":["crypto"]}
1
+ {"version":3,"sources":["../index.ts","../provider.ts","../../../node_modules/nanoid/index.js"],"sourcesContent":["import { AxAgentProvider, AxAIProvider } from './provider.js';\n\nexport { AxAgentProvider, AxAIProvider };\n","// cspell:ignore Streamable\n\nimport {\n type ReadableStream,\n TransformStream,\n type TransformStreamDefaultController,\n} from 'node:stream/web';\nimport type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FinishReason,\n LanguageModelV2FunctionTool,\n LanguageModelV2ToolCall,\n LanguageModelV2Prompt,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n LanguageModelV2Content,\n LanguageModelV2ToolChoice,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport type {\n AxAIService,\n AxAgentic,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n} from '@ax-llm/ax/index.js';\nimport type { CoreMessage } from 'ai';\nimport { customAlphabet } from 'nanoid';\nimport type { ReactNode } from 'react';\nimport { z } from 'zod';\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\ntype AxChatRequestChatPrompt = Writeable<AxChatRequest['chatPrompt'][0]>;\n\ntype AxConfig = {\n fetch?: typeof fetch;\n};\n\ntype Streamable = ReactNode | Promise<ReactNode>;\ntype Renderer<T> = (\n args: T\n) =>\n | Streamable\n | Generator<Streamable, Streamable, void>\n | AsyncGenerator<Streamable, Streamable, void>;\n\nconst nanoid = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 7\n);\n\nexport class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {\n private readonly config?: AxConfig;\n private readonly funcInfo: AxFunction;\n private generateFunction: Renderer<OUT>;\n private updateState: (msgs: readonly CoreMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly CoreMessage[]) => void;\n generate: Renderer<OUT>;\n config?: Readonly<AxConfig>;\n }>) {\n this.funcInfo = agent.getFunction();\n this.generateFunction = generate;\n this.updateState = updateState;\n this.config = config;\n }\n\n get description() {\n return this.funcInfo.description;\n }\n\n get parameters(): z.ZodTypeAny {\n const schema = this.funcInfo.parameters ?? {\n type: 'object',\n properties: {},\n };\n\n return convertToZodSchema(schema);\n }\n\n get generate(): Renderer<IN> {\n const fn = async (input: IN) => {\n const res = (await this.funcInfo.func(input)) as OUT;\n const toolCallId = nanoid();\n\n this.updateState([\n {\n role: 'assistant',\n content: [\n {\n type: 'tool-call',\n toolName: this.funcInfo.name,\n toolCallId,\n input: input,\n },\n ],\n },\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolName: this.funcInfo.name,\n toolCallId,\n output: { type: 'text' as const, value: JSON.stringify(res) },\n },\n ],\n },\n ]);\n\n return this.generateFunction(res);\n };\n return fn as Renderer<IN>;\n }\n}\n\nexport class AxAIProvider implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly ai: AxAIService;\n private readonly config?: AxConfig;\n\n public modelId: string;\n\n constructor(ai: AxAIService, config?: Readonly<AxConfig>) {\n this.ai = ai;\n this.config = config;\n this.modelId = this.ai.getName();\n }\n\n get provider(): string {\n return this.ai.getName();\n }\n\n async doGenerate(\n options: LanguageModelV2CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const req = createChatRequest(options);\n const res = (await this.ai.chat(req)) as AxChatResponse;\n const choice = res.results.at(0);\n\n if (!choice) {\n throw new Error('No choice returned');\n }\n\n const content: LanguageModelV2Content[] = [];\n\n if (choice.content) {\n content.push({ type: 'text', text: choice.content });\n }\n\n if (choice.functionCalls) {\n for (const tc of choice.functionCalls) {\n content.push({\n type: 'tool-call',\n toolCallId: tc.id,\n toolName: tc.function.name,\n input:\n typeof tc.function.params === 'string'\n ? tc.function.params\n : JSON.stringify(tc.function.params),\n });\n }\n }\n\n return {\n content,\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: {\n inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,\n outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,\n totalTokens:\n (res.modelUsage?.tokens?.promptTokens ?? 0) +\n (res.modelUsage?.tokens?.completionTokens ?? 0),\n },\n warnings: [] as LanguageModelV2CallWarning[],\n };\n }\n\n async doStream(\n options: LanguageModelV2CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const req = createChatRequest(options);\n\n const res = (await this.ai.chat(req, {\n stream: true,\n })) as ReadableStream<AxChatResponse>;\n\n return {\n stream: res.pipeThrough(new AxToSDKTransformer()) as any,\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n tools: Array<LanguageModelV2FunctionTool>,\n toolChoice?: LanguageModelV2ToolChoice\n): Pick<AxChatRequest, 'functions' | 'functionCall'> {\n // when the tools array is empty, change it to undefined to prevent errors:\n if (!tools || tools.length === 0) {\n return {};\n }\n const functions = tools.map((f) => ({\n name: f.name,\n description: f.description ?? '',\n parameters: f.inputSchema as AxFunctionJSONSchema,\n }));\n\n if (!toolChoice) {\n return { functions };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { functions, functionCall: 'auto' };\n case 'none':\n return { functions, functionCall: 'none' };\n case 'required':\n return { functions, functionCall: 'required' };\n case 'tool':\n return {\n functions,\n functionCall: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n };\n default: {\n const ExhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${ExhaustiveCheck}`);\n }\n }\n}\n\nfunction convertToAxChatPrompt(\n prompt: Readonly<LanguageModelV2Prompt>\n): AxChatRequest['chatPrompt'] {\n const messages: AxChatRequest['chatPrompt'] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (!part.mediaType) {\n throw new Error('File part must have a mediaType');\n }\n let dataContent: string;\n if (typeof part.data === 'string') {\n dataContent = part.data;\n } else if (part.data instanceof URL) {\n dataContent = part.data.toString();\n } else {\n dataContent = Buffer.from(part.data).toString('base64');\n }\n return {\n type: 'image',\n mimeType: part.mediaType,\n image: dataContent,\n };\n }\n default:\n throw new Error(`Unsupported part: ${part}`);\n // case 'audio': {\n // if (!part.data) {\n // throw new Error('Audio part must have a audio');\n // }\n // if (!ArrayBuffer.isView(part.data)) {\n // throw new Error('Audio part must have an ArrayBuffer');\n // }\n // const data = Buffer.from(part.data).toString('base64');\n // return {\n // type: 'audio',\n // format: 'wav',\n // data\n // };\n // }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Extract<\n AxChatRequestChatPrompt,\n { role: 'assistant' }\n >['functionCalls'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n params:\n typeof part.input === 'string'\n ? JSON.parse(part.input)\n : part.input,\n },\n });\n break;\n }\n\n default: {\n const ExhaustiveCheck = part;\n throw new Error(`Unsupported part: ${ExhaustiveCheck}`);\n }\n }\n }\n\n const functionCalls = toolCalls.length === 0 ? undefined : toolCalls;\n\n if (functionCalls || text.length > 0) {\n messages.push({\n role: 'assistant',\n content: text,\n functionCalls,\n });\n }\n\n break;\n }\n case 'tool': {\n for (const part of content) {\n messages.push({\n role: 'function' as const,\n functionId: part.toolCallId,\n result:\n typeof part.output === 'object' && part.output?.type === 'text'\n ? part.output.value\n : JSON.stringify(part.output, null, 2),\n });\n }\n break;\n }\n default: {\n const ExhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${ExhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n\nfunction mapAxFinishReason(\n finishReason: AxChatResponseResult['finishReason']\n): LanguageModelV2FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'function_call':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n\nfunction createChatRequest({\n tools,\n toolChoice,\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n //seed,\n}: Readonly<LanguageModelV2CallOptions>): AxChatRequest {\n const req: AxChatRequest = {\n chatPrompt: convertToAxChatPrompt(prompt),\n ...(frequencyPenalty != null ? { frequencyPenalty } : {}),\n ...(presencePenalty != null ? { presencePenalty } : {}),\n ...(maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {}),\n ...(temperature != null ? { temperature } : {}),\n ...(topP != null ? { topP } : {}),\n };\n\n if (tools && tools.length > 0) {\n const functionTools = tools.filter(\n (tool): tool is LanguageModelV2FunctionTool => tool.type === 'function'\n );\n return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };\n }\n\n return req;\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV2StreamPart\n> {\n private usage: LanguageModelV2Usage = {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n };\n\n private finishReason: LanguageModelV2FinishReason = 'other';\n\n private functionCalls: LanguageModelV2ToolCall[] = [];\n private hasStarted = false;\n private textStarted = false;\n\n constructor() {\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV2StreamPart>\n ) => {\n // Emit stream-start event only once\n if (!this.hasStarted) {\n controller.enqueue({\n type: 'stream-start',\n warnings: [] as LanguageModelV2CallWarning[],\n });\n this.hasStarted = true;\n }\n\n const choice = chunk.results.at(0);\n if (!choice) {\n // End text if it was started\n if (this.textStarted) {\n controller.enqueue({\n type: 'text-end',\n id: 'text-content',\n });\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = {\n inputTokens:\n (this.usage.inputTokens ?? 0) +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0),\n outputTokens:\n (this.usage.outputTokens ?? 0) +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n totalTokens:\n (this.usage.totalTokens ?? 0) +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0) +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n };\n }\n\n if (choice.functionCalls) {\n for (const fc of choice.functionCalls) {\n const index = this.functionCalls.findIndex(\n (f) => f.toolCallId === fc.id\n );\n if (index === -1) {\n this.functionCalls.push({\n type: 'tool-call' as const,\n toolCallId: fc.id,\n toolName: fc.function.name,\n input:\n typeof fc.function.params === 'string'\n ? fc.function.params\n : JSON.stringify(fc.function.params),\n });\n } else {\n const obj = this.functionCalls[index];\n if (!obj) {\n continue;\n }\n if (typeof fc.function.params === 'string') {\n obj.input = ((obj.input as string) || '') + fc.function.params;\n } else {\n obj.input = JSON.stringify(fc.function.params);\n }\n }\n this.finishReason = 'tool-calls';\n }\n }\n\n if (choice.content && choice.content.length > 0) {\n // Start text stream if not started\n if (!this.textStarted) {\n controller.enqueue({\n type: 'text-start',\n id: 'text-content',\n });\n this.textStarted = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'text-content',\n delta: choice.content ?? '',\n });\n this.finishReason = mapAxFinishReason(choice.finishReason);\n }\n },\n flush: (\n controller: TransformStreamDefaultController<LanguageModelV2StreamPart>\n ) => {\n // End text stream if it was started\n if (this.textStarted) {\n controller.enqueue({\n type: 'text-end',\n id: 'text-content',\n });\n }\n\n for (const fc of this.functionCalls) {\n controller.enqueue(fc);\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n controller.terminate();\n },\n };\n\n super(transformer);\n }\n}\n\ntype AnyZod =\n | z.AnyZodObject\n | z.ZodString\n | z.ZodNumber\n | z.ZodBoolean\n | z.ZodArray<AnyZod>\n | z.ZodOptional<AnyZod>;\n\nfunction convertToZodSchema(\n jsonSchema: Readonly<AxFunctionJSONSchema>\n): AnyZod {\n const { type, properties, required, items } = jsonSchema;\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'array':\n if (!items) {\n throw new Error(\"Array type must have 'items' property.\");\n }\n return z.array(convertToZodSchema(items));\n case 'object': {\n if (!properties) {\n throw new Error(\"Object type must have 'properties' property.\");\n }\n const shape: Record<string, AnyZod> = {};\n\n for (const [key, value] of Object.entries(properties)) {\n const schema = convertToZodSchema(value);\n let val = required?.includes(key) ? schema : schema.optional();\n val = value.description ? val.describe(value.description) : val;\n shape[key] = val;\n }\n return z.object(shape);\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n"],"mappings":"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","names":["crypto"]}
package/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { LanguageModelV2, LanguageModelV2CallOptions } from '@ai-sdk/provider';
2
2
  import { AxGenIn, AxGenOut, AxAgentic, AxAIService } from '@ax-llm/ax/index.js';
3
3
  import { CoreMessage } from 'ai';
4
4
  import { ReactNode } from 'react';
@@ -24,16 +24,16 @@ declare class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {
24
24
  get parameters(): z.ZodTypeAny;
25
25
  get generate(): Renderer<IN>;
26
26
  }
27
- declare class AxAIProvider implements LanguageModelV1 {
28
- readonly specificationVersion = "v1";
29
- readonly defaultObjectGenerationMode = "json";
27
+ declare class AxAIProvider implements LanguageModelV2 {
28
+ readonly specificationVersion: "v2";
29
+ readonly supportedUrls: Record<string, RegExp[]>;
30
30
  private readonly ai;
31
31
  private readonly config?;
32
32
  modelId: string;
33
33
  constructor(ai: AxAIService, config?: Readonly<AxConfig>);
34
34
  get provider(): string;
35
- doGenerate(options: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
36
- doStream(options: Readonly<Parameters<LanguageModelV1['doStream']>[0]>): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
35
+ doGenerate(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
36
+ doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
37
37
  }
38
38
 
39
39
  export { AxAIProvider, AxAgentProvider };
package/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { LanguageModelV2, LanguageModelV2CallOptions } from '@ai-sdk/provider';
2
2
  import { AxGenIn, AxGenOut, AxAgentic, AxAIService } from '@ax-llm/ax/index.js';
3
3
  import { CoreMessage } from 'ai';
4
4
  import { ReactNode } from 'react';
@@ -24,16 +24,16 @@ declare class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {
24
24
  get parameters(): z.ZodTypeAny;
25
25
  get generate(): Renderer<IN>;
26
26
  }
27
- declare class AxAIProvider implements LanguageModelV1 {
28
- readonly specificationVersion = "v1";
29
- readonly defaultObjectGenerationMode = "json";
27
+ declare class AxAIProvider implements LanguageModelV2 {
28
+ readonly specificationVersion: "v2";
29
+ readonly supportedUrls: Record<string, RegExp[]>;
30
30
  private readonly ai;
31
31
  private readonly config?;
32
32
  modelId: string;
33
33
  constructor(ai: AxAIService, config?: Readonly<AxConfig>);
34
34
  get provider(): string;
35
- doGenerate(options: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
36
- doStream(options: Readonly<Parameters<LanguageModelV1['doStream']>[0]>): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
35
+ doGenerate(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>>;
36
+ doStream(options: LanguageModelV2CallOptions): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>>;
37
37
  }
38
38
 
39
39
  export { AxAIProvider, AxAgentProvider };
package/index.js CHANGED
@@ -84,7 +84,7 @@ var AxAgentProvider = class {
84
84
  type: "tool-call",
85
85
  toolName: this.funcInfo.name,
86
86
  toolCallId,
87
- args: input
87
+ input
88
88
  }
89
89
  ]
90
90
  },
@@ -95,7 +95,7 @@ var AxAgentProvider = class {
95
95
  type: "tool-result",
96
96
  toolName: this.funcInfo.name,
97
97
  toolCallId,
98
- result: res
98
+ output: { type: "text", value: JSON.stringify(res) }
99
99
  }
100
100
  ]
101
101
  }
@@ -106,8 +106,8 @@ var AxAgentProvider = class {
106
106
  }
107
107
  };
108
108
  var AxAIProvider = class {
109
- specificationVersion = "v1";
110
- defaultObjectGenerationMode = "json";
109
+ specificationVersion = "v2";
110
+ supportedUrls = {};
111
111
  ai;
112
112
  config;
113
113
  modelId;
@@ -120,52 +120,56 @@ var AxAIProvider = class {
120
120
  return this.ai.getName();
121
121
  }
122
122
  async doGenerate(options) {
123
- const { req, warnings } = createChatRequest(options);
123
+ const req = createChatRequest(options);
124
124
  const res = await this.ai.chat(req);
125
125
  const choice = res.results.at(0);
126
126
  if (!choice) {
127
127
  throw new Error("No choice returned");
128
128
  }
129
+ const content = [];
130
+ if (choice.content) {
131
+ content.push({ type: "text", text: choice.content });
132
+ }
133
+ if (choice.functionCalls) {
134
+ for (const tc of choice.functionCalls) {
135
+ content.push({
136
+ type: "tool-call",
137
+ toolCallId: tc.id,
138
+ toolName: tc.function.name,
139
+ input: typeof tc.function.params === "string" ? tc.function.params : JSON.stringify(tc.function.params)
140
+ });
141
+ }
142
+ }
129
143
  return {
130
- text: choice.content ?? void 0,
131
- toolCalls: choice.functionCalls?.map((tc) => ({
132
- toolCallType: "function",
133
- toolCallId: tc.id,
134
- toolName: tc.function.name,
135
- args: typeof tc.function.params === "string" ? tc.function.params : JSON.stringify(tc.function.params)
136
- })),
144
+ content,
137
145
  finishReason: mapAxFinishReason(choice.finishReason),
138
146
  usage: {
139
- promptTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
140
- completionTokens: res.modelUsage?.tokens?.completionTokens ?? 0
147
+ inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
148
+ outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,
149
+ totalTokens: (res.modelUsage?.tokens?.promptTokens ?? 0) + (res.modelUsage?.tokens?.completionTokens ?? 0)
141
150
  },
142
- rawCall: { rawPrompt: "", rawSettings: req.modelConfig ?? {} },
143
- warnings
151
+ warnings: []
144
152
  };
145
153
  }
146
154
  async doStream(options) {
147
- const { req, warnings } = createChatRequest(options);
155
+ const req = createChatRequest(options);
148
156
  const res = await this.ai.chat(req, {
149
157
  stream: true
150
158
  });
151
159
  return {
152
- stream: res.pipeThrough(new AxToSDKTransformer()),
153
- rawCall: { rawPrompt: "", rawSettings: req.modelConfig ?? {} },
154
- warnings
160
+ stream: res.pipeThrough(new AxToSDKTransformer())
155
161
  };
156
162
  }
157
163
  };
158
- function prepareToolsAndToolChoice(mode) {
159
- if (!mode.tools || mode.tools.length === 0) {
164
+ function prepareToolsAndToolChoice(tools, toolChoice) {
165
+ if (!tools || tools.length === 0) {
160
166
  return {};
161
167
  }
162
- const tools = mode.tools;
163
168
  const functions = tools.map((f) => ({
164
169
  name: f.name,
165
- description: "description" in f ? f.description ?? "" : "",
166
- parameters: f.parameters
170
+ description: f.description ?? "",
171
+ parameters: f.inputSchema
167
172
  }));
168
- const toolChoice = mode.toolChoice;
169
173
  if (!toolChoice) {
170
174
  return { functions };
171
175
  }
@@ -207,18 +211,22 @@ function convertToAxChatPrompt(prompt) {
207
211
  case "text": {
208
212
  return { type: "text", text: part.text };
209
213
  }
210
- case "image": {
211
- if (!part.mimeType) {
212
- throw new Error("Image part must have a mimeType");
214
+ case "file": {
215
+ if (!part.mediaType) {
216
+ throw new Error("File part must have a mediaType");
213
217
  }
214
- if (!ArrayBuffer.isView(part.image)) {
215
- throw new Error("Image part must have an ArrayBuffer");
218
+ let dataContent;
219
+ if (typeof part.data === "string") {
220
+ dataContent = part.data;
221
+ } else if (part.data instanceof URL) {
222
+ dataContent = part.data.toString();
223
+ } else {
224
+ dataContent = Buffer.from(part.data).toString("base64");
216
225
  }
217
- const image = Buffer.from(part.image).toString("base64");
218
226
  return {
219
227
  type: "image",
220
- mimeType: part.mimeType,
221
- image
228
+ mimeType: part.mediaType,
229
+ image: dataContent
222
230
  };
223
231
  }
224
232
  default:
@@ -243,7 +251,7 @@ function convertToAxChatPrompt(prompt) {
243
251
  type: "function",
244
252
  function: {
245
253
  name: part.toolName,
246
- params: part.args
254
+ params: typeof part.input === "string" ? JSON.parse(part.input) : part.input
247
255
  }
248
256
  });
249
257
  break;
@@ -269,7 +277,7 @@ function convertToAxChatPrompt(prompt) {
269
277
  messages.push({
270
278
  role: "function",
271
279
  functionId: part.toolCallId,
272
- result: JSON.stringify(part.result, null, 2)
280
+ result: typeof part.output === "object" && part.output?.type === "text" ? part.output.value : JSON.stringify(part.output, null, 2)
273
281
  });
274
282
  }
275
283
  break;
@@ -295,9 +303,10 @@ function mapAxFinishReason(finishReason) {
295
303
  }
296
304
  }
297
305
  function createChatRequest({
298
- mode,
306
+ tools,
307
+ toolChoice,
299
308
  prompt,
300
- maxTokens,
309
+ maxOutputTokens,
301
310
  temperature,
302
311
  topP,
303
312
  frequencyPenalty,
@@ -308,54 +317,46 @@ function createChatRequest({
308
317
  chatPrompt: convertToAxChatPrompt(prompt),
309
318
  ...frequencyPenalty != null ? { frequencyPenalty } : {},
310
319
  ...presencePenalty != null ? { presencePenalty } : {},
311
- ...maxTokens != null ? { maxTokens } : {},
320
+ ...maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {},
312
321
  ...temperature != null ? { temperature } : {},
313
322
  ...topP != null ? { topP } : {}
314
323
  };
315
- const warnings = [];
316
- switch (mode.type) {
317
- case "regular": {
318
- return {
319
- req: { ...req, ...prepareToolsAndToolChoice(mode) },
320
- warnings
321
- };
322
- }
323
- case "object-json": {
324
- return {
325
- req,
326
- warnings
327
- };
328
- }
329
- case "object-tool": {
330
- const tool = {
331
- type: "function",
332
- function: {
333
- name: mode.tool.name,
334
- params: mode.tool.parameters
335
- }
336
- };
337
- return {
338
- req: { ...req, ...tool },
339
- warnings
340
- };
341
- }
342
- default: {
343
- throw new Error("Unsupported type");
344
- }
324
+ if (tools && tools.length > 0) {
325
+ const functionTools = tools.filter(
326
+ (tool) => tool.type === "function"
327
+ );
328
+ return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };
345
329
  }
330
+ return req;
346
331
  }
347
332
  var AxToSDKTransformer = class extends TransformStream {
348
333
  usage = {
349
- promptTokens: 0,
350
- completionTokens: 0
334
+ inputTokens: 0,
335
+ outputTokens: 0,
336
+ totalTokens: 0
351
337
  };
352
338
  finishReason = "other";
353
339
  functionCalls = [];
340
+ hasStarted = false;
341
+ textStarted = false;
354
342
  constructor() {
355
343
  const transformer = {
356
344
  transform: (chunk, controller) => {
345
+ if (!this.hasStarted) {
346
+ controller.enqueue({
347
+ type: "stream-start",
348
+ warnings: []
349
+ });
350
+ this.hasStarted = true;
351
+ }
357
352
  const choice = chunk.results.at(0);
358
353
  if (!choice) {
354
+ if (this.textStarted) {
355
+ controller.enqueue({
356
+ type: "text-end",
357
+ id: "text-content"
358
+ });
359
+ }
359
360
  const val = {
360
361
  type: "finish",
361
362
  finishReason: this.finishReason,
@@ -366,8 +367,9 @@ var AxToSDKTransformer = class extends TransformStream {
366
367
  }
367
368
  if (chunk.modelUsage) {
368
369
  this.usage = {
369
- promptTokens: this.usage.promptTokens + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
370
- completionTokens: this.usage.completionTokens + (chunk.modelUsage.tokens?.completionTokens ?? 0)
370
+ inputTokens: (this.usage.inputTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
371
+ outputTokens: (this.usage.outputTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0),
372
+ totalTokens: (this.usage.totalTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0)
371
373
  };
372
374
  }
373
375
  if (choice.functionCalls) {
@@ -377,10 +379,10 @@ var AxToSDKTransformer = class extends TransformStream {
377
379
  );
378
380
  if (index === -1) {
379
381
  this.functionCalls.push({
380
- toolCallType: "function",
382
+ type: "tool-call",
381
383
  toolCallId: fc.id,
382
384
  toolName: fc.function.name,
383
- args: typeof fc.function.params === "string" ? fc.function.params : JSON.stringify(fc.function.params)
385
+ input: typeof fc.function.params === "string" ? fc.function.params : JSON.stringify(fc.function.params)
384
386
  });
385
387
  } else {
386
388
  const obj = this.functionCalls[index];
@@ -388,29 +390,39 @@ var AxToSDKTransformer = class extends TransformStream {
388
390
  continue;
389
391
  }
390
392
  if (typeof fc.function.params === "string") {
391
- obj.args = (obj.args ?? "") + fc.function.params;
393
+ obj.input = (obj.input || "") + fc.function.params;
392
394
  } else {
393
- obj.args = JSON.stringify(fc.function.params);
395
+ obj.input = JSON.stringify(fc.function.params);
394
396
  }
395
397
  }
396
398
  this.finishReason = "tool-calls";
397
399
  }
398
400
  }
399
401
  if (choice.content && choice.content.length > 0) {
402
+ if (!this.textStarted) {
403
+ controller.enqueue({
404
+ type: "text-start",
405
+ id: "text-content"
406
+ });
407
+ this.textStarted = true;
408
+ }
400
409
  controller.enqueue({
401
410
  type: "text-delta",
402
- textDelta: choice.content ?? ""
411
+ id: "text-content",
412
+ delta: choice.content ?? ""
403
413
  });
404
414
  this.finishReason = mapAxFinishReason(choice.finishReason);
405
415
  }
406
416
  },
407
417
  flush: (controller) => {
418
+ if (this.textStarted) {
419
+ controller.enqueue({
420
+ type: "text-end",
421
+ id: "text-content"
422
+ });
423
+ }
408
424
  for (const fc of this.functionCalls) {
409
- const tc = {
410
- type: "tool-call",
411
- ...fc
412
- };
413
- controller.enqueue(tc);
425
+ controller.enqueue(fc);
414
426
  }
415
427
  const val = {
416
428
  type: "finish",
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../provider.ts","../../../node_modules/nanoid/index.js"],"sourcesContent":["// cspell:ignore Streamable\n\nimport {\n type ReadableStream,\n TransformStream,\n type TransformStreamDefaultController,\n} from 'node:stream/web';\nimport type {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1FunctionTool,\n LanguageModelV1FunctionToolCall,\n LanguageModelV1Prompt,\n LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport type {\n AxAIService,\n AxAgentic,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n} from '@ax-llm/ax/index.js';\nimport type { CoreMessage } from 'ai';\nimport { customAlphabet } from 'nanoid';\nimport type { ReactNode } from 'react';\nimport { z } from 'zod';\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\ntype AxChatRequestChatPrompt = Writeable<AxChatRequest['chatPrompt'][0]>;\n\ntype AxConfig = {\n fetch?: typeof fetch;\n};\n\ntype Streamable = ReactNode | Promise<ReactNode>;\ntype Renderer<T> = (\n args: T\n) =>\n | Streamable\n | Generator<Streamable, Streamable, void>\n | AsyncGenerator<Streamable, Streamable, void>;\n\nconst nanoid = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 7\n);\n\nexport class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {\n private readonly config?: AxConfig;\n private readonly funcInfo: AxFunction;\n private generateFunction: Renderer<OUT>;\n private updateState: (msgs: readonly CoreMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly CoreMessage[]) => void;\n generate: Renderer<OUT>;\n config?: Readonly<AxConfig>;\n }>) {\n this.funcInfo = agent.getFunction();\n this.generateFunction = generate;\n this.updateState = updateState;\n this.config = config;\n }\n\n get description() {\n return this.funcInfo.description;\n }\n\n get parameters(): z.ZodTypeAny {\n const schema = this.funcInfo.parameters ?? {\n type: 'object',\n properties: {},\n };\n\n return convertToZodSchema(schema);\n }\n\n get generate(): Renderer<IN> {\n const fn = async (input: IN) => {\n const res = (await this.funcInfo.func(input)) as OUT;\n const toolCallId = nanoid();\n\n this.updateState([\n {\n role: 'assistant',\n content: [\n {\n type: 'tool-call',\n toolName: this.funcInfo.name,\n toolCallId,\n args: input,\n },\n ],\n },\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolName: this.funcInfo.name,\n toolCallId,\n result: res,\n },\n ],\n },\n ]);\n\n return this.generateFunction(res);\n };\n return fn as Renderer<IN>;\n }\n}\n\nexport class AxAIProvider implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = 'json';\n\n private readonly ai: AxAIService;\n private readonly config?: AxConfig;\n\n public modelId: string;\n\n constructor(ai: AxAIService, config?: Readonly<AxConfig>) {\n this.ai = ai;\n this.config = config;\n this.modelId = this.ai.getName();\n }\n\n get provider(): string {\n return this.ai.getName();\n }\n\n async doGenerate(\n options: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { req, warnings } = createChatRequest(options);\n const res = (await this.ai.chat(req)) as AxChatResponse;\n const choice = res.results.at(0);\n\n if (!choice) {\n throw new Error('No choice returned');\n }\n\n return {\n text: choice.content ?? undefined,\n toolCalls: choice.functionCalls?.map((tc) => ({\n toolCallType: 'function',\n toolCallId: tc.id,\n toolName: tc.function.name,\n args:\n typeof tc.function.params === 'string'\n ? tc.function.params\n : JSON.stringify(tc.function.params),\n })),\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: {\n promptTokens: res.modelUsage?.tokens?.promptTokens ?? 0,\n completionTokens: res.modelUsage?.tokens?.completionTokens ?? 0,\n },\n rawCall: { rawPrompt: '', rawSettings: req.modelConfig ?? {} },\n warnings,\n };\n }\n\n async doStream(\n options: Readonly<Parameters<LanguageModelV1['doStream']>[0]>\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { req, warnings } = createChatRequest(options);\n\n const res = (await this.ai.chat(req, {\n stream: true,\n })) as ReadableStream<AxChatResponse>;\n\n return {\n stream: res.pipeThrough(new AxToSDKTransformer()) as any,\n rawCall: { rawPrompt: '', rawSettings: req.modelConfig ?? {} },\n warnings,\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Readonly<\n Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & { type: 'regular' }\n >\n): Pick<AxChatRequest, 'functions' | 'functionCall'> {\n // when the tools array is empty, change it to undefined to prevent errors:\n if (!mode.tools || mode.tools.length === 0) {\n return {};\n }\n\n const tools = mode.tools as Array<LanguageModelV1FunctionTool>;\n const functions = tools.map((f) => ({\n name: f.name,\n description: 'description' in f ? (f.description ?? '') : '',\n parameters: f.parameters as AxFunctionJSONSchema,\n }));\n\n const toolChoice = mode.toolChoice;\n if (!toolChoice) {\n return { functions };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { functions, functionCall: 'auto' };\n case 'none':\n return { functions, functionCall: 'none' };\n case 'required':\n return { functions, functionCall: 'required' };\n case 'tool':\n return {\n functions,\n functionCall: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n };\n default: {\n const ExhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${ExhaustiveCheck}`);\n }\n }\n}\n\nfunction convertToAxChatPrompt(\n prompt: Readonly<LanguageModelV1Prompt>\n): AxChatRequest['chatPrompt'] {\n const messages: AxChatRequest['chatPrompt'] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'image': {\n if (!part.mimeType) {\n throw new Error('Image part must have a mimeType');\n }\n if (!ArrayBuffer.isView(part.image)) {\n throw new Error('Image part must have an ArrayBuffer');\n }\n const image = Buffer.from(part.image).toString('base64');\n return {\n type: 'image',\n mimeType: part.mimeType,\n image,\n };\n }\n default:\n throw new Error(`Unsupported part: ${part}`);\n // case 'audio': {\n // if (!part.data) {\n // throw new Error('Audio part must have a audio');\n // }\n // if (!ArrayBuffer.isView(part.data)) {\n // throw new Error('Audio part must have an ArrayBuffer');\n // }\n // const data = Buffer.from(part.data).toString('base64');\n // return {\n // type: 'audio',\n // format: 'wav',\n // data\n // };\n // }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Extract<\n AxChatRequestChatPrompt,\n { role: 'assistant' }\n >['functionCalls'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n params: part.args as Record<string, unknown>,\n },\n });\n break;\n }\n\n default: {\n const ExhaustiveCheck = part;\n throw new Error(`Unsupported part: ${ExhaustiveCheck}`);\n }\n }\n }\n\n const functionCalls = toolCalls.length === 0 ? undefined : toolCalls;\n\n if (functionCalls || text.length > 0) {\n messages.push({\n role: 'assistant',\n content: text,\n functionCalls,\n });\n }\n\n break;\n }\n case 'tool': {\n for (const part of content) {\n messages.push({\n role: 'function' as const,\n functionId: part.toolCallId,\n result: JSON.stringify(part.result, null, 2),\n });\n }\n break;\n }\n default: {\n const ExhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${ExhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n\nfunction mapAxFinishReason(\n finishReason: AxChatResponseResult['finishReason']\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'function_call':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n\nfunction createChatRequest({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n //seed,\n}: Readonly<Parameters<LanguageModelV1['doGenerate']>[0]>): {\n req: AxChatRequest;\n warnings: LanguageModelV1CallWarning[];\n} {\n const req: AxChatRequest = {\n chatPrompt: convertToAxChatPrompt(prompt),\n ...(frequencyPenalty != null ? { frequencyPenalty } : {}),\n ...(presencePenalty != null ? { presencePenalty } : {}),\n ...(maxTokens != null ? { maxTokens } : {}),\n ...(temperature != null ? { temperature } : {}),\n ...(topP != null ? { topP } : {}),\n };\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n switch (mode.type) {\n case 'regular': {\n return {\n req: { ...req, ...prepareToolsAndToolChoice(mode) },\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n req,\n warnings,\n };\n }\n\n case 'object-tool': {\n const tool = {\n type: 'function',\n function: {\n name: mode.tool.name,\n params: mode.tool.parameters,\n },\n };\n return {\n req: { ...req, ...tool },\n warnings,\n };\n }\n\n default: {\n throw new Error('Unsupported type');\n }\n }\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV1StreamPart\n> {\n private usage: Extract<\n LanguageModelV1StreamPart,\n { type: 'finish' }\n >['usage'] = {\n promptTokens: 0,\n completionTokens: 0,\n };\n\n private finishReason: Extract<\n LanguageModelV1StreamPart,\n { type: 'finish' }\n >['finishReason'] = 'other';\n\n private functionCalls: LanguageModelV1FunctionToolCall[] = [];\n\n constructor() {\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV1StreamPart>\n ) => {\n const choice = chunk.results.at(0);\n if (!choice) {\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = {\n promptTokens:\n this.usage.promptTokens +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0),\n completionTokens:\n this.usage.completionTokens +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n };\n }\n\n if (choice.functionCalls) {\n for (const fc of choice.functionCalls) {\n const index = this.functionCalls.findIndex(\n (f) => f.toolCallId === fc.id\n );\n if (index === -1) {\n this.functionCalls.push({\n toolCallType: 'function' as const,\n toolCallId: fc.id,\n toolName: fc.function.name,\n args:\n typeof fc.function.params === 'string'\n ? fc.function.params\n : JSON.stringify(fc.function.params),\n });\n } else {\n const obj = this.functionCalls[index];\n if (!obj) {\n continue;\n }\n if (typeof fc.function.params === 'string') {\n obj.args = (obj.args ?? '') + fc.function.params;\n } else {\n obj.args = JSON.stringify(fc.function.params);\n }\n }\n this.finishReason = 'tool-calls';\n }\n }\n\n if (choice.content && choice.content.length > 0) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: choice.content ?? '',\n });\n this.finishReason = mapAxFinishReason(choice.finishReason);\n }\n },\n flush: (\n controller: TransformStreamDefaultController<LanguageModelV1StreamPart>\n ) => {\n for (const fc of this.functionCalls) {\n const tc = {\n type: 'tool-call' as const,\n ...fc,\n };\n controller.enqueue(tc);\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n controller.terminate();\n },\n };\n\n super(transformer);\n }\n}\n\ntype AnyZod =\n | z.AnyZodObject\n | z.ZodString\n | z.ZodNumber\n | z.ZodBoolean\n | z.ZodArray<AnyZod>\n | z.ZodOptional<AnyZod>;\n\nfunction convertToZodSchema(\n jsonSchema: Readonly<AxFunctionJSONSchema>\n): AnyZod {\n const { type, properties, required, items } = jsonSchema;\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'array':\n if (!items) {\n throw new Error(\"Array type must have 'items' property.\");\n }\n return z.array(convertToZodSchema(items));\n case 'object': {\n if (!properties) {\n throw new Error(\"Object type must have 'properties' property.\");\n }\n const shape: Record<string, AnyZod> = {};\n\n for (const [key, value] of Object.entries(properties)) {\n const schema = convertToZodSchema(value);\n let val = required?.includes(key) ? schema : schema.optional();\n val = value.description ? val.describe(value.description) : val;\n shape[key] = val;\n }\n return z.object(shape);\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../provider.ts","../../../node_modules/nanoid/index.js"],"sourcesContent":["// cspell:ignore Streamable\n\nimport {\n type ReadableStream,\n TransformStream,\n type TransformStreamDefaultController,\n} from 'node:stream/web';\nimport type {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2FinishReason,\n LanguageModelV2FunctionTool,\n LanguageModelV2ToolCall,\n LanguageModelV2Prompt,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n LanguageModelV2Content,\n LanguageModelV2ToolChoice,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport type {\n AxAIService,\n AxAgentic,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n} from '@ax-llm/ax/index.js';\nimport type { CoreMessage } from 'ai';\nimport { customAlphabet } from 'nanoid';\nimport type { ReactNode } from 'react';\nimport { z } from 'zod';\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\ntype AxChatRequestChatPrompt = Writeable<AxChatRequest['chatPrompt'][0]>;\n\ntype AxConfig = {\n fetch?: typeof fetch;\n};\n\ntype Streamable = ReactNode | Promise<ReactNode>;\ntype Renderer<T> = (\n args: T\n) =>\n | Streamable\n | Generator<Streamable, Streamable, void>\n | AsyncGenerator<Streamable, Streamable, void>;\n\nconst nanoid = customAlphabet(\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n 7\n);\n\nexport class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {\n private readonly config?: AxConfig;\n private readonly funcInfo: AxFunction;\n private generateFunction: Renderer<OUT>;\n private updateState: (msgs: readonly CoreMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly CoreMessage[]) => void;\n generate: Renderer<OUT>;\n config?: Readonly<AxConfig>;\n }>) {\n this.funcInfo = agent.getFunction();\n this.generateFunction = generate;\n this.updateState = updateState;\n this.config = config;\n }\n\n get description() {\n return this.funcInfo.description;\n }\n\n get parameters(): z.ZodTypeAny {\n const schema = this.funcInfo.parameters ?? {\n type: 'object',\n properties: {},\n };\n\n return convertToZodSchema(schema);\n }\n\n get generate(): Renderer<IN> {\n const fn = async (input: IN) => {\n const res = (await this.funcInfo.func(input)) as OUT;\n const toolCallId = nanoid();\n\n this.updateState([\n {\n role: 'assistant',\n content: [\n {\n type: 'tool-call',\n toolName: this.funcInfo.name,\n toolCallId,\n input: input,\n },\n ],\n },\n {\n role: 'tool',\n content: [\n {\n type: 'tool-result',\n toolName: this.funcInfo.name,\n toolCallId,\n output: { type: 'text' as const, value: JSON.stringify(res) },\n },\n ],\n },\n ]);\n\n return this.generateFunction(res);\n };\n return fn as Renderer<IN>;\n }\n}\n\nexport class AxAIProvider implements LanguageModelV2 {\n readonly specificationVersion = 'v2' as const;\n readonly supportedUrls: Record<string, RegExp[]> = {};\n\n private readonly ai: AxAIService;\n private readonly config?: AxConfig;\n\n public modelId: string;\n\n constructor(ai: AxAIService, config?: Readonly<AxConfig>) {\n this.ai = ai;\n this.config = config;\n this.modelId = this.ai.getName();\n }\n\n get provider(): string {\n return this.ai.getName();\n }\n\n async doGenerate(\n options: LanguageModelV2CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const req = createChatRequest(options);\n const res = (await this.ai.chat(req)) as AxChatResponse;\n const choice = res.results.at(0);\n\n if (!choice) {\n throw new Error('No choice returned');\n }\n\n const content: LanguageModelV2Content[] = [];\n\n if (choice.content) {\n content.push({ type: 'text', text: choice.content });\n }\n\n if (choice.functionCalls) {\n for (const tc of choice.functionCalls) {\n content.push({\n type: 'tool-call',\n toolCallId: tc.id,\n toolName: tc.function.name,\n input:\n typeof tc.function.params === 'string'\n ? tc.function.params\n : JSON.stringify(tc.function.params),\n });\n }\n }\n\n return {\n content,\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: {\n inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,\n outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,\n totalTokens:\n (res.modelUsage?.tokens?.promptTokens ?? 0) +\n (res.modelUsage?.tokens?.completionTokens ?? 0),\n },\n warnings: [] as LanguageModelV2CallWarning[],\n };\n }\n\n async doStream(\n options: LanguageModelV2CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const req = createChatRequest(options);\n\n const res = (await this.ai.chat(req, {\n stream: true,\n })) as ReadableStream<AxChatResponse>;\n\n return {\n stream: res.pipeThrough(new AxToSDKTransformer()) as any,\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n tools: Array<LanguageModelV2FunctionTool>,\n toolChoice?: LanguageModelV2ToolChoice\n): Pick<AxChatRequest, 'functions' | 'functionCall'> {\n // when the tools array is empty, change it to undefined to prevent errors:\n if (!tools || tools.length === 0) {\n return {};\n }\n const functions = tools.map((f) => ({\n name: f.name,\n description: f.description ?? '',\n parameters: f.inputSchema as AxFunctionJSONSchema,\n }));\n\n if (!toolChoice) {\n return { functions };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { functions, functionCall: 'auto' };\n case 'none':\n return { functions, functionCall: 'none' };\n case 'required':\n return { functions, functionCall: 'required' };\n case 'tool':\n return {\n functions,\n functionCall: {\n type: 'function',\n function: { name: toolChoice.toolName },\n },\n };\n default: {\n const ExhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${ExhaustiveCheck}`);\n }\n }\n}\n\nfunction convertToAxChatPrompt(\n prompt: Readonly<LanguageModelV2Prompt>\n): AxChatRequest['chatPrompt'] {\n const messages: AxChatRequest['chatPrompt'] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n messages.push({ role: 'system', content });\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n content: content.map((part) => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n case 'file': {\n if (!part.mediaType) {\n throw new Error('File part must have a mediaType');\n }\n let dataContent: string;\n if (typeof part.data === 'string') {\n dataContent = part.data;\n } else if (part.data instanceof URL) {\n dataContent = part.data.toString();\n } else {\n dataContent = Buffer.from(part.data).toString('base64');\n }\n return {\n type: 'image',\n mimeType: part.mediaType,\n image: dataContent,\n };\n }\n default:\n throw new Error(`Unsupported part: ${part}`);\n // case 'audio': {\n // if (!part.data) {\n // throw new Error('Audio part must have a audio');\n // }\n // if (!ArrayBuffer.isView(part.data)) {\n // throw new Error('Audio part must have an ArrayBuffer');\n // }\n // const data = Buffer.from(part.data).toString('base64');\n // return {\n // type: 'audio',\n // format: 'wav',\n // data\n // };\n // }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n let text = '';\n const toolCalls: Extract<\n AxChatRequestChatPrompt,\n { role: 'assistant' }\n >['functionCalls'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolCalls.push({\n id: part.toolCallId,\n type: 'function',\n function: {\n name: part.toolName,\n params:\n typeof part.input === 'string'\n ? JSON.parse(part.input)\n : part.input,\n },\n });\n break;\n }\n\n default: {\n const ExhaustiveCheck = part;\n throw new Error(`Unsupported part: ${ExhaustiveCheck}`);\n }\n }\n }\n\n const functionCalls = toolCalls.length === 0 ? undefined : toolCalls;\n\n if (functionCalls || text.length > 0) {\n messages.push({\n role: 'assistant',\n content: text,\n functionCalls,\n });\n }\n\n break;\n }\n case 'tool': {\n for (const part of content) {\n messages.push({\n role: 'function' as const,\n functionId: part.toolCallId,\n result:\n typeof part.output === 'object' && part.output?.type === 'text'\n ? part.output.value\n : JSON.stringify(part.output, null, 2),\n });\n }\n break;\n }\n default: {\n const ExhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${ExhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n\nfunction mapAxFinishReason(\n finishReason: AxChatResponseResult['finishReason']\n): LanguageModelV2FinishReason {\n switch (finishReason) {\n case 'stop':\n return 'stop';\n case 'length':\n return 'length';\n case 'function_call':\n return 'tool-calls';\n default:\n return 'other';\n }\n}\n\nfunction createChatRequest({\n tools,\n toolChoice,\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n //seed,\n}: Readonly<LanguageModelV2CallOptions>): AxChatRequest {\n const req: AxChatRequest = {\n chatPrompt: convertToAxChatPrompt(prompt),\n ...(frequencyPenalty != null ? { frequencyPenalty } : {}),\n ...(presencePenalty != null ? { presencePenalty } : {}),\n ...(maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {}),\n ...(temperature != null ? { temperature } : {}),\n ...(topP != null ? { topP } : {}),\n };\n\n if (tools && tools.length > 0) {\n const functionTools = tools.filter(\n (tool): tool is LanguageModelV2FunctionTool => tool.type === 'function'\n );\n return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };\n }\n\n return req;\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV2StreamPart\n> {\n private usage: LanguageModelV2Usage = {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n };\n\n private finishReason: LanguageModelV2FinishReason = 'other';\n\n private functionCalls: LanguageModelV2ToolCall[] = [];\n private hasStarted = false;\n private textStarted = false;\n\n constructor() {\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV2StreamPart>\n ) => {\n // Emit stream-start event only once\n if (!this.hasStarted) {\n controller.enqueue({\n type: 'stream-start',\n warnings: [] as LanguageModelV2CallWarning[],\n });\n this.hasStarted = true;\n }\n\n const choice = chunk.results.at(0);\n if (!choice) {\n // End text if it was started\n if (this.textStarted) {\n controller.enqueue({\n type: 'text-end',\n id: 'text-content',\n });\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = {\n inputTokens:\n (this.usage.inputTokens ?? 0) +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0),\n outputTokens:\n (this.usage.outputTokens ?? 0) +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n totalTokens:\n (this.usage.totalTokens ?? 0) +\n (chunk.modelUsage?.tokens?.promptTokens ?? 0) +\n (chunk.modelUsage.tokens?.completionTokens ?? 0),\n };\n }\n\n if (choice.functionCalls) {\n for (const fc of choice.functionCalls) {\n const index = this.functionCalls.findIndex(\n (f) => f.toolCallId === fc.id\n );\n if (index === -1) {\n this.functionCalls.push({\n type: 'tool-call' as const,\n toolCallId: fc.id,\n toolName: fc.function.name,\n input:\n typeof fc.function.params === 'string'\n ? fc.function.params\n : JSON.stringify(fc.function.params),\n });\n } else {\n const obj = this.functionCalls[index];\n if (!obj) {\n continue;\n }\n if (typeof fc.function.params === 'string') {\n obj.input = ((obj.input as string) || '') + fc.function.params;\n } else {\n obj.input = JSON.stringify(fc.function.params);\n }\n }\n this.finishReason = 'tool-calls';\n }\n }\n\n if (choice.content && choice.content.length > 0) {\n // Start text stream if not started\n if (!this.textStarted) {\n controller.enqueue({\n type: 'text-start',\n id: 'text-content',\n });\n this.textStarted = true;\n }\n\n controller.enqueue({\n type: 'text-delta',\n id: 'text-content',\n delta: choice.content ?? '',\n });\n this.finishReason = mapAxFinishReason(choice.finishReason);\n }\n },\n flush: (\n controller: TransformStreamDefaultController<LanguageModelV2StreamPart>\n ) => {\n // End text stream if it was started\n if (this.textStarted) {\n controller.enqueue({\n type: 'text-end',\n id: 'text-content',\n });\n }\n\n for (const fc of this.functionCalls) {\n controller.enqueue(fc);\n }\n\n const val = {\n type: 'finish' as const,\n finishReason: this.finishReason,\n usage: this.usage,\n };\n controller.enqueue(val);\n controller.terminate();\n },\n };\n\n super(transformer);\n }\n}\n\ntype AnyZod =\n | z.AnyZodObject\n | z.ZodString\n | z.ZodNumber\n | z.ZodBoolean\n | z.ZodArray<AnyZod>\n | z.ZodOptional<AnyZod>;\n\nfunction convertToZodSchema(\n jsonSchema: Readonly<AxFunctionJSONSchema>\n): AnyZod {\n const { type, properties, required, items } = jsonSchema;\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'boolean':\n return z.boolean();\n case 'array':\n if (!items) {\n throw new Error(\"Array type must have 'items' property.\");\n }\n return z.array(convertToZodSchema(items));\n case 'object': {\n if (!properties) {\n throw new Error(\"Object type must have 'properties' property.\");\n }\n const shape: Record<string, AnyZod> = {};\n\n for (const [key, value] of Object.entries(properties)) {\n const schema = convertToZodSchema(value);\n let val = required?.includes(key) ? schema : schema.optional();\n val = value.description ? val.describe(value.description) : val;\n shape[key] = val;\n }\n return z.object(shape);\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n","import crypto from 'crypto'\nimport { urlAlphabet } from './url-alphabet/index.js'\nconst POOL_SIZE_MULTIPLIER = 128\nlet pool, poolOffset\nlet fillPool = bytes => {\n if (!pool || pool.length < bytes) {\n pool = Buffer.allocUnsafe(bytes * POOL_SIZE_MULTIPLIER)\n crypto.randomFillSync(pool)\n poolOffset = 0\n } else if (poolOffset + bytes > pool.length) {\n crypto.randomFillSync(pool)\n poolOffset = 0\n }\n poolOffset += bytes\n}\nlet random = bytes => {\n fillPool((bytes |= 0))\n return pool.subarray(poolOffset - bytes, poolOffset)\n}\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (31 - Math.clz32((alphabet.length - 1) | 1))) - 1\n let step = Math.ceil((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let i = step\n while (i--) {\n id += alphabet[bytes[i] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n fillPool((size |= 0))\n let id = ''\n for (let i = poolOffset - size; i < poolOffset; i++) {\n id += urlAlphabet[pool[i] & 63]\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ax-llm/ax-ai-sdk-provider",
3
- "version": "14.0.26",
3
+ "version": "14.0.27",
4
4
  "type": "module",
5
5
  "description": "Ax AI SDK Provider for the Vercel AI SDK",
6
6
  "repository": {
@@ -13,9 +13,9 @@
13
13
  "license": "Apache-2.0",
14
14
  "keywords": [],
15
15
  "dependencies": {
16
- "@ai-sdk/provider-utils": "^2.1.13",
17
- "@ax-llm/ax": "14.0.26",
18
- "ai": "^4.1.61",
16
+ "@ai-sdk/provider-utils": "^3.0.10",
17
+ "@ax-llm/ax": "14.0.27",
18
+ "ai": "^5.0.50",
19
19
  "zod": "^3.23.8"
20
20
  },
21
21
  "bugs": {