@ax-llm/ax-ai-sdk-provider 14.0.25 → 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 +95 -83
- package/index.cjs.map +1 -1
- package/index.d.cts +6 -6
- package/index.d.ts +6 -6
- package/index.js +95 -83
- package/index.js.map +1 -1
- package/package.json +4 -4
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
|
-
|
|
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
|
-
|
|
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 = "
|
|
145
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
175
|
-
|
|
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
|
-
|
|
178
|
-
warnings
|
|
186
|
+
warnings: []
|
|
179
187
|
};
|
|
180
188
|
}
|
|
181
189
|
async doStream(options) {
|
|
182
|
-
const
|
|
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(
|
|
194
|
-
if (!
|
|
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:
|
|
201
|
-
parameters: f.
|
|
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 "
|
|
246
|
-
if (!part.
|
|
247
|
-
throw new Error("
|
|
249
|
+
case "file": {
|
|
250
|
+
if (!part.mediaType) {
|
|
251
|
+
throw new Error("File part must have a mediaType");
|
|
248
252
|
}
|
|
249
|
-
|
|
250
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
341
|
+
tools,
|
|
342
|
+
toolChoice,
|
|
334
343
|
prompt,
|
|
335
|
-
|
|
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
|
-
...
|
|
355
|
+
...maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {},
|
|
347
356
|
...temperature != null ? { temperature } : {},
|
|
348
357
|
...topP != null ? { topP } : {}
|
|
349
358
|
};
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
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
|
-
|
|
385
|
-
|
|
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
|
-
|
|
405
|
-
|
|
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
|
-
|
|
417
|
+
type: "tool-call",
|
|
416
418
|
toolCallId: fc.id,
|
|
417
419
|
toolName: fc.function.name,
|
|
418
|
-
|
|
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.
|
|
428
|
+
obj.input = (obj.input || "") + fc.function.params;
|
|
427
429
|
} else {
|
|
428
|
-
obj.
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
28
|
-
readonly specificationVersion
|
|
29
|
-
readonly
|
|
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:
|
|
36
|
-
doStream(options:
|
|
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 {
|
|
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
|
|
28
|
-
readonly specificationVersion
|
|
29
|
-
readonly
|
|
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:
|
|
36
|
-
doStream(options:
|
|
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
|
-
|
|
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
|
-
|
|
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 = "
|
|
110
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
143
|
-
warnings
|
|
151
|
+
warnings: []
|
|
144
152
|
};
|
|
145
153
|
}
|
|
146
154
|
async doStream(options) {
|
|
147
|
-
const
|
|
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(
|
|
159
|
-
if (!
|
|
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:
|
|
166
|
-
parameters: f.
|
|
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 "
|
|
211
|
-
if (!part.
|
|
212
|
-
throw new Error("
|
|
214
|
+
case "file": {
|
|
215
|
+
if (!part.mediaType) {
|
|
216
|
+
throw new Error("File part must have a mediaType");
|
|
213
217
|
}
|
|
214
|
-
|
|
215
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
306
|
+
tools,
|
|
307
|
+
toolChoice,
|
|
299
308
|
prompt,
|
|
300
|
-
|
|
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
|
-
...
|
|
320
|
+
...maxOutputTokens != null ? { maxTokens: maxOutputTokens } : {},
|
|
312
321
|
...temperature != null ? { temperature } : {},
|
|
313
322
|
...topP != null ? { topP } : {}
|
|
314
323
|
};
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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
|
-
|
|
350
|
-
|
|
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
|
-
|
|
370
|
-
|
|
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
|
-
|
|
382
|
+
type: "tool-call",
|
|
381
383
|
toolCallId: fc.id,
|
|
382
384
|
toolName: fc.function.name,
|
|
383
|
-
|
|
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.
|
|
393
|
+
obj.input = (obj.input || "") + fc.function.params;
|
|
392
394
|
} else {
|
|
393
|
-
obj.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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": "^
|
|
17
|
-
"@ax-llm/ax": "14.0.
|
|
18
|
-
"ai": "^
|
|
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": {
|