@ax-llm/ax-ai-sdk-provider 22.0.6 → 22.0.8
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/README.md +22 -52
- package/index.cjs +77 -24
- package/index.cjs.map +1 -1
- package/index.d.cts +7 -7
- package/index.d.ts +7 -7
- package/index.js +76 -25
- package/index.js.map +1 -1
- package/package.json +9 -6
package/README.md
CHANGED
|
@@ -6,70 +6,40 @@ Install the ax provider package
|
|
|
6
6
|
npm i @ax-llm/ax-ai-sdk-provider
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
### AI SDK
|
|
9
|
+
### AI SDK v7 Compatibility
|
|
10
10
|
|
|
11
|
-
This provider is
|
|
11
|
+
This provider is compatible with **AI SDK v7** and implements the `LanguageModelV3` specification. It supports:
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
13
|
+
- **Text Generation**: Standard text completion and chat functionality
|
|
14
|
+
- **Tool Calling**: Function calls with proper serialization/deserialization
|
|
15
|
+
- **Streaming**: Streaming lifecycle events (`stream-start`, `text-start`, `text-delta`, `text-end`, `finish`)
|
|
16
|
+
- **Multi-modal**: Support for text and file inputs (images, documents)
|
|
17
|
+
- **Token Usage**: AI SDK v7 usage shape with nested `inputTokens` and `outputTokens`
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
AI SDK v7 requires Node.js 22+, uses `LanguageModelV3` provider models, and keeps React Server Component helpers such as `streamUI` in `@ai-sdk/rsc`.
|
|
20
20
|
|
|
21
21
|
## Usage
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Use `AxAIProvider` anywhere AI SDK v7 accepts a language model.
|
|
24
24
|
|
|
25
25
|
```typescript
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
// Create a model using the provider
|
|
32
|
-
const model = new AxAIProvider(ai);
|
|
26
|
+
import { generateText } from 'ai';
|
|
27
|
+
import { ai } from '@ax-llm/ax';
|
|
28
|
+
import { AxAIProvider } from '@ax-llm/ax-ai-sdk-provider';
|
|
33
29
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"Use this agent to find restaurants based on what the customer wants",
|
|
38
|
-
signature,
|
|
39
|
-
functions,
|
|
30
|
+
const axAI = ai({
|
|
31
|
+
name: 'openai',
|
|
32
|
+
apiKey: process.env.OPENAI_APIKEY ?? '',
|
|
40
33
|
});
|
|
41
34
|
|
|
42
|
-
|
|
43
|
-
const aiState = getMutableAIState();
|
|
35
|
+
const model = new AxAIProvider(axAI);
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
updateState: (state) => {
|
|
49
|
-
aiState.done({ ...aiState.get(), state });
|
|
50
|
-
},
|
|
51
|
-
generate: async ({ restaurant, priceRange }) => {
|
|
52
|
-
return (
|
|
53
|
-
<BotCard>
|
|
54
|
-
<h1>{restaurant as string} {priceRange as string}</h1>
|
|
55
|
-
</BotCard>
|
|
56
|
-
);
|
|
57
|
-
},
|
|
37
|
+
const result = await generateText({
|
|
38
|
+
model,
|
|
39
|
+
prompt: 'Write a haiku about typed AI SDK providers.',
|
|
58
40
|
});
|
|
59
41
|
|
|
60
|
-
|
|
61
|
-
const result = await streamUI({
|
|
62
|
-
model,
|
|
63
|
-
initial: <SpinnerMessage />,
|
|
64
|
-
messages: [
|
|
65
|
-
// ...
|
|
66
|
-
],
|
|
67
|
-
text: ({ content, done, delta }) => {
|
|
68
|
-
// ...
|
|
69
|
-
},
|
|
70
|
-
tools: {
|
|
71
|
-
// @ts-ignore
|
|
72
|
-
"find-food": foodAgent,
|
|
73
|
-
},
|
|
74
|
-
});
|
|
42
|
+
console.log(result.text);
|
|
75
43
|
```
|
|
44
|
+
|
|
45
|
+
For React Server Component helpers such as `streamUI`, install `@ai-sdk/rsc` and import those helpers from that package.
|
package/index.cjs
CHANGED
|
@@ -35,9 +35,6 @@ __export(index_exports, {
|
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(index_exports);
|
|
37
37
|
|
|
38
|
-
// provider.ts
|
|
39
|
-
var import_web = require("stream/web");
|
|
40
|
-
|
|
41
38
|
// ../../node_modules/nanoid/index.js
|
|
42
39
|
var import_crypto = __toESM(require("crypto"), 1);
|
|
43
40
|
var POOL_SIZE_MULTIPLIER = 128;
|
|
@@ -205,7 +202,7 @@ var AxAgentProvider = class {
|
|
|
205
202
|
}
|
|
206
203
|
};
|
|
207
204
|
var AxAIProvider = class {
|
|
208
|
-
specificationVersion = "
|
|
205
|
+
specificationVersion = "v3";
|
|
209
206
|
supportedUrls = {};
|
|
210
207
|
ai;
|
|
211
208
|
config;
|
|
@@ -246,11 +243,7 @@ var AxAIProvider = class {
|
|
|
246
243
|
return {
|
|
247
244
|
content,
|
|
248
245
|
finishReason: mapAxFinishReason(choice.finishReason),
|
|
249
|
-
usage:
|
|
250
|
-
inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
|
|
251
|
-
outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,
|
|
252
|
-
totalTokens: (res.modelUsage?.tokens?.promptTokens ?? 0) + (res.modelUsage?.tokens?.completionTokens ?? 0)
|
|
253
|
-
},
|
|
246
|
+
usage: createUsage(res.modelUsage?.tokens),
|
|
254
247
|
...providerMetadata ? { providerMetadata } : {},
|
|
255
248
|
...response ? { response } : {},
|
|
256
249
|
warnings: []
|
|
@@ -379,6 +372,9 @@ function convertToAxChatPrompt(prompt) {
|
|
|
379
372
|
}
|
|
380
373
|
case "tool": {
|
|
381
374
|
for (const part of content) {
|
|
375
|
+
if (part.type !== "tool-result") {
|
|
376
|
+
throw new Error(`Unsupported part: ${part.type}`);
|
|
377
|
+
}
|
|
382
378
|
messages.push({
|
|
383
379
|
role: "function",
|
|
384
380
|
functionId: part.toolCallId,
|
|
@@ -396,15 +392,20 @@ function convertToAxChatPrompt(prompt) {
|
|
|
396
392
|
return messages;
|
|
397
393
|
}
|
|
398
394
|
function mapAxFinishReason(finishReason) {
|
|
395
|
+
const raw = finishReason;
|
|
399
396
|
switch (finishReason) {
|
|
400
397
|
case "stop":
|
|
401
|
-
return "stop";
|
|
398
|
+
return { unified: "stop", raw };
|
|
402
399
|
case "length":
|
|
403
|
-
return "length";
|
|
400
|
+
return { unified: "length", raw };
|
|
404
401
|
case "function_call":
|
|
405
|
-
return "tool-calls";
|
|
402
|
+
return { unified: "tool-calls", raw };
|
|
403
|
+
case "content_filter":
|
|
404
|
+
return { unified: "content-filter", raw };
|
|
405
|
+
case "error":
|
|
406
|
+
return { unified: "error", raw };
|
|
406
407
|
default:
|
|
407
|
-
return "other";
|
|
408
|
+
return { unified: "other", raw };
|
|
408
409
|
}
|
|
409
410
|
}
|
|
410
411
|
function createChatRequest({
|
|
@@ -434,13 +435,69 @@ function createChatRequest({
|
|
|
434
435
|
}
|
|
435
436
|
return req;
|
|
436
437
|
}
|
|
437
|
-
|
|
438
|
+
function createUsage(tokens) {
|
|
439
|
+
return {
|
|
440
|
+
inputTokens: {
|
|
441
|
+
total: tokens?.promptTokens,
|
|
442
|
+
noCache: void 0,
|
|
443
|
+
cacheRead: tokens?.cacheReadTokens,
|
|
444
|
+
cacheWrite: tokens?.cacheCreationTokens
|
|
445
|
+
},
|
|
446
|
+
outputTokens: {
|
|
447
|
+
total: tokens?.completionTokens,
|
|
448
|
+
text: void 0,
|
|
449
|
+
reasoning: tokens?.reasoningTokens
|
|
450
|
+
}
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
function addUsage(usage, tokens) {
|
|
454
|
+
return {
|
|
455
|
+
inputTokens: {
|
|
456
|
+
...usage.inputTokens,
|
|
457
|
+
total: (usage.inputTokens.total ?? 0) + (tokens?.promptTokens ?? 0),
|
|
458
|
+
cacheRead: addOptionalUsage(
|
|
459
|
+
usage.inputTokens.cacheRead,
|
|
460
|
+
tokens?.cacheReadTokens
|
|
461
|
+
),
|
|
462
|
+
cacheWrite: addOptionalUsage(
|
|
463
|
+
usage.inputTokens.cacheWrite,
|
|
464
|
+
tokens?.cacheCreationTokens
|
|
465
|
+
)
|
|
466
|
+
},
|
|
467
|
+
outputTokens: {
|
|
468
|
+
...usage.outputTokens,
|
|
469
|
+
total: (usage.outputTokens.total ?? 0) + (tokens?.completionTokens ?? 0),
|
|
470
|
+
reasoning: addOptionalUsage(
|
|
471
|
+
usage.outputTokens.reasoning,
|
|
472
|
+
tokens?.reasoningTokens
|
|
473
|
+
)
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
function addOptionalUsage(current, next) {
|
|
478
|
+
if (next === void 0) {
|
|
479
|
+
return current;
|
|
480
|
+
}
|
|
481
|
+
return (current ?? 0) + next;
|
|
482
|
+
}
|
|
483
|
+
var AxToSDKTransformer = class extends TransformStream {
|
|
438
484
|
usage = {
|
|
439
|
-
inputTokens:
|
|
440
|
-
|
|
441
|
-
|
|
485
|
+
inputTokens: {
|
|
486
|
+
total: 0,
|
|
487
|
+
noCache: void 0,
|
|
488
|
+
cacheRead: void 0,
|
|
489
|
+
cacheWrite: void 0
|
|
490
|
+
},
|
|
491
|
+
outputTokens: {
|
|
492
|
+
total: 0,
|
|
493
|
+
text: void 0,
|
|
494
|
+
reasoning: void 0
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
finishReason = {
|
|
498
|
+
unified: "other",
|
|
499
|
+
raw: void 0
|
|
442
500
|
};
|
|
443
|
-
finishReason = "other";
|
|
444
501
|
functionCalls = [];
|
|
445
502
|
providerMetadata;
|
|
446
503
|
responseMetadataSent = false;
|
|
@@ -491,11 +548,7 @@ var AxToSDKTransformer = class extends import_web.TransformStream {
|
|
|
491
548
|
return;
|
|
492
549
|
}
|
|
493
550
|
if (chunk.modelUsage) {
|
|
494
|
-
this.usage =
|
|
495
|
-
inputTokens: (this.usage.inputTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
|
|
496
|
-
outputTokens: (this.usage.outputTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0),
|
|
497
|
-
totalTokens: (this.usage.totalTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0)
|
|
498
|
-
};
|
|
551
|
+
this.usage = addUsage(this.usage, chunk.modelUsage.tokens);
|
|
499
552
|
}
|
|
500
553
|
if (choice.functionCalls) {
|
|
501
554
|
for (const fc of choice.functionCalls) {
|
|
@@ -520,7 +573,7 @@ var AxToSDKTransformer = class extends import_web.TransformStream {
|
|
|
520
573
|
obj.input = JSON.stringify(fc.function.params);
|
|
521
574
|
}
|
|
522
575
|
}
|
|
523
|
-
this.finishReason = "tool-calls";
|
|
576
|
+
this.finishReason = { unified: "tool-calls", raw: "function_call" };
|
|
524
577
|
}
|
|
525
578
|
}
|
|
526
579
|
if (choice.content && choice.content.length > 0) {
|
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 JSONValue,\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2FinishReason,\n LanguageModelV2FunctionTool,\n LanguageModelV2Prompt,\n LanguageModelV2StreamPart,\n LanguageModelV2ToolCall,\n LanguageModelV2ToolChoice,\n LanguageModelV2Usage,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport type {\n AxAgentic,\n AxAIService,\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 AxResponseLike = Pick<\n AxChatResponse,\n | 'sessionId'\n | 'remoteId'\n | 'remoteRequestId'\n | 'remoteSessionId'\n | 'providerMetadata'\n | 'modelUsage'\n>;\n\nfunction toJSONValue(value: unknown): JSONValue | undefined {\n if (value === null) return null;\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value\n .map((item) => toJSONValue(item))\n .filter((item): item is JSONValue => item !== undefined);\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value)\n .map(([key, nested]) => [key, toJSONValue(nested)] as const)\n .filter((entry): entry is readonly [string, JSONValue] => {\n return entry[1] !== undefined;\n });\n return Object.fromEntries(entries) as JSONValue;\n }\n return undefined;\n}\n\nfunction mergeProviderMetadata(\n base?: SharedV2ProviderMetadata,\n next?: SharedV2ProviderMetadata\n): SharedV2ProviderMetadata | undefined {\n if (!base && !next) return undefined;\n const merged: SharedV2ProviderMetadata = {};\n for (const source of [base, next]) {\n if (!source) continue;\n for (const [provider, metadata] of Object.entries(source)) {\n merged[provider] = {\n ...(merged[provider] ?? {}),\n ...metadata,\n };\n }\n }\n return merged;\n}\n\nfunction createProviderMetadata(\n res: Readonly<AxResponseLike>,\n provider: string\n): SharedV2ProviderMetadata | undefined {\n let metadata: SharedV2ProviderMetadata | undefined;\n\n if (res.providerMetadata) {\n metadata = {};\n for (const [providerName, providerMetadata] of Object.entries(\n res.providerMetadata\n )) {\n const jsonProviderMetadata = toJSONValue(providerMetadata);\n if (\n jsonProviderMetadata &&\n typeof jsonProviderMetadata === 'object' &&\n !Array.isArray(jsonProviderMetadata)\n ) {\n metadata[providerName] = jsonProviderMetadata;\n }\n }\n }\n\n const axMetadata = {\n ...(res.sessionId ? { sessionId: res.sessionId } : {}),\n ...(res.remoteRequestId ? { requestId: res.remoteRequestId } : {}),\n ...(res.remoteSessionId ? { remoteSessionId: res.remoteSessionId } : {}),\n };\n\n if (Object.keys(axMetadata).length > 0) {\n metadata = mergeProviderMetadata(metadata, {\n [provider]: axMetadata,\n });\n }\n\n return metadata;\n}\n\nfunction createResponseMetadata(res: Readonly<AxResponseLike>) {\n if (!res.remoteId && !res.modelUsage?.model) {\n return undefined;\n }\n return {\n ...(res.remoteId ? { id: res.remoteId } : {}),\n ...(res.modelUsage?.model ? { modelId: res.modelUsage.model } : {}),\n };\n}\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, {\n stream: false,\n })) 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 const providerMetadata = createProviderMetadata(res, this.provider);\n const response = createResponseMetadata(res);\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 ...(providerMetadata ? { providerMetadata } : {}),\n ...(response ? { response } : {}),\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(this.provider)) 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 providerMetadata: SharedV2ProviderMetadata | undefined;\n private responseMetadataSent = false;\n private hasStarted = false;\n private textStarted = false;\n\n constructor(provider: string) {\n const providerName = provider;\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 chunkProviderMetadata = createProviderMetadata(\n chunk,\n providerName\n );\n this.providerMetadata = mergeProviderMetadata(\n this.providerMetadata,\n chunkProviderMetadata\n );\n\n const responseMetadata = createResponseMetadata(chunk);\n if (!this.responseMetadataSent && responseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...responseMetadata,\n });\n this.responseMetadataSent = 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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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","../../../node_modules/nanoid/index.js","../provider.ts"],"sourcesContent":["import { AxAgentProvider, AxAIProvider } from './provider.js';\n\nexport { AxAgentProvider, AxAIProvider };\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","// cspell:ignore Streamable\n\nimport type {\n JSONValue,\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3Prompt,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n LanguageModelV3ToolChoice,\n LanguageModelV3Usage,\n SharedV3ProviderMetadata,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type {\n AxAgentic,\n AxAIService,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n AxTokenUsage,\n} from '@ax-llm/ax/index.js';\nimport type { ModelMessage } 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 AxResponseLike = Pick<\n AxChatResponse,\n | 'sessionId'\n | 'remoteId'\n | 'remoteRequestId'\n | 'remoteSessionId'\n | 'providerMetadata'\n | 'modelUsage'\n>;\n\nfunction toJSONValue(value: unknown): JSONValue | undefined {\n if (value === null) return null;\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value\n .map((item) => toJSONValue(item))\n .filter((item): item is JSONValue => item !== undefined);\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value)\n .map(([key, nested]) => [key, toJSONValue(nested)] as const)\n .filter((entry): entry is readonly [string, JSONValue] => {\n return entry[1] !== undefined;\n });\n return Object.fromEntries(entries) as JSONValue;\n }\n return undefined;\n}\n\nfunction mergeProviderMetadata(\n base?: SharedV3ProviderMetadata,\n next?: SharedV3ProviderMetadata\n): SharedV3ProviderMetadata | undefined {\n if (!base && !next) return undefined;\n const merged: SharedV3ProviderMetadata = {};\n for (const source of [base, next]) {\n if (!source) continue;\n for (const [provider, metadata] of Object.entries(source)) {\n merged[provider] = {\n ...(merged[provider] ?? {}),\n ...metadata,\n };\n }\n }\n return merged;\n}\n\nfunction createProviderMetadata(\n res: Readonly<AxResponseLike>,\n provider: string\n): SharedV3ProviderMetadata | undefined {\n let metadata: SharedV3ProviderMetadata | undefined;\n\n if (res.providerMetadata) {\n metadata = {};\n for (const [providerName, providerMetadata] of Object.entries(\n res.providerMetadata\n )) {\n const jsonProviderMetadata = toJSONValue(providerMetadata);\n if (\n jsonProviderMetadata &&\n typeof jsonProviderMetadata === 'object' &&\n !Array.isArray(jsonProviderMetadata)\n ) {\n metadata[providerName] = jsonProviderMetadata;\n }\n }\n }\n\n const axMetadata = {\n ...(res.sessionId ? { sessionId: res.sessionId } : {}),\n ...(res.remoteRequestId ? { requestId: res.remoteRequestId } : {}),\n ...(res.remoteSessionId ? { remoteSessionId: res.remoteSessionId } : {}),\n };\n\n if (Object.keys(axMetadata).length > 0) {\n metadata = mergeProviderMetadata(metadata, {\n [provider]: axMetadata,\n });\n }\n\n return metadata;\n}\n\nfunction createResponseMetadata(res: Readonly<AxResponseLike>) {\n if (!res.remoteId && !res.modelUsage?.model) {\n return undefined;\n }\n return {\n ...(res.remoteId ? { id: res.remoteId } : {}),\n ...(res.modelUsage?.model ? { modelId: res.modelUsage.model } : {}),\n };\n}\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 ModelMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly ModelMessage[]) => 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 LanguageModelV3 {\n readonly specificationVersion = 'v3' 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: LanguageModelV3CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const req = createChatRequest(options);\n const res = (await this.ai.chat(req, {\n stream: false,\n })) 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: LanguageModelV3Content[] = [];\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 const providerMetadata = createProviderMetadata(res, this.provider);\n const response = createResponseMetadata(res);\n\n return {\n content,\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: createUsage(res.modelUsage?.tokens),\n ...(providerMetadata ? { providerMetadata } : {}),\n ...(response ? { response } : {}),\n warnings: [] as SharedV3Warning[],\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV3['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(this.provider)),\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n tools: Array<LanguageModelV3FunctionTool>,\n toolChoice?: LanguageModelV3ToolChoice\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<LanguageModelV3Prompt>\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 if (part.type !== 'tool-result') {\n throw new Error(`Unsupported part: ${part.type}`);\n }\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): LanguageModelV3FinishReason {\n const raw = finishReason;\n switch (finishReason) {\n case 'stop':\n return { unified: 'stop', raw };\n case 'length':\n return { unified: 'length', raw };\n case 'function_call':\n return { unified: 'tool-calls', raw };\n case 'content_filter':\n return { unified: 'content-filter', raw };\n case 'error':\n return { unified: 'error', raw };\n default:\n return { unified: 'other', raw };\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<LanguageModelV3CallOptions>): 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 LanguageModelV3FunctionTool => tool.type === 'function'\n );\n return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };\n }\n\n return req;\n}\n\nfunction createUsage(tokens?: Readonly<AxTokenUsage>): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: tokens?.promptTokens,\n noCache: undefined,\n cacheRead: tokens?.cacheReadTokens,\n cacheWrite: tokens?.cacheCreationTokens,\n },\n outputTokens: {\n total: tokens?.completionTokens,\n text: undefined,\n reasoning: tokens?.reasoningTokens,\n },\n };\n}\n\nfunction addUsage(\n usage: Readonly<LanguageModelV3Usage>,\n tokens?: Readonly<AxTokenUsage>\n): LanguageModelV3Usage {\n return {\n inputTokens: {\n ...usage.inputTokens,\n total: (usage.inputTokens.total ?? 0) + (tokens?.promptTokens ?? 0),\n cacheRead: addOptionalUsage(\n usage.inputTokens.cacheRead,\n tokens?.cacheReadTokens\n ),\n cacheWrite: addOptionalUsage(\n usage.inputTokens.cacheWrite,\n tokens?.cacheCreationTokens\n ),\n },\n outputTokens: {\n ...usage.outputTokens,\n total: (usage.outputTokens.total ?? 0) + (tokens?.completionTokens ?? 0),\n reasoning: addOptionalUsage(\n usage.outputTokens.reasoning,\n tokens?.reasoningTokens\n ),\n },\n };\n}\n\nfunction addOptionalUsage(\n current: number | undefined,\n next: number | undefined\n): number | undefined {\n if (next === undefined) {\n return current;\n }\n return (current ?? 0) + next;\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV3StreamPart\n> {\n private usage: LanguageModelV3Usage = {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n private finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n\n private functionCalls: LanguageModelV3ToolCall[] = [];\n private providerMetadata: SharedV3ProviderMetadata | undefined;\n private responseMetadataSent = false;\n private hasStarted = false;\n private textStarted = false;\n\n constructor(provider: string) {\n const providerName = provider;\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n // Emit stream-start event only once\n if (!this.hasStarted) {\n controller.enqueue({\n type: 'stream-start',\n warnings: [] as SharedV3Warning[],\n });\n this.hasStarted = true;\n }\n\n const chunkProviderMetadata = createProviderMetadata(\n chunk,\n providerName\n );\n this.providerMetadata = mergeProviderMetadata(\n this.providerMetadata,\n chunkProviderMetadata\n );\n\n const responseMetadata = createResponseMetadata(chunk);\n if (!this.responseMetadataSent && responseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...responseMetadata,\n });\n this.responseMetadataSent = 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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = addUsage(this.usage, chunk.modelUsage.tokens);\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 = { unified: 'tool-calls', raw: 'function_call' };\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<LanguageModelV3StreamPart>\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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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"],"mappings":"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","names":["crypto"]}
|
package/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LanguageModelV3, LanguageModelV3CallOptions } from '@ai-sdk/provider';
|
|
2
2
|
import { AxAIService, AxGenIn, AxGenOut, AxAgentic } from '@ax-llm/ax/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ModelMessage } from 'ai';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ declare class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {
|
|
|
16
16
|
private updateState;
|
|
17
17
|
constructor({ agent, updateState, generate, config, }: Readonly<{
|
|
18
18
|
agent: AxAgentic<IN, OUT>;
|
|
19
|
-
updateState: (msgs: readonly
|
|
19
|
+
updateState: (msgs: readonly ModelMessage[]) => void;
|
|
20
20
|
generate: Renderer<OUT>;
|
|
21
21
|
config?: Readonly<AxConfig>;
|
|
22
22
|
}>);
|
|
@@ -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: "
|
|
27
|
+
declare class AxAIProvider implements LanguageModelV3 {
|
|
28
|
+
readonly specificationVersion: "v3";
|
|
29
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: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>>;
|
|
36
|
+
doStream(options: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>>;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export { AxAIProvider, AxAgentProvider };
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LanguageModelV3, LanguageModelV3CallOptions } from '@ai-sdk/provider';
|
|
2
2
|
import { AxAIService, AxGenIn, AxGenOut, AxAgentic } from '@ax-llm/ax/index.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ModelMessage } from 'ai';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ declare class AxAgentProvider<IN extends AxGenIn, OUT extends AxGenOut> {
|
|
|
16
16
|
private updateState;
|
|
17
17
|
constructor({ agent, updateState, generate, config, }: Readonly<{
|
|
18
18
|
agent: AxAgentic<IN, OUT>;
|
|
19
|
-
updateState: (msgs: readonly
|
|
19
|
+
updateState: (msgs: readonly ModelMessage[]) => void;
|
|
20
20
|
generate: Renderer<OUT>;
|
|
21
21
|
config?: Readonly<AxConfig>;
|
|
22
22
|
}>);
|
|
@@ -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: "
|
|
27
|
+
declare class AxAIProvider implements LanguageModelV3 {
|
|
28
|
+
readonly specificationVersion: "v3";
|
|
29
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: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>>;
|
|
36
|
+
doStream(options: LanguageModelV3CallOptions): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>>;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export { AxAIProvider, AxAgentProvider };
|
package/index.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
// provider.ts
|
|
2
|
-
import {
|
|
3
|
-
TransformStream
|
|
4
|
-
} from "stream/web";
|
|
5
|
-
|
|
6
1
|
// ../../node_modules/nanoid/index.js
|
|
7
2
|
import crypto from "crypto";
|
|
8
3
|
var POOL_SIZE_MULTIPLIER = 128;
|
|
@@ -170,7 +165,7 @@ var AxAgentProvider = class {
|
|
|
170
165
|
}
|
|
171
166
|
};
|
|
172
167
|
var AxAIProvider = class {
|
|
173
|
-
specificationVersion = "
|
|
168
|
+
specificationVersion = "v3";
|
|
174
169
|
supportedUrls = {};
|
|
175
170
|
ai;
|
|
176
171
|
config;
|
|
@@ -211,11 +206,7 @@ var AxAIProvider = class {
|
|
|
211
206
|
return {
|
|
212
207
|
content,
|
|
213
208
|
finishReason: mapAxFinishReason(choice.finishReason),
|
|
214
|
-
usage:
|
|
215
|
-
inputTokens: res.modelUsage?.tokens?.promptTokens ?? 0,
|
|
216
|
-
outputTokens: res.modelUsage?.tokens?.completionTokens ?? 0,
|
|
217
|
-
totalTokens: (res.modelUsage?.tokens?.promptTokens ?? 0) + (res.modelUsage?.tokens?.completionTokens ?? 0)
|
|
218
|
-
},
|
|
209
|
+
usage: createUsage(res.modelUsage?.tokens),
|
|
219
210
|
...providerMetadata ? { providerMetadata } : {},
|
|
220
211
|
...response ? { response } : {},
|
|
221
212
|
warnings: []
|
|
@@ -344,6 +335,9 @@ function convertToAxChatPrompt(prompt) {
|
|
|
344
335
|
}
|
|
345
336
|
case "tool": {
|
|
346
337
|
for (const part of content) {
|
|
338
|
+
if (part.type !== "tool-result") {
|
|
339
|
+
throw new Error(`Unsupported part: ${part.type}`);
|
|
340
|
+
}
|
|
347
341
|
messages.push({
|
|
348
342
|
role: "function",
|
|
349
343
|
functionId: part.toolCallId,
|
|
@@ -361,15 +355,20 @@ function convertToAxChatPrompt(prompt) {
|
|
|
361
355
|
return messages;
|
|
362
356
|
}
|
|
363
357
|
function mapAxFinishReason(finishReason) {
|
|
358
|
+
const raw = finishReason;
|
|
364
359
|
switch (finishReason) {
|
|
365
360
|
case "stop":
|
|
366
|
-
return "stop";
|
|
361
|
+
return { unified: "stop", raw };
|
|
367
362
|
case "length":
|
|
368
|
-
return "length";
|
|
363
|
+
return { unified: "length", raw };
|
|
369
364
|
case "function_call":
|
|
370
|
-
return "tool-calls";
|
|
365
|
+
return { unified: "tool-calls", raw };
|
|
366
|
+
case "content_filter":
|
|
367
|
+
return { unified: "content-filter", raw };
|
|
368
|
+
case "error":
|
|
369
|
+
return { unified: "error", raw };
|
|
371
370
|
default:
|
|
372
|
-
return "other";
|
|
371
|
+
return { unified: "other", raw };
|
|
373
372
|
}
|
|
374
373
|
}
|
|
375
374
|
function createChatRequest({
|
|
@@ -399,13 +398,69 @@ function createChatRequest({
|
|
|
399
398
|
}
|
|
400
399
|
return req;
|
|
401
400
|
}
|
|
401
|
+
function createUsage(tokens) {
|
|
402
|
+
return {
|
|
403
|
+
inputTokens: {
|
|
404
|
+
total: tokens?.promptTokens,
|
|
405
|
+
noCache: void 0,
|
|
406
|
+
cacheRead: tokens?.cacheReadTokens,
|
|
407
|
+
cacheWrite: tokens?.cacheCreationTokens
|
|
408
|
+
},
|
|
409
|
+
outputTokens: {
|
|
410
|
+
total: tokens?.completionTokens,
|
|
411
|
+
text: void 0,
|
|
412
|
+
reasoning: tokens?.reasoningTokens
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
function addUsage(usage, tokens) {
|
|
417
|
+
return {
|
|
418
|
+
inputTokens: {
|
|
419
|
+
...usage.inputTokens,
|
|
420
|
+
total: (usage.inputTokens.total ?? 0) + (tokens?.promptTokens ?? 0),
|
|
421
|
+
cacheRead: addOptionalUsage(
|
|
422
|
+
usage.inputTokens.cacheRead,
|
|
423
|
+
tokens?.cacheReadTokens
|
|
424
|
+
),
|
|
425
|
+
cacheWrite: addOptionalUsage(
|
|
426
|
+
usage.inputTokens.cacheWrite,
|
|
427
|
+
tokens?.cacheCreationTokens
|
|
428
|
+
)
|
|
429
|
+
},
|
|
430
|
+
outputTokens: {
|
|
431
|
+
...usage.outputTokens,
|
|
432
|
+
total: (usage.outputTokens.total ?? 0) + (tokens?.completionTokens ?? 0),
|
|
433
|
+
reasoning: addOptionalUsage(
|
|
434
|
+
usage.outputTokens.reasoning,
|
|
435
|
+
tokens?.reasoningTokens
|
|
436
|
+
)
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
function addOptionalUsage(current, next) {
|
|
441
|
+
if (next === void 0) {
|
|
442
|
+
return current;
|
|
443
|
+
}
|
|
444
|
+
return (current ?? 0) + next;
|
|
445
|
+
}
|
|
402
446
|
var AxToSDKTransformer = class extends TransformStream {
|
|
403
447
|
usage = {
|
|
404
|
-
inputTokens:
|
|
405
|
-
|
|
406
|
-
|
|
448
|
+
inputTokens: {
|
|
449
|
+
total: 0,
|
|
450
|
+
noCache: void 0,
|
|
451
|
+
cacheRead: void 0,
|
|
452
|
+
cacheWrite: void 0
|
|
453
|
+
},
|
|
454
|
+
outputTokens: {
|
|
455
|
+
total: 0,
|
|
456
|
+
text: void 0,
|
|
457
|
+
reasoning: void 0
|
|
458
|
+
}
|
|
459
|
+
};
|
|
460
|
+
finishReason = {
|
|
461
|
+
unified: "other",
|
|
462
|
+
raw: void 0
|
|
407
463
|
};
|
|
408
|
-
finishReason = "other";
|
|
409
464
|
functionCalls = [];
|
|
410
465
|
providerMetadata;
|
|
411
466
|
responseMetadataSent = false;
|
|
@@ -456,11 +511,7 @@ var AxToSDKTransformer = class extends TransformStream {
|
|
|
456
511
|
return;
|
|
457
512
|
}
|
|
458
513
|
if (chunk.modelUsage) {
|
|
459
|
-
this.usage =
|
|
460
|
-
inputTokens: (this.usage.inputTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0),
|
|
461
|
-
outputTokens: (this.usage.outputTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0),
|
|
462
|
-
totalTokens: (this.usage.totalTokens ?? 0) + (chunk.modelUsage?.tokens?.promptTokens ?? 0) + (chunk.modelUsage.tokens?.completionTokens ?? 0)
|
|
463
|
-
};
|
|
514
|
+
this.usage = addUsage(this.usage, chunk.modelUsage.tokens);
|
|
464
515
|
}
|
|
465
516
|
if (choice.functionCalls) {
|
|
466
517
|
for (const fc of choice.functionCalls) {
|
|
@@ -485,7 +536,7 @@ var AxToSDKTransformer = class extends TransformStream {
|
|
|
485
536
|
obj.input = JSON.stringify(fc.function.params);
|
|
486
537
|
}
|
|
487
538
|
}
|
|
488
|
-
this.finishReason = "tool-calls";
|
|
539
|
+
this.finishReason = { unified: "tool-calls", raw: "function_call" };
|
|
489
540
|
}
|
|
490
541
|
}
|
|
491
542
|
if (choice.content && choice.content.length > 0) {
|
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 JSONValue,\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2FinishReason,\n LanguageModelV2FunctionTool,\n LanguageModelV2Prompt,\n LanguageModelV2StreamPart,\n LanguageModelV2ToolCall,\n LanguageModelV2ToolChoice,\n LanguageModelV2Usage,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport type {\n AxAgentic,\n AxAIService,\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 AxResponseLike = Pick<\n AxChatResponse,\n | 'sessionId'\n | 'remoteId'\n | 'remoteRequestId'\n | 'remoteSessionId'\n | 'providerMetadata'\n | 'modelUsage'\n>;\n\nfunction toJSONValue(value: unknown): JSONValue | undefined {\n if (value === null) return null;\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value\n .map((item) => toJSONValue(item))\n .filter((item): item is JSONValue => item !== undefined);\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value)\n .map(([key, nested]) => [key, toJSONValue(nested)] as const)\n .filter((entry): entry is readonly [string, JSONValue] => {\n return entry[1] !== undefined;\n });\n return Object.fromEntries(entries) as JSONValue;\n }\n return undefined;\n}\n\nfunction mergeProviderMetadata(\n base?: SharedV2ProviderMetadata,\n next?: SharedV2ProviderMetadata\n): SharedV2ProviderMetadata | undefined {\n if (!base && !next) return undefined;\n const merged: SharedV2ProviderMetadata = {};\n for (const source of [base, next]) {\n if (!source) continue;\n for (const [provider, metadata] of Object.entries(source)) {\n merged[provider] = {\n ...(merged[provider] ?? {}),\n ...metadata,\n };\n }\n }\n return merged;\n}\n\nfunction createProviderMetadata(\n res: Readonly<AxResponseLike>,\n provider: string\n): SharedV2ProviderMetadata | undefined {\n let metadata: SharedV2ProviderMetadata | undefined;\n\n if (res.providerMetadata) {\n metadata = {};\n for (const [providerName, providerMetadata] of Object.entries(\n res.providerMetadata\n )) {\n const jsonProviderMetadata = toJSONValue(providerMetadata);\n if (\n jsonProviderMetadata &&\n typeof jsonProviderMetadata === 'object' &&\n !Array.isArray(jsonProviderMetadata)\n ) {\n metadata[providerName] = jsonProviderMetadata;\n }\n }\n }\n\n const axMetadata = {\n ...(res.sessionId ? { sessionId: res.sessionId } : {}),\n ...(res.remoteRequestId ? { requestId: res.remoteRequestId } : {}),\n ...(res.remoteSessionId ? { remoteSessionId: res.remoteSessionId } : {}),\n };\n\n if (Object.keys(axMetadata).length > 0) {\n metadata = mergeProviderMetadata(metadata, {\n [provider]: axMetadata,\n });\n }\n\n return metadata;\n}\n\nfunction createResponseMetadata(res: Readonly<AxResponseLike>) {\n if (!res.remoteId && !res.modelUsage?.model) {\n return undefined;\n }\n return {\n ...(res.remoteId ? { id: res.remoteId } : {}),\n ...(res.modelUsage?.model ? { modelId: res.modelUsage.model } : {}),\n };\n}\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, {\n stream: false,\n })) 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 const providerMetadata = createProviderMetadata(res, this.provider);\n const response = createResponseMetadata(res);\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 ...(providerMetadata ? { providerMetadata } : {}),\n ...(response ? { response } : {}),\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(this.provider)) 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 providerMetadata: SharedV2ProviderMetadata | undefined;\n private responseMetadataSent = false;\n private hasStarted = false;\n private textStarted = false;\n\n constructor(provider: string) {\n const providerName = provider;\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 chunkProviderMetadata = createProviderMetadata(\n chunk,\n providerName\n );\n this.providerMetadata = mergeProviderMetadata(\n this.providerMetadata,\n chunkProviderMetadata\n );\n\n const responseMetadata = createResponseMetadata(chunk);\n if (!this.responseMetadataSent && responseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...responseMetadata,\n });\n this.responseMetadataSent = 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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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":["../../../node_modules/nanoid/index.js","../provider.ts"],"sourcesContent":["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","// cspell:ignore Streamable\n\nimport type {\n JSONValue,\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FinishReason,\n LanguageModelV3FunctionTool,\n LanguageModelV3Prompt,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolCall,\n LanguageModelV3ToolChoice,\n LanguageModelV3Usage,\n SharedV3ProviderMetadata,\n SharedV3Warning,\n} from '@ai-sdk/provider';\nimport type {\n AxAgentic,\n AxAIService,\n AxChatRequest,\n AxChatResponse,\n AxChatResponseResult,\n AxFunction,\n AxFunctionJSONSchema,\n AxGenIn,\n AxGenOut,\n AxTokenUsage,\n} from '@ax-llm/ax/index.js';\nimport type { ModelMessage } 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 AxResponseLike = Pick<\n AxChatResponse,\n | 'sessionId'\n | 'remoteId'\n | 'remoteRequestId'\n | 'remoteSessionId'\n | 'providerMetadata'\n | 'modelUsage'\n>;\n\nfunction toJSONValue(value: unknown): JSONValue | undefined {\n if (value === null) return null;\n if (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return value;\n }\n if (Array.isArray(value)) {\n return value\n .map((item) => toJSONValue(item))\n .filter((item): item is JSONValue => item !== undefined);\n }\n if (value && typeof value === 'object') {\n const entries = Object.entries(value)\n .map(([key, nested]) => [key, toJSONValue(nested)] as const)\n .filter((entry): entry is readonly [string, JSONValue] => {\n return entry[1] !== undefined;\n });\n return Object.fromEntries(entries) as JSONValue;\n }\n return undefined;\n}\n\nfunction mergeProviderMetadata(\n base?: SharedV3ProviderMetadata,\n next?: SharedV3ProviderMetadata\n): SharedV3ProviderMetadata | undefined {\n if (!base && !next) return undefined;\n const merged: SharedV3ProviderMetadata = {};\n for (const source of [base, next]) {\n if (!source) continue;\n for (const [provider, metadata] of Object.entries(source)) {\n merged[provider] = {\n ...(merged[provider] ?? {}),\n ...metadata,\n };\n }\n }\n return merged;\n}\n\nfunction createProviderMetadata(\n res: Readonly<AxResponseLike>,\n provider: string\n): SharedV3ProviderMetadata | undefined {\n let metadata: SharedV3ProviderMetadata | undefined;\n\n if (res.providerMetadata) {\n metadata = {};\n for (const [providerName, providerMetadata] of Object.entries(\n res.providerMetadata\n )) {\n const jsonProviderMetadata = toJSONValue(providerMetadata);\n if (\n jsonProviderMetadata &&\n typeof jsonProviderMetadata === 'object' &&\n !Array.isArray(jsonProviderMetadata)\n ) {\n metadata[providerName] = jsonProviderMetadata;\n }\n }\n }\n\n const axMetadata = {\n ...(res.sessionId ? { sessionId: res.sessionId } : {}),\n ...(res.remoteRequestId ? { requestId: res.remoteRequestId } : {}),\n ...(res.remoteSessionId ? { remoteSessionId: res.remoteSessionId } : {}),\n };\n\n if (Object.keys(axMetadata).length > 0) {\n metadata = mergeProviderMetadata(metadata, {\n [provider]: axMetadata,\n });\n }\n\n return metadata;\n}\n\nfunction createResponseMetadata(res: Readonly<AxResponseLike>) {\n if (!res.remoteId && !res.modelUsage?.model) {\n return undefined;\n }\n return {\n ...(res.remoteId ? { id: res.remoteId } : {}),\n ...(res.modelUsage?.model ? { modelId: res.modelUsage.model } : {}),\n };\n}\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 ModelMessage[]) => void;\n\n constructor({\n agent,\n updateState,\n generate,\n config,\n }: Readonly<{\n agent: AxAgentic<IN, OUT>;\n updateState: (msgs: readonly ModelMessage[]) => 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 LanguageModelV3 {\n readonly specificationVersion = 'v3' 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: LanguageModelV3CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n const req = createChatRequest(options);\n const res = (await this.ai.chat(req, {\n stream: false,\n })) 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: LanguageModelV3Content[] = [];\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 const providerMetadata = createProviderMetadata(res, this.provider);\n const response = createResponseMetadata(res);\n\n return {\n content,\n finishReason: mapAxFinishReason(choice.finishReason),\n usage: createUsage(res.modelUsage?.tokens),\n ...(providerMetadata ? { providerMetadata } : {}),\n ...(response ? { response } : {}),\n warnings: [] as SharedV3Warning[],\n };\n }\n\n async doStream(\n options: LanguageModelV3CallOptions\n ): Promise<Awaited<ReturnType<LanguageModelV3['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(this.provider)),\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n tools: Array<LanguageModelV3FunctionTool>,\n toolChoice?: LanguageModelV3ToolChoice\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<LanguageModelV3Prompt>\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 if (part.type !== 'tool-result') {\n throw new Error(`Unsupported part: ${part.type}`);\n }\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): LanguageModelV3FinishReason {\n const raw = finishReason;\n switch (finishReason) {\n case 'stop':\n return { unified: 'stop', raw };\n case 'length':\n return { unified: 'length', raw };\n case 'function_call':\n return { unified: 'tool-calls', raw };\n case 'content_filter':\n return { unified: 'content-filter', raw };\n case 'error':\n return { unified: 'error', raw };\n default:\n return { unified: 'other', raw };\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<LanguageModelV3CallOptions>): 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 LanguageModelV3FunctionTool => tool.type === 'function'\n );\n return { ...req, ...prepareToolsAndToolChoice(functionTools, toolChoice) };\n }\n\n return req;\n}\n\nfunction createUsage(tokens?: Readonly<AxTokenUsage>): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: tokens?.promptTokens,\n noCache: undefined,\n cacheRead: tokens?.cacheReadTokens,\n cacheWrite: tokens?.cacheCreationTokens,\n },\n outputTokens: {\n total: tokens?.completionTokens,\n text: undefined,\n reasoning: tokens?.reasoningTokens,\n },\n };\n}\n\nfunction addUsage(\n usage: Readonly<LanguageModelV3Usage>,\n tokens?: Readonly<AxTokenUsage>\n): LanguageModelV3Usage {\n return {\n inputTokens: {\n ...usage.inputTokens,\n total: (usage.inputTokens.total ?? 0) + (tokens?.promptTokens ?? 0),\n cacheRead: addOptionalUsage(\n usage.inputTokens.cacheRead,\n tokens?.cacheReadTokens\n ),\n cacheWrite: addOptionalUsage(\n usage.inputTokens.cacheWrite,\n tokens?.cacheCreationTokens\n ),\n },\n outputTokens: {\n ...usage.outputTokens,\n total: (usage.outputTokens.total ?? 0) + (tokens?.completionTokens ?? 0),\n reasoning: addOptionalUsage(\n usage.outputTokens.reasoning,\n tokens?.reasoningTokens\n ),\n },\n };\n}\n\nfunction addOptionalUsage(\n current: number | undefined,\n next: number | undefined\n): number | undefined {\n if (next === undefined) {\n return current;\n }\n return (current ?? 0) + next;\n}\n\nclass AxToSDKTransformer extends TransformStream<\n AxChatResponse,\n LanguageModelV3StreamPart\n> {\n private usage: LanguageModelV3Usage = {\n inputTokens: {\n total: 0,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: 0,\n text: undefined,\n reasoning: undefined,\n },\n };\n\n private finishReason: LanguageModelV3FinishReason = {\n unified: 'other',\n raw: undefined,\n };\n\n private functionCalls: LanguageModelV3ToolCall[] = [];\n private providerMetadata: SharedV3ProviderMetadata | undefined;\n private responseMetadataSent = false;\n private hasStarted = false;\n private textStarted = false;\n\n constructor(provider: string) {\n const providerName = provider;\n const transformer = {\n transform: (\n chunk: Readonly<AxChatResponse>,\n controller: TransformStreamDefaultController<LanguageModelV3StreamPart>\n ) => {\n // Emit stream-start event only once\n if (!this.hasStarted) {\n controller.enqueue({\n type: 'stream-start',\n warnings: [] as SharedV3Warning[],\n });\n this.hasStarted = true;\n }\n\n const chunkProviderMetadata = createProviderMetadata(\n chunk,\n providerName\n );\n this.providerMetadata = mergeProviderMetadata(\n this.providerMetadata,\n chunkProviderMetadata\n );\n\n const responseMetadata = createResponseMetadata(chunk);\n if (!this.responseMetadataSent && responseMetadata) {\n controller.enqueue({\n type: 'response-metadata',\n ...responseMetadata,\n });\n this.responseMetadataSent = 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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\n };\n controller.enqueue(val);\n return;\n }\n\n if (chunk.modelUsage) {\n this.usage = addUsage(this.usage, chunk.modelUsage.tokens);\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 = { unified: 'tool-calls', raw: 'function_call' };\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<LanguageModelV3StreamPart>\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 ...(this.providerMetadata\n ? { providerMetadata: this.providerMetadata }\n : {}),\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"],"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": "22.0.
|
|
3
|
+
"version": "22.0.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Ax AI SDK Provider for the Vercel AI SDK",
|
|
6
6
|
"repository": {
|
|
@@ -12,11 +12,15 @@
|
|
|
12
12
|
},
|
|
13
13
|
"license": "Apache-2.0",
|
|
14
14
|
"keywords": [],
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=22"
|
|
17
|
+
},
|
|
15
18
|
"dependencies": {
|
|
16
|
-
"@ai-sdk/provider
|
|
17
|
-
"@
|
|
18
|
-
"
|
|
19
|
-
"
|
|
19
|
+
"@ai-sdk/provider": "^4.0.0",
|
|
20
|
+
"@ai-sdk/provider-utils": "^5.0.0",
|
|
21
|
+
"@ax-llm/ax": "22.0.8",
|
|
22
|
+
"ai": "^7.0.2",
|
|
23
|
+
"zod": "^3.25.76"
|
|
20
24
|
},
|
|
21
25
|
"bugs": {
|
|
22
26
|
"url": "https://github.com/@ax-llm/ax/issues"
|
|
@@ -32,7 +36,6 @@
|
|
|
32
36
|
"import": "./index.js",
|
|
33
37
|
"require": "./index.cjs"
|
|
34
38
|
},
|
|
35
|
-
"./index.global.js": "./index.global.js",
|
|
36
39
|
"./*": {
|
|
37
40
|
"types": "./*.d.ts",
|
|
38
41
|
"import": "./*.js",
|