@standardagents/xai 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -18
- package/dist/index.d.ts +25 -36
- package/dist/index.js +329 -82
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
xAI provider for Standard Agents.
|
|
4
4
|
|
|
5
|
-
This package integrates xAI
|
|
5
|
+
This package integrates xAI Responses API language models and xAI image models through the Standard Agents provider interface. It uses the official `@ai-sdk/xai` integration under the hood and handles:
|
|
6
6
|
|
|
7
7
|
- text generation and streaming
|
|
8
|
-
- multimodal
|
|
8
|
+
- multimodal language requests with image inputs
|
|
9
9
|
- local function tools on supported Grok models
|
|
10
|
+
- provider-executed xAI Responses tools
|
|
10
11
|
- xAI reasoning controls where supported
|
|
11
12
|
- image generation and edit-style requests
|
|
12
13
|
- usage and cost extraction from xAI API responses
|
|
@@ -59,14 +60,18 @@ type ProviderFactoryConfig = {
|
|
|
59
60
|
|
|
60
61
|
Depending on the model, the provider supports:
|
|
61
62
|
|
|
62
|
-
- streaming
|
|
63
|
-
- images in
|
|
63
|
+
- streaming Responses API output
|
|
64
|
+
- images in Responses input
|
|
64
65
|
- local function tool calling
|
|
66
|
+
- xAI provider tools (`web_search`, `x_search`, `code_execution`, plus `view_image`/`view_x_video` helpers)
|
|
65
67
|
- JSON mode
|
|
66
68
|
- reasoning controls
|
|
67
69
|
- image generation output
|
|
68
70
|
|
|
69
71
|
The package includes a curated static catalog for current xAI text and image models, including Grok aliases.
|
|
72
|
+
At runtime, `getModels()` fetches the live model list from `GET /v1/models` for
|
|
73
|
+
the configured xAI API key and falls back to the curated catalog if that request
|
|
74
|
+
is unavailable.
|
|
70
75
|
|
|
71
76
|
```ts
|
|
72
77
|
const models = await provider.getModels?.();
|
|
@@ -77,11 +82,12 @@ const capabilities = await provider.getModelCapabilities?.('grok-4.20-0309-reaso
|
|
|
77
82
|
|
|
78
83
|
Common xAI-specific provider options:
|
|
79
84
|
|
|
80
|
-
- `reasoningEffort`
|
|
85
|
+
- `reasoningEffort` (`low`, `medium`, `high`)
|
|
81
86
|
- `logprobs`
|
|
82
87
|
- `topLogprobs`
|
|
83
|
-
- `
|
|
84
|
-
- `
|
|
88
|
+
- `store`
|
|
89
|
+
- `previousResponseId`
|
|
90
|
+
- `include`
|
|
85
91
|
- `aspect_ratio`
|
|
86
92
|
- `output_format`
|
|
87
93
|
- `sync_mode`
|
|
@@ -95,20 +101,31 @@ Example:
|
|
|
95
101
|
const result = await provider.generate({
|
|
96
102
|
model: 'grok-4-0709',
|
|
97
103
|
messages: [{ role: 'user', content: 'Search the web and summarize today in one paragraph.' }],
|
|
98
|
-
providerOptions: {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
providerOptions: { reasoningEffort: 'high' },
|
|
105
|
+
tools: [
|
|
106
|
+
{
|
|
107
|
+
type: 'function',
|
|
108
|
+
function: {
|
|
109
|
+
name: 'web_search',
|
|
110
|
+
description: 'Search the web',
|
|
111
|
+
parameters: { type: 'object', properties: {}, required: [] },
|
|
112
|
+
},
|
|
113
|
+
executionMode: 'provider',
|
|
114
|
+
executionProvider: 'xai',
|
|
104
115
|
},
|
|
105
|
-
|
|
116
|
+
],
|
|
106
117
|
});
|
|
107
118
|
```
|
|
108
119
|
|
|
120
|
+
`view_image` and `view_x_video` are helper tool options in Standard Agents. The
|
|
121
|
+
xAI Responses API exposes image/video understanding through search-tool flags,
|
|
122
|
+
so this package folds `provider:view_image` into `enable_image_understanding` on
|
|
123
|
+
`web_search`/`x_search` and folds `provider:view_x_video` into
|
|
124
|
+
`enable_video_understanding` on `x_search`.
|
|
125
|
+
|
|
109
126
|
## Images
|
|
110
127
|
|
|
111
|
-
For
|
|
128
|
+
For language models, the provider translates Standard Agents image parts and image attachments into xAI Responses image inputs. For xAI image generation models, it routes image requests through the image generation path and returns generated image attachments in the Standard Agents response format.
|
|
112
129
|
|
|
113
130
|
## Cost Data
|
|
114
131
|
|
|
@@ -116,7 +133,7 @@ When xAI returns `cost_in_usd_ticks`, this package converts it to USD and attach
|
|
|
116
133
|
|
|
117
134
|
## Debugging
|
|
118
135
|
|
|
119
|
-
Use `inspectRequest()` to view the xAI-native request body that will be sent to the provider:
|
|
136
|
+
Use `inspectRequest()` to view the xAI-native Responses request body that will be sent to the provider:
|
|
120
137
|
|
|
121
138
|
```ts
|
|
122
139
|
const inspected = await provider.inspectRequest?.({
|
|
@@ -124,11 +141,15 @@ const inspected = await provider.inspectRequest?.({
|
|
|
124
141
|
messages: [{ role: 'user', content: 'hello' }],
|
|
125
142
|
});
|
|
126
143
|
|
|
144
|
+
console.log(inspected?.metadata?.endpoint); // https://api.x.ai/v1/responses
|
|
127
145
|
console.log(inspected?.body);
|
|
128
146
|
```
|
|
129
147
|
|
|
130
148
|
## Notes
|
|
131
149
|
|
|
132
|
-
- xAI
|
|
133
|
-
-
|
|
150
|
+
- xAI language models are sent through `/v1/responses`, not `/v1/chat/completions`.
|
|
151
|
+
- xAI tool choice translation is normalized to Responses API shapes.
|
|
152
|
+
- xAI image/video understanding helpers are not sent as top-level `tools[]` entries; they become search-tool options.
|
|
153
|
+
- xAI provider-executed tool calls are surfaced through the generic Standard Agents provider-tool result path, not local function calls.
|
|
154
|
+
- Non-image generic file parts are not supported in xAI Responses input; image parts are supported.
|
|
134
155
|
- Some moving aliases such as `grok-4` and `grok-4-latest` are resolved to the current snapshot IDs internally.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,47 +1,20 @@
|
|
|
1
|
-
import { LLMProviderInterface, ProviderFactoryConfig, ProviderModelInfo, ModelCapabilities, ProviderRequest, InspectedRequest, ProviderResponse, ProviderStreamChunk, ProviderFactoryWithOptions } from '@standardagents/spec';
|
|
1
|
+
import { LLMProviderInterface, ProviderFactoryConfig, ProviderModelInfo, ProviderModelsQuery, ProviderModelsPage, ModelCapabilities, ToolDefinition, ToolArgs, ToolTenvs, ProviderRequest, InspectedRequest, ProviderResponse, ProviderStreamChunk, ProviderFactoryWithOptions } from '@standardagents/spec';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
declare const xaiProviderOptions: z.ZodObject<{
|
|
5
5
|
reasoningEffort: z.ZodOptional<z.ZodEnum<{
|
|
6
6
|
low: "low";
|
|
7
|
+
medium: "medium";
|
|
7
8
|
high: "high";
|
|
8
9
|
}>>;
|
|
9
10
|
logprobs: z.ZodOptional<z.ZodBoolean>;
|
|
10
11
|
topLogprobs: z.ZodOptional<z.ZodNumber>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}>;
|
|
18
|
-
returnCitations: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
-
fromDate: z.ZodOptional<z.ZodString>;
|
|
20
|
-
toDate: z.ZodOptional<z.ZodString>;
|
|
21
|
-
maxSearchResults: z.ZodOptional<z.ZodNumber>;
|
|
22
|
-
sources: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
23
|
-
type: z.ZodLiteral<"web">;
|
|
24
|
-
country: z.ZodOptional<z.ZodString>;
|
|
25
|
-
excludedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
26
|
-
allowedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
27
|
-
safeSearch: z.ZodOptional<z.ZodBoolean>;
|
|
28
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
29
|
-
type: z.ZodLiteral<"x">;
|
|
30
|
-
excludedXHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
-
includedXHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
32
|
-
xHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
33
|
-
postFavoriteCount: z.ZodOptional<z.ZodNumber>;
|
|
34
|
-
postViewCount: z.ZodOptional<z.ZodNumber>;
|
|
35
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
36
|
-
type: z.ZodLiteral<"news">;
|
|
37
|
-
country: z.ZodOptional<z.ZodString>;
|
|
38
|
-
excludedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
39
|
-
safeSearch: z.ZodOptional<z.ZodBoolean>;
|
|
40
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
41
|
-
type: z.ZodLiteral<"rss">;
|
|
42
|
-
links: z.ZodArray<z.ZodString>;
|
|
43
|
-
}, z.core.$strip>], "type">>>;
|
|
44
|
-
}, z.core.$strip>>;
|
|
12
|
+
store: z.ZodOptional<z.ZodBoolean>;
|
|
13
|
+
previousResponseId: z.ZodOptional<z.ZodString>;
|
|
14
|
+
include: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
15
|
+
"file_search_call.results": "file_search_call.results";
|
|
16
|
+
"reasoning.encrypted_content": "reasoning.encrypted_content";
|
|
17
|
+
}>>>;
|
|
45
18
|
aspect_ratio: z.ZodOptional<z.ZodString>;
|
|
46
19
|
output_format: z.ZodOptional<z.ZodString>;
|
|
47
20
|
sync_mode: z.ZodOptional<z.ZodBoolean>;
|
|
@@ -51,8 +24,8 @@ declare const xaiProviderOptions: z.ZodObject<{
|
|
|
51
24
|
}>>;
|
|
52
25
|
quality: z.ZodOptional<z.ZodEnum<{
|
|
53
26
|
low: "low";
|
|
54
|
-
high: "high";
|
|
55
27
|
medium: "medium";
|
|
28
|
+
high: "high";
|
|
56
29
|
}>>;
|
|
57
30
|
user: z.ZodOptional<z.ZodString>;
|
|
58
31
|
numberOfImages: z.ZodOptional<z.ZodNumber>;
|
|
@@ -63,12 +36,28 @@ declare class XAIProvider implements LLMProviderInterface {
|
|
|
63
36
|
readonly name = "xai";
|
|
64
37
|
readonly specificationVersion: "1";
|
|
65
38
|
private readonly config;
|
|
39
|
+
private modelsCache;
|
|
40
|
+
private modelsCacheTime;
|
|
66
41
|
private readonly client;
|
|
42
|
+
private static readonly CACHE_TTL;
|
|
67
43
|
constructor(config: ProviderFactoryConfig);
|
|
68
44
|
supportsModel(_modelId: string): boolean;
|
|
45
|
+
private static readonly TOOLS;
|
|
69
46
|
getIcon(_modelId?: string): string;
|
|
70
47
|
getModels(filter?: string): Promise<ProviderModelInfo[]>;
|
|
48
|
+
getModelsPage(query?: ProviderModelsQuery): Promise<ProviderModelsPage>;
|
|
71
49
|
getModelCapabilities(modelId: string): Promise<ModelCapabilities | null>;
|
|
50
|
+
getTools(_modelId?: string): Record<string, ToolDefinition<any, ToolArgs | null, ToolTenvs | null>>;
|
|
51
|
+
private getAllModels;
|
|
52
|
+
private fetchModelsWithCache;
|
|
53
|
+
private parseModelsPayload;
|
|
54
|
+
private getStaticModels;
|
|
55
|
+
private mapCatalogModel;
|
|
56
|
+
private mapLiveModel;
|
|
57
|
+
private formatModelName;
|
|
58
|
+
private inferCapabilities;
|
|
59
|
+
private filterModels;
|
|
60
|
+
private getBaseUrl;
|
|
72
61
|
private buildLanguageModelCallOptions;
|
|
73
62
|
private getLanguageModel;
|
|
74
63
|
private getImageModel;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// src/XAIProvider.ts
|
|
2
2
|
import { createXai } from "@ai-sdk/xai";
|
|
3
|
-
import { ProviderError, mapReasoningLevel } from "@standardagents/spec";
|
|
3
|
+
import { defineTool, ProviderError, mapReasoningLevel } from "@standardagents/spec";
|
|
4
|
+
import { z } from "zod";
|
|
4
5
|
|
|
5
6
|
// src/xai.png
|
|
6
7
|
var xai_default = "data:image/png;base64,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";
|
|
@@ -47,6 +48,10 @@ function ticksToUsd(ticks) {
|
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
// src/XAIProvider.ts
|
|
51
|
+
var XAI_PROVIDER_TOOL_RESULT = {
|
|
52
|
+
status: "success",
|
|
53
|
+
result: "Handled by xAI"
|
|
54
|
+
};
|
|
50
55
|
var MODEL_ALIASES = {
|
|
51
56
|
"grok-4": "grok-4-0709",
|
|
52
57
|
"grok-4-latest": "grok-4-0709"
|
|
@@ -344,13 +349,12 @@ function parseDataUrl(value) {
|
|
|
344
349
|
data: match[2]
|
|
345
350
|
};
|
|
346
351
|
}
|
|
347
|
-
function
|
|
352
|
+
function normalizeResponsesReasoningEffort(value) {
|
|
348
353
|
switch (value) {
|
|
349
354
|
case "high":
|
|
350
|
-
return "high";
|
|
351
355
|
case "medium":
|
|
352
356
|
case "low":
|
|
353
|
-
return
|
|
357
|
+
return value;
|
|
354
358
|
default:
|
|
355
359
|
return void 0;
|
|
356
360
|
}
|
|
@@ -528,18 +532,64 @@ function normalizeMessagesForXAI(messages) {
|
|
|
528
532
|
...nonSystemMessages
|
|
529
533
|
];
|
|
530
534
|
}
|
|
535
|
+
function isXAIProviderTool(tool, name) {
|
|
536
|
+
return tool.executionMode === "provider" && tool.executionProvider === "xai" && tool.function.name === name;
|
|
537
|
+
}
|
|
531
538
|
function transformTools(tools) {
|
|
532
539
|
if (!tools?.length) return void 0;
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
540
|
+
const enableImageUnderstanding = tools.some((tool) => isXAIProviderTool(tool, "view_image"));
|
|
541
|
+
const enableVideoUnderstanding = tools.some((tool) => isXAIProviderTool(tool, "view_x_video"));
|
|
542
|
+
const transformedTools = tools.flatMap((tool) => {
|
|
543
|
+
if (tool.executionMode === "provider" && tool.executionProvider === "xai") {
|
|
544
|
+
const nativeTool = transformNativeTool(
|
|
545
|
+
tool.function.name,
|
|
546
|
+
enableImageUnderstanding,
|
|
547
|
+
enableVideoUnderstanding
|
|
548
|
+
);
|
|
549
|
+
return nativeTool ? [nativeTool] : [];
|
|
550
|
+
}
|
|
551
|
+
return [{
|
|
552
|
+
type: "function",
|
|
553
|
+
name: tool.function.name,
|
|
554
|
+
description: tool.function.description,
|
|
555
|
+
inputSchema: tool.function.parameters || {
|
|
556
|
+
type: "object",
|
|
557
|
+
properties: {},
|
|
558
|
+
required: []
|
|
559
|
+
}
|
|
560
|
+
}];
|
|
561
|
+
});
|
|
562
|
+
return transformedTools.length ? transformedTools : void 0;
|
|
563
|
+
}
|
|
564
|
+
function transformNativeTool(name, enableImageUnderstanding, enableVideoUnderstanding) {
|
|
565
|
+
switch (name) {
|
|
566
|
+
case "web_search":
|
|
567
|
+
return {
|
|
568
|
+
type: "provider",
|
|
569
|
+
id: "xai.web_search",
|
|
570
|
+
name,
|
|
571
|
+
args: {
|
|
572
|
+
...enableImageUnderstanding ? { enableImageUnderstanding: true } : {}
|
|
573
|
+
}
|
|
574
|
+
};
|
|
575
|
+
case "x_search":
|
|
576
|
+
return {
|
|
577
|
+
type: "provider",
|
|
578
|
+
id: "xai.x_search",
|
|
579
|
+
name,
|
|
580
|
+
args: {
|
|
581
|
+
...enableImageUnderstanding ? { enableImageUnderstanding: true } : {},
|
|
582
|
+
...enableVideoUnderstanding ? { enableVideoUnderstanding: true } : {}
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
case "code_execution":
|
|
586
|
+
return { type: "provider", id: "xai.code_execution", name, args: {} };
|
|
587
|
+
case "view_image":
|
|
588
|
+
case "view_x_video":
|
|
589
|
+
return void 0;
|
|
590
|
+
default:
|
|
591
|
+
return void 0;
|
|
592
|
+
}
|
|
543
593
|
}
|
|
544
594
|
function mapToolChoice(choice) {
|
|
545
595
|
if (choice === "auto" || choice === "none" || choice === "required") {
|
|
@@ -550,10 +600,55 @@ function mapToolChoice(choice) {
|
|
|
550
600
|
}
|
|
551
601
|
return void 0;
|
|
552
602
|
}
|
|
553
|
-
function
|
|
603
|
+
function providerToolNamesFromTools(tools) {
|
|
604
|
+
return new Set(
|
|
605
|
+
(tools ?? []).filter((tool) => tool.executionMode === "provider" && tool.executionProvider === "xai").map((tool) => tool.function.name)
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
function parseProviderToolInput(input) {
|
|
609
|
+
if (typeof input === "string") {
|
|
610
|
+
if (!input.trim()) return void 0;
|
|
611
|
+
try {
|
|
612
|
+
const parsed = JSON.parse(input);
|
|
613
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
|
|
614
|
+
} catch {
|
|
615
|
+
return { raw: input };
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
return input && typeof input === "object" && !Array.isArray(input) ? input : void 0;
|
|
619
|
+
}
|
|
620
|
+
function searchActionFromInput(input) {
|
|
621
|
+
const queryKeys = ["query", "search_query", "q", "keywords", "username", "handle", "url"];
|
|
622
|
+
const query = queryKeys.map((key) => input?.[key]).find((value) => typeof value === "string" && value.length > 0);
|
|
623
|
+
return query ? { input, actions: [{ type: "search", query }] } : input && Object.keys(input).length > 0 ? { input } : void 0;
|
|
624
|
+
}
|
|
625
|
+
function providerToolResultFromCall(toolName, id, input) {
|
|
626
|
+
const parsedInput = parseProviderToolInput(input);
|
|
627
|
+
const result = toolName === "web_search" || toolName === "x_search" ? searchActionFromInput(parsedInput) : parsedInput && Object.keys(parsedInput).length > 0 ? { input: parsedInput } : void 0;
|
|
628
|
+
return {
|
|
629
|
+
name: toolName,
|
|
630
|
+
type: toolName,
|
|
631
|
+
provider: "xai",
|
|
632
|
+
id,
|
|
633
|
+
status: "completed",
|
|
634
|
+
...result ? { result } : {}
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
function extractProviderToolResults(content, providerToolNames = /* @__PURE__ */ new Set()) {
|
|
638
|
+
const providerTools = content.filter((part) => part.type === "tool-call").filter((part) => part.providerExecuted === true && providerToolNames.has(part.toolName)).map((part) => providerToolResultFromCall(
|
|
639
|
+
part.toolName,
|
|
640
|
+
part.toolCallId,
|
|
641
|
+
part.input
|
|
642
|
+
));
|
|
643
|
+
return providerTools.length > 0 ? providerTools : void 0;
|
|
644
|
+
}
|
|
645
|
+
function extractToolCalls(content, providerToolNames = /* @__PURE__ */ new Set()) {
|
|
554
646
|
const toolCalls = content.filter((part) => part.type === "tool-call");
|
|
555
|
-
|
|
556
|
-
|
|
647
|
+
const localToolCalls = toolCalls.filter(
|
|
648
|
+
(part) => !(part.providerExecuted === true && providerToolNames.has(part.toolName))
|
|
649
|
+
);
|
|
650
|
+
if (!localToolCalls.length) return void 0;
|
|
651
|
+
return localToolCalls.map((part) => {
|
|
557
652
|
let input = {};
|
|
558
653
|
if (typeof part.input === "string") {
|
|
559
654
|
try {
|
|
@@ -571,13 +666,16 @@ function extractToolCalls(content) {
|
|
|
571
666
|
};
|
|
572
667
|
});
|
|
573
668
|
}
|
|
574
|
-
var XAIProvider = class {
|
|
669
|
+
var XAIProvider = class _XAIProvider {
|
|
575
670
|
name = "xai";
|
|
576
671
|
specificationVersion = "1";
|
|
577
672
|
config;
|
|
673
|
+
modelsCache = null;
|
|
674
|
+
modelsCacheTime = 0;
|
|
578
675
|
client = createXai({
|
|
579
676
|
apiKey: ""
|
|
580
677
|
});
|
|
678
|
+
static CACHE_TTL = 5 * 60 * 1e3;
|
|
581
679
|
constructor(config) {
|
|
582
680
|
this.config = config;
|
|
583
681
|
this.client = createXai({
|
|
@@ -588,38 +686,189 @@ var XAIProvider = class {
|
|
|
588
686
|
supportsModel(_modelId) {
|
|
589
687
|
return true;
|
|
590
688
|
}
|
|
689
|
+
static TOOLS = {
|
|
690
|
+
web_search: defineTool({
|
|
691
|
+
description: "Search the web for up-to-date information with citations using xAI Responses API",
|
|
692
|
+
args: z.object({}),
|
|
693
|
+
execute: async () => XAI_PROVIDER_TOOL_RESULT,
|
|
694
|
+
executionMode: "provider",
|
|
695
|
+
executionProvider: "xai"
|
|
696
|
+
}),
|
|
697
|
+
x_search: defineTool({
|
|
698
|
+
description: "Search X posts and conversations using xAI Responses API",
|
|
699
|
+
args: z.object({}),
|
|
700
|
+
execute: async () => XAI_PROVIDER_TOOL_RESULT,
|
|
701
|
+
executionMode: "provider",
|
|
702
|
+
executionProvider: "xai"
|
|
703
|
+
}),
|
|
704
|
+
code_execution: defineTool({
|
|
705
|
+
description: "Execute Python code in xAI server-side sandbox",
|
|
706
|
+
args: z.object({}),
|
|
707
|
+
execute: async () => XAI_PROVIDER_TOOL_RESULT,
|
|
708
|
+
executionMode: "provider",
|
|
709
|
+
executionProvider: "xai"
|
|
710
|
+
}),
|
|
711
|
+
view_image: defineTool({
|
|
712
|
+
description: "Enable xAI image understanding for images found during Web Search or X Search",
|
|
713
|
+
args: z.object({}),
|
|
714
|
+
execute: async () => XAI_PROVIDER_TOOL_RESULT,
|
|
715
|
+
executionMode: "provider",
|
|
716
|
+
executionProvider: "xai"
|
|
717
|
+
}),
|
|
718
|
+
view_x_video: defineTool({
|
|
719
|
+
description: "Enable xAI video understanding for videos found during X Search",
|
|
720
|
+
args: z.object({}),
|
|
721
|
+
execute: async () => XAI_PROVIDER_TOOL_RESULT,
|
|
722
|
+
executionMode: "provider",
|
|
723
|
+
executionProvider: "xai"
|
|
724
|
+
})
|
|
725
|
+
};
|
|
591
726
|
getIcon(_modelId) {
|
|
592
727
|
return getXAIIconDataUri();
|
|
593
728
|
}
|
|
594
729
|
async getModels(filter) {
|
|
595
|
-
const models =
|
|
730
|
+
const models = await this.getAllModels();
|
|
731
|
+
return this.filterModels(models, filter);
|
|
732
|
+
}
|
|
733
|
+
async getModelsPage(query) {
|
|
734
|
+
const page = Math.max(1, query?.page ?? 1);
|
|
735
|
+
const perPage = Math.max(1, query?.perPage ?? 50);
|
|
736
|
+
const models = this.filterModels(await this.getAllModels(), query?.search);
|
|
737
|
+
const start = (page - 1) * perPage;
|
|
738
|
+
const pageModels = models.slice(start, start + perPage);
|
|
739
|
+
return {
|
|
740
|
+
models: pageModels,
|
|
741
|
+
hasNextPage: start + perPage < models.length
|
|
742
|
+
};
|
|
743
|
+
}
|
|
744
|
+
async getModelCapabilities(modelId) {
|
|
745
|
+
const resolved = resolveModelAlias(modelId);
|
|
746
|
+
const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);
|
|
747
|
+
return model ? { ...model.capabilities } : this.inferCapabilities(modelId);
|
|
748
|
+
}
|
|
749
|
+
getTools(_modelId) {
|
|
750
|
+
return { ..._XAIProvider.TOOLS };
|
|
751
|
+
}
|
|
752
|
+
async getAllModels() {
|
|
753
|
+
try {
|
|
754
|
+
const liveModels = await this.fetchModelsWithCache();
|
|
755
|
+
return liveModels.map((model) => this.mapLiveModel(model)).sort((a, b) => a.name.localeCompare(b.name));
|
|
756
|
+
} catch (error) {
|
|
757
|
+
console.error("Failed to fetch models from xAI:", error);
|
|
758
|
+
return this.getStaticModels();
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
async fetchModelsWithCache() {
|
|
762
|
+
const now = Date.now();
|
|
763
|
+
if (this.modelsCache && now - this.modelsCacheTime < _XAIProvider.CACHE_TTL) {
|
|
764
|
+
return this.modelsCache;
|
|
765
|
+
}
|
|
766
|
+
const response = await fetch(`${this.getBaseUrl()}/models`, {
|
|
767
|
+
method: "GET",
|
|
768
|
+
headers: {
|
|
769
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
770
|
+
"Content-Type": "application/json"
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
if (!response.ok) {
|
|
774
|
+
throw new ProviderError(`xAI models request failed with status ${response.status}`, "server_error", response.status);
|
|
775
|
+
}
|
|
776
|
+
const payload = await response.json();
|
|
777
|
+
const data = this.parseModelsPayload(payload);
|
|
778
|
+
this.modelsCache = data;
|
|
779
|
+
this.modelsCacheTime = now;
|
|
780
|
+
return data;
|
|
781
|
+
}
|
|
782
|
+
parseModelsPayload(payload) {
|
|
783
|
+
if (!payload || typeof payload !== "object" || !("data" in payload)) {
|
|
784
|
+
throw new ProviderError("xAI models response did not include a data array", "invalid_request");
|
|
785
|
+
}
|
|
786
|
+
const data = payload.data;
|
|
787
|
+
if (!Array.isArray(data)) {
|
|
788
|
+
throw new ProviderError("xAI models response data was not an array", "invalid_request");
|
|
789
|
+
}
|
|
790
|
+
return data.filter((model) => typeof model === "object" && model !== null).filter((model) => typeof model.id === "string").map((model) => ({
|
|
791
|
+
id: model.id,
|
|
792
|
+
object: typeof model.object === "string" ? model.object : void 0,
|
|
793
|
+
created: typeof model.created === "number" ? model.created : void 0,
|
|
794
|
+
owned_by: typeof model.owned_by === "string" ? model.owned_by : void 0
|
|
795
|
+
}));
|
|
796
|
+
}
|
|
797
|
+
getStaticModels() {
|
|
798
|
+
return [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => this.mapCatalogModel(model));
|
|
799
|
+
}
|
|
800
|
+
mapCatalogModel(model) {
|
|
801
|
+
return {
|
|
596
802
|
id: model.id,
|
|
597
803
|
name: model.name,
|
|
598
804
|
description: model.description,
|
|
599
805
|
contextLength: model.contextLength,
|
|
600
806
|
iconId: this.getIcon(model.id),
|
|
601
|
-
slug: resolveModelAlias(model.id)
|
|
602
|
-
|
|
807
|
+
slug: resolveModelAlias(model.id),
|
|
808
|
+
capabilities: { ...model.capabilities }
|
|
809
|
+
};
|
|
810
|
+
}
|
|
811
|
+
mapLiveModel(model) {
|
|
812
|
+
const catalogModel = [...TEXT_MODELS, ...IMAGE_MODELS].find(
|
|
813
|
+
(entry) => resolveModelAlias(entry.id) === resolveModelAlias(model.id)
|
|
814
|
+
);
|
|
815
|
+
if (catalogModel) {
|
|
816
|
+
return this.mapCatalogModel({ ...catalogModel, id: model.id });
|
|
817
|
+
}
|
|
818
|
+
return {
|
|
819
|
+
id: model.id,
|
|
820
|
+
name: this.formatModelName(model.id),
|
|
821
|
+
description: model.owned_by ? `xAI model owned by ${model.owned_by}` : "xAI model",
|
|
822
|
+
iconId: this.getIcon(model.id),
|
|
823
|
+
slug: resolveModelAlias(model.id),
|
|
824
|
+
capabilities: this.inferCapabilities(model.id)
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
formatModelName(modelId) {
|
|
828
|
+
return modelId.split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
|
|
829
|
+
}
|
|
830
|
+
inferCapabilities(modelId) {
|
|
831
|
+
if (isImageModel(modelId)) {
|
|
832
|
+
return {
|
|
833
|
+
supportsImages: true,
|
|
834
|
+
supportsStreaming: false,
|
|
835
|
+
supportsToolCalls: false,
|
|
836
|
+
supportsJsonMode: false,
|
|
837
|
+
maxContextTokens: 0
|
|
838
|
+
};
|
|
839
|
+
}
|
|
840
|
+
const resolved = resolveModelAlias(modelId);
|
|
841
|
+
const isMini = resolved.includes("mini");
|
|
842
|
+
const isCode = resolved.includes("code");
|
|
843
|
+
const longContext = resolved.includes("fast") || resolved.includes("4.20") || resolved.includes("4-1") || resolved.includes("4.3");
|
|
844
|
+
const supportsReasoning = !resolved.includes("non-reasoning") && !isCode;
|
|
845
|
+
return {
|
|
846
|
+
supportsImages: !isMini && !isCode,
|
|
847
|
+
supportsToolCalls: true,
|
|
848
|
+
supportsStreaming: true,
|
|
849
|
+
supportsJsonMode: true,
|
|
850
|
+
maxContextTokens: longContext ? 2e6 : 256e3,
|
|
851
|
+
...supportsReasoning ? { reasoningLevels: { 0: null, 50: "medium", 100: "high" } } : {}
|
|
852
|
+
};
|
|
853
|
+
}
|
|
854
|
+
filterModels(models, filter) {
|
|
603
855
|
if (!filter) return models;
|
|
604
856
|
const query = filter.toLowerCase();
|
|
605
857
|
return models.filter(
|
|
606
858
|
(model) => model.id.toLowerCase().includes(query) || model.name.toLowerCase().includes(query) || (model.description?.toLowerCase().includes(query) ?? false)
|
|
607
859
|
);
|
|
608
860
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);
|
|
612
|
-
return model ? { ...model.capabilities } : null;
|
|
861
|
+
getBaseUrl() {
|
|
862
|
+
return (this.config.baseUrl || "https://api.x.ai/v1").replace(/\/+$/, "");
|
|
613
863
|
}
|
|
614
864
|
buildLanguageModelCallOptions(request) {
|
|
615
865
|
const providerOptions = request.providerOptions || {};
|
|
616
866
|
const prompt = normalizeMessagesForXAI(request.messages).map(providerMessageToPromptMessage);
|
|
617
867
|
const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => entry.id === request.model || resolveModelAlias(entry.id) === resolveModelAlias(request.model));
|
|
618
868
|
const reasoningLevel = request.reasoning?.level;
|
|
619
|
-
const mappedReasoning = typeof providerOptions.reasoningEffort === "string" ?
|
|
869
|
+
const mappedReasoning = typeof providerOptions.reasoningEffort === "string" ? normalizeResponsesReasoningEffort(providerOptions.reasoningEffort) : normalizeResponsesReasoningEffort(
|
|
620
870
|
typeof reasoningLevel === "number" ? mapReasoningLevel(reasoningLevel, model?.capabilities.reasoningLevels) : null
|
|
621
871
|
);
|
|
622
|
-
const parallelFunctionCalling = typeof providerOptions.parallel_function_calling === "boolean" ? providerOptions.parallel_function_calling : request.parallelToolCalls;
|
|
623
872
|
return {
|
|
624
873
|
prompt,
|
|
625
874
|
maxOutputTokens: request.maxOutputTokens,
|
|
@@ -636,14 +885,15 @@ var XAIProvider = class {
|
|
|
636
885
|
...mappedReasoning ? { reasoningEffort: mappedReasoning } : {},
|
|
637
886
|
...typeof providerOptions.logprobs === "boolean" ? { logprobs: providerOptions.logprobs } : {},
|
|
638
887
|
...typeof providerOptions.topLogprobs === "number" ? { topLogprobs: providerOptions.topLogprobs } : {},
|
|
639
|
-
...typeof
|
|
640
|
-
...providerOptions.
|
|
888
|
+
...typeof providerOptions.store === "boolean" ? { store: providerOptions.store } : {},
|
|
889
|
+
...typeof providerOptions.previousResponseId === "string" ? { previousResponseId: providerOptions.previousResponseId } : {},
|
|
890
|
+
...Array.isArray(providerOptions.include) ? { include: providerOptions.include } : {}
|
|
641
891
|
}
|
|
642
892
|
}
|
|
643
893
|
};
|
|
644
894
|
}
|
|
645
895
|
getLanguageModel(modelId) {
|
|
646
|
-
return this.client.
|
|
896
|
+
return this.client.responses(resolveModelAlias(modelId));
|
|
647
897
|
}
|
|
648
898
|
getImageModel(modelId) {
|
|
649
899
|
return this.client.image(resolveModelAlias(modelId));
|
|
@@ -666,11 +916,11 @@ var XAIProvider = class {
|
|
|
666
916
|
return {
|
|
667
917
|
body: sdkArgs.args || {
|
|
668
918
|
model: resolveModelAlias(request.model),
|
|
669
|
-
|
|
919
|
+
input: options.prompt
|
|
670
920
|
},
|
|
671
|
-
messagesPath: "
|
|
921
|
+
messagesPath: "input",
|
|
672
922
|
metadata: {
|
|
673
|
-
endpoint: `${this.
|
|
923
|
+
endpoint: `${this.getBaseUrl()}/responses`,
|
|
674
924
|
headers: { "Content-Type": "application/json" }
|
|
675
925
|
}
|
|
676
926
|
};
|
|
@@ -681,7 +931,7 @@ var XAIProvider = class {
|
|
|
681
931
|
const prompt = latestUser ? extractTextFromContent(latestUser.content) : "";
|
|
682
932
|
const files = latestUser && typeof latestUser.content !== "string" ? latestUser.content.filter((part) => part.type === "image" || part.type === "image_url").map((part) => contentPartToImageModelFile(part)) : [];
|
|
683
933
|
const n = typeof providerOptions.numberOfImages === "number" ? providerOptions.numberOfImages : 1;
|
|
684
|
-
const endpoint = `${this.
|
|
934
|
+
const endpoint = `${this.getBaseUrl()}${files.length ? "/images/edits" : "/images/generations"}`;
|
|
685
935
|
const body = {
|
|
686
936
|
model: resolveModelAlias(request.model),
|
|
687
937
|
prompt,
|
|
@@ -715,6 +965,7 @@ var XAIProvider = class {
|
|
|
715
965
|
try {
|
|
716
966
|
const model = this.getLanguageModel(request.model);
|
|
717
967
|
const result = await model.doGenerate(this.buildLanguageModelCallOptions(request));
|
|
968
|
+
const providerToolNames = providerToolNamesFromTools(request.tools);
|
|
718
969
|
const text = result.content.filter((part) => part.type === "text").map((part) => part.text).join("");
|
|
719
970
|
const reasoningParts = result.content.filter((part) => part.type === "reasoning");
|
|
720
971
|
const reasoning = reasoningParts.map((part) => part.text).join("") || null;
|
|
@@ -727,7 +978,8 @@ var XAIProvider = class {
|
|
|
727
978
|
text: part.text,
|
|
728
979
|
format: "xai-ai-sdk-v1"
|
|
729
980
|
})) : void 0,
|
|
730
|
-
toolCalls: extractToolCalls(result.content),
|
|
981
|
+
toolCalls: extractToolCalls(result.content, providerToolNames),
|
|
982
|
+
providerTools: extractProviderToolResults(result.content, providerToolNames),
|
|
731
983
|
finishReason: mapFinishReason(result.finishReason),
|
|
732
984
|
usage,
|
|
733
985
|
metadata: {
|
|
@@ -809,9 +1061,12 @@ var XAIProvider = class {
|
|
|
809
1061
|
try {
|
|
810
1062
|
const model = this.getLanguageModel(request.model);
|
|
811
1063
|
const result = await model.doStream(this.buildLanguageModelCallOptions(request));
|
|
1064
|
+
const providerToolNames = providerToolNamesFromTools(request.tools);
|
|
812
1065
|
return {
|
|
813
1066
|
async *[Symbol.asyncIterator]() {
|
|
814
1067
|
const reader = result.stream.getReader();
|
|
1068
|
+
const skippedProviderToolIds = /* @__PURE__ */ new Map();
|
|
1069
|
+
const loggedProviderToolIds = /* @__PURE__ */ new Set();
|
|
815
1070
|
let finishReason = "stop";
|
|
816
1071
|
let finalUsage = {
|
|
817
1072
|
promptTokens: 0,
|
|
@@ -833,10 +1088,34 @@ var XAIProvider = class {
|
|
|
833
1088
|
} else if (chunk.type === "reasoning-end") {
|
|
834
1089
|
yield { type: "reasoning-done" };
|
|
835
1090
|
} else if (chunk.type === "tool-input-start") {
|
|
1091
|
+
if (providerToolNames.has(chunk.toolName)) {
|
|
1092
|
+
skippedProviderToolIds.set(chunk.id, chunk.toolName);
|
|
1093
|
+
continue;
|
|
1094
|
+
}
|
|
836
1095
|
yield { type: "tool-call-start", id: chunk.id, name: chunk.toolName };
|
|
837
1096
|
} else if (chunk.type === "tool-input-delta") {
|
|
1097
|
+
if (skippedProviderToolIds.has(chunk.id)) continue;
|
|
838
1098
|
yield { type: "tool-call-delta", id: chunk.id, argumentsDelta: chunk.delta };
|
|
839
1099
|
} else if (chunk.type === "tool-call") {
|
|
1100
|
+
const skippedProviderToolName = skippedProviderToolIds.get(chunk.toolCallId);
|
|
1101
|
+
const providerExecutedToolName = providerToolNames.has(chunk.toolName) ? chunk.toolName : skippedProviderToolName;
|
|
1102
|
+
if (skippedProviderToolName || chunk.providerExecuted === true && providerExecutedToolName) {
|
|
1103
|
+
if (providerExecutedToolName) {
|
|
1104
|
+
skippedProviderToolIds.set(chunk.toolCallId, providerExecutedToolName);
|
|
1105
|
+
if (!loggedProviderToolIds.has(chunk.toolCallId)) {
|
|
1106
|
+
loggedProviderToolIds.add(chunk.toolCallId);
|
|
1107
|
+
yield {
|
|
1108
|
+
type: "provider-tool-done",
|
|
1109
|
+
tool: providerToolResultFromCall(
|
|
1110
|
+
providerExecutedToolName,
|
|
1111
|
+
chunk.toolCallId,
|
|
1112
|
+
chunk.input
|
|
1113
|
+
)
|
|
1114
|
+
};
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
continue;
|
|
1118
|
+
}
|
|
840
1119
|
let parsed = {};
|
|
841
1120
|
try {
|
|
842
1121
|
parsed = typeof chunk.input === "string" ? JSON.parse(chunk.input) : chunk.input;
|
|
@@ -880,53 +1159,21 @@ var XAIProvider = class {
|
|
|
880
1159
|
};
|
|
881
1160
|
|
|
882
1161
|
// src/providerOptions.ts
|
|
883
|
-
import { z } from "zod";
|
|
884
|
-
var xaiProviderOptions =
|
|
885
|
-
reasoningEffort:
|
|
886
|
-
logprobs:
|
|
887
|
-
topLogprobs:
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
country: z.string().optional(),
|
|
899
|
-
excludedWebsites: z.array(z.string()).optional(),
|
|
900
|
-
allowedWebsites: z.array(z.string()).optional(),
|
|
901
|
-
safeSearch: z.boolean().optional()
|
|
902
|
-
}),
|
|
903
|
-
z.object({
|
|
904
|
-
type: z.literal("x"),
|
|
905
|
-
excludedXHandles: z.array(z.string()).optional(),
|
|
906
|
-
includedXHandles: z.array(z.string()).optional(),
|
|
907
|
-
xHandles: z.array(z.string()).optional(),
|
|
908
|
-
postFavoriteCount: z.number().optional(),
|
|
909
|
-
postViewCount: z.number().optional()
|
|
910
|
-
}),
|
|
911
|
-
z.object({
|
|
912
|
-
type: z.literal("news"),
|
|
913
|
-
country: z.string().optional(),
|
|
914
|
-
excludedWebsites: z.array(z.string()).optional(),
|
|
915
|
-
safeSearch: z.boolean().optional()
|
|
916
|
-
}),
|
|
917
|
-
z.object({
|
|
918
|
-
type: z.literal("rss"),
|
|
919
|
-
links: z.array(z.string())
|
|
920
|
-
})
|
|
921
|
-
])).optional()
|
|
922
|
-
}).optional(),
|
|
923
|
-
aspect_ratio: z.string().optional(),
|
|
924
|
-
output_format: z.string().optional(),
|
|
925
|
-
sync_mode: z.boolean().optional(),
|
|
926
|
-
resolution: z.enum(["1k", "2k"]).optional(),
|
|
927
|
-
quality: z.enum(["low", "medium", "high"]).optional(),
|
|
928
|
-
user: z.string().optional(),
|
|
929
|
-
numberOfImages: z.number().int().min(1).max(3).optional()
|
|
1162
|
+
import { z as z2 } from "zod";
|
|
1163
|
+
var xaiProviderOptions = z2.object({
|
|
1164
|
+
reasoningEffort: z2.enum(["low", "medium", "high"]).optional(),
|
|
1165
|
+
logprobs: z2.boolean().optional(),
|
|
1166
|
+
topLogprobs: z2.number().int().min(0).max(8).optional(),
|
|
1167
|
+
store: z2.boolean().optional(),
|
|
1168
|
+
previousResponseId: z2.string().optional(),
|
|
1169
|
+
include: z2.array(z2.enum(["file_search_call.results", "reasoning.encrypted_content"])).optional(),
|
|
1170
|
+
aspect_ratio: z2.string().optional(),
|
|
1171
|
+
output_format: z2.string().optional(),
|
|
1172
|
+
sync_mode: z2.boolean().optional(),
|
|
1173
|
+
resolution: z2.enum(["1k", "2k"]).optional(),
|
|
1174
|
+
quality: z2.enum(["low", "medium", "high"]).optional(),
|
|
1175
|
+
user: z2.string().optional(),
|
|
1176
|
+
numberOfImages: z2.number().int().min(1).max(3).optional()
|
|
930
1177
|
}).passthrough();
|
|
931
1178
|
|
|
932
1179
|
// src/index.ts
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/XAIProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import { createXai } from '@ai-sdk/xai';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderAttachment,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { ProviderError, mapReasoningLevel } from '@standardagents/spec';\nimport { getXAIIconDataUri } from './icons';\nimport { calculateXAIUsageCost, ticksToUsd } from './pricing';\n\ntype LanguageModelV3 = any;\ntype ImageModelV3 = any;\ntype LanguageModelV3CallOptions = any;\ntype LanguageModelV3StreamPart = any;\n\ninterface XAIModelCatalogEntry {\n id: string;\n name: string;\n description: string;\n contextLength?: number;\n maxOutputTokens?: number;\n capabilities: ModelCapabilities;\n}\n\nconst MODEL_ALIASES: Record<string, string> = {\n 'grok-4': 'grok-4-0709',\n 'grok-4-latest': 'grok-4-0709',\n};\n\nconst TEXT_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-4-0709',\n name: 'Grok 4 0709',\n description: 'Flagship Grok reasoning model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4',\n name: 'Grok 4',\n description: 'Alias of the current Grok 4 production model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-latest',\n name: 'Grok 4 Latest',\n description: 'Moving alias for the latest Grok 4 snapshot.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n description: 'Low-cost long-context reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast Non-Reasoning',\n description: 'Low-cost long-context non-reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n description: 'Updated fast reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast Non-Reasoning',\n description: 'Updated fast non-reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-0309-reasoning',\n name: 'Grok 4.20 0309 Reasoning',\n description: 'Long-context reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4.20-0309-non-reasoning',\n name: 'Grok 4.20 0309 Non-Reasoning',\n description: 'Long-context non-reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-multi-agent-0309',\n name: 'Grok 4.20 Multi-Agent 0309',\n description: 'Grok multi-agent model for orchestration-heavy workloads.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-code-fast-1',\n name: 'Grok Code Fast 1',\n description: 'Fast coding-oriented Grok model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n },\n },\n {\n id: 'grok-3',\n name: 'Grok 3',\n description: 'General-purpose Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-latest',\n name: 'Grok 3 Latest',\n description: 'Moving alias for the current Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini',\n name: 'Grok 3 Mini',\n description: 'Lower-cost Grok 3 variant.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini-latest',\n name: 'Grok 3 Mini Latest',\n description: 'Moving alias for the current Grok 3 Mini model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n];\n\nconst IMAGE_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-imagine-image',\n name: 'Grok Imagine Image',\n description: 'xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'grok-imagine-image-pro',\n name: 'Grok Imagine Image Pro',\n description: 'Higher-quality xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction resolveModelAlias(modelId: string): string {\n return MODEL_ALIASES[modelId] || modelId;\n}\n\nfunction isImageModel(modelId: string): boolean {\n return resolveModelAlias(modelId).startsWith('grok-imagine-image');\n}\n\nfunction mapFinishReason(reason: { unified: string; raw?: string | undefined }): ProviderFinishReason {\n switch (reason.unified) {\n case 'length':\n return 'length';\n case 'tool-calls':\n return 'tool_calls';\n case 'content-filter':\n return 'content_filter';\n case 'error':\n return 'error';\n case 'stop':\n default:\n return 'stop';\n }\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let index = 0; index < bytes.length; index += 1) {\n binary += String.fromCharCode(bytes[index]);\n }\n return btoa(binary);\n}\n\nfunction providerUsageFromLanguageUsage(modelId: string, usage: any): ProviderUsage {\n const promptTokens = usage?.inputTokens?.total ?? 0;\n const completionTokens = usage?.outputTokens?.total ?? 0;\n const cachedTokens = usage?.inputTokens?.cacheRead ?? 0;\n const result: ProviderUsage = {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n reasoningTokens: usage?.outputTokens?.reasoning ?? undefined,\n cachedTokens,\n provider: 'xai',\n };\n result.cost = calculateXAIUsageCost(modelId, result);\n return result;\n}\n\nfunction extractTextFromContent(content: ProviderMessage['content']): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n return content\n .filter((part): part is Extract<typeof part, { type: 'text' }> => part.type === 'text')\n .map((part) => part.text)\n .join('\\n');\n}\n\nfunction attachmentToFileParts(attachments: ProviderAttachment[] | undefined): Array<{ data: string; mediaType: string; filename?: string }> {\n if (!attachments?.length) return [];\n return attachments\n .filter((attachment: ProviderAttachment) => attachment.type === 'image' && attachment.data)\n .map((attachment: ProviderAttachment) => ({\n data: attachment.data,\n mediaType: attachment.mediaType,\n filename: attachment.name,\n }));\n}\n\nfunction isHttpUrl(value: string): boolean {\n return value.startsWith('http://') || value.startsWith('https://');\n}\n\nfunction parseDataUrl(value: string): { mediaType: string; data: string } | null {\n const match = /^data:([^;,]+);base64,(.*)$/s.exec(value);\n if (!match) return null;\n return {\n mediaType: match[1],\n data: match[2],\n };\n}\n\nfunction normalizeChatReasoningEffort(value: string | null | undefined): 'low' | 'high' | undefined {\n switch (value) {\n case 'high':\n return 'high';\n case 'medium':\n case 'low':\n return 'low';\n default:\n return undefined;\n }\n}\n\nfunction buildFileLanguagePart(data: string, mediaType: string, filename?: string): any {\n if (isHttpUrl(data)) {\n return {\n type: 'file',\n data: new URL(data),\n mediaType,\n filename,\n };\n }\n\n const parsedDataUrl = parseDataUrl(data);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename,\n };\n }\n\n return {\n type: 'file',\n data,\n mediaType,\n filename,\n };\n}\n\nfunction imageUrlToLanguagePart(url: string): any {\n if (isHttpUrl(url)) {\n return {\n type: 'file',\n data: new URL(url),\n mediaType: 'image/*',\n filename: undefined,\n };\n }\n\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename: undefined,\n };\n }\n\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n filename: undefined,\n };\n}\n\nfunction contentPartToImageModelFile(part: any): any {\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (isHttpUrl(url)) {\n return { type: 'url', url };\n }\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n };\n }\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n };\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction imageModelFileToXaiImageUrl(file: any): string {\n if (file.type === 'url') return file.url;\n return `data:${file.mediaType};base64,${file.data}`;\n}\n\nfunction contentPartToLanguagePart(part: any): any {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n return buildFileLanguagePart(part.data, part.mediaType);\n }\n\n if (part.type === 'image_url') {\n return imageUrlToLanguagePart(part.image_url?.url || '');\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction providerMessageToPromptMessage(message: ProviderMessage): any {\n if (message.role === 'system') {\n return { role: 'system', content: message.content };\n }\n\n if (message.role === 'user') {\n const content = typeof message.content === 'string'\n ? [{ type: 'text', text: message.content }]\n : message.content.map(contentPartToLanguagePart);\n\n return { role: 'user', content };\n }\n\n if (message.role === 'assistant') {\n const content: any[] = [];\n if (message.content) content.push({ type: 'text', text: message.content });\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.arguments,\n });\n }\n }\n return { role: 'assistant', content };\n }\n\n const content = [];\n if (typeof message.content === 'string') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content },\n });\n } else if ('type' in message.content && message.content.type === 'error') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'error-text', value: message.content.error },\n });\n } else if ('type' in message.content && message.content.type === 'text') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content.text },\n });\n } else {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: {\n type: 'content',\n value: Array.isArray(message.content)\n ? message.content.reduce<any[]>((parts, part: any) => {\n if (part.type === 'text') {\n parts.push({ type: 'text', text: part.text });\n return parts;\n }\n if (part.type === 'image') {\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType });\n return parts;\n }\n if (part.type === 'image_url') {\n parts.push({ type: 'file-url', url: part.image_url.url });\n return parts;\n }\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType, filename: part.filename });\n return parts;\n }, [])\n : [{ type: 'text', text: JSON.stringify(message.content) }],\n },\n });\n }\n\n return { role: 'tool', content };\n}\n\nfunction normalizeMessagesForXAI(messages: ProviderMessage[]): ProviderMessage[] {\n const systemMessages = messages.filter((message) => message.role === 'system');\n const nonSystemMessages = messages.filter((message) => message.role !== 'system');\n\n if (!systemMessages.length) return nonSystemMessages;\n\n return [\n {\n role: 'system',\n content: systemMessages.map((message) => message.content).join('\\n\\n'),\n },\n ...nonSystemMessages,\n ];\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): Array<any> | undefined {\n if (!tools?.length) return undefined;\n\n return tools.map((tool) => ({\n type: 'function',\n name: tool.function.name,\n description: tool.function.description,\n inputSchema: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n }));\n}\n\nfunction mapToolChoice(choice: ProviderRequest['toolChoice']): any {\n if (choice === 'auto' || choice === 'none' || choice === 'required') {\n return { type: choice };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return { type: 'tool', toolName: choice.name };\n }\n return undefined;\n}\n\nfunction extractToolCalls(content: any[]): ProviderToolCallPart[] | undefined {\n const toolCalls = content.filter((part: any) => part.type === 'tool-call');\n if (!toolCalls.length) return undefined;\n\n return toolCalls.map((part: any) => {\n let input: Record<string, unknown> = {};\n if (typeof part.input === 'string') {\n try {\n input = JSON.parse(part.input);\n } catch {\n input = {};\n }\n } else if (part.input && typeof part.input === 'object') {\n input = part.input as Record<string, unknown>;\n }\n\n return {\n id: part.toolCallId,\n name: part.toolName,\n arguments: input,\n };\n });\n}\n\nexport class XAIProvider implements Provider {\n readonly name = 'xai';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private readonly client = createXai({\n apiKey: '',\n });\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n this.client = createXai({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n });\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n getIcon(_modelId?: string): string {\n return getXAIIconDataUri();\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const models = [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n contextLength: model.contextLength,\n iconId: this.getIcon(model.id),\n slug: resolveModelAlias(model.id),\n }));\n\n if (!filter) return models;\n\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const resolved = resolveModelAlias(modelId);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);\n return model ? { ...model.capabilities } : null;\n }\n\n private buildLanguageModelCallOptions(request: ProviderRequest): LanguageModelV3CallOptions {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const prompt = normalizeMessagesForXAI(request.messages).map(providerMessageToPromptMessage);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => entry.id === request.model || resolveModelAlias(entry.id) === resolveModelAlias(request.model));\n const reasoningLevel = request.reasoning?.level;\n const mappedReasoning = typeof providerOptions.reasoningEffort === 'string'\n ? normalizeChatReasoningEffort(providerOptions.reasoningEffort)\n : normalizeChatReasoningEffort(\n typeof reasoningLevel === 'number'\n ? mapReasoningLevel(reasoningLevel, model?.capabilities.reasoningLevels)\n : null\n );\n const parallelFunctionCalling = typeof providerOptions.parallel_function_calling === 'boolean'\n ? providerOptions.parallel_function_calling\n : request.parallelToolCalls;\n\n return {\n prompt,\n maxOutputTokens: request.maxOutputTokens,\n temperature: request.temperature,\n topP: request.topP,\n topK: request.topK,\n stopSequences: request.stopSequences,\n responseFormat: request.responseFormat,\n tools: transformTools(request.tools),\n toolChoice: mapToolChoice(request.toolChoice),\n abortSignal: request.signal,\n providerOptions: {\n xai: {\n ...(mappedReasoning ? { reasoningEffort: mappedReasoning } : {}),\n ...(typeof providerOptions.logprobs === 'boolean' ? { logprobs: providerOptions.logprobs } : {}),\n ...(typeof providerOptions.topLogprobs === 'number' ? { topLogprobs: providerOptions.topLogprobs } : {}),\n ...(typeof parallelFunctionCalling === 'boolean' ? { parallel_function_calling: parallelFunctionCalling } : {}),\n ...(providerOptions.searchParameters ? { searchParameters: providerOptions.searchParameters } : {}),\n },\n },\n };\n }\n\n private getLanguageModel(modelId: string): LanguageModelV3 {\n return this.client.chat(resolveModelAlias(modelId));\n }\n\n private getImageModel(modelId: string): ImageModelV3 {\n return this.client.image(resolveModelAlias(modelId));\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImageModel(request.model)) {\n const imageRequest = this.extractImageRequest(request);\n return {\n body: imageRequest.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imageRequest.endpoint,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n const options = this.buildLanguageModelCallOptions(request);\n const model = this.getLanguageModel(request.model) as any;\n const sdkArgs = typeof model?.getArgs === 'function'\n ? await model.getArgs(options)\n : { args: undefined };\n return {\n body: sdkArgs.args || {\n model: resolveModelAlias(request.model),\n messages: options.prompt,\n },\n messagesPath: 'messages',\n metadata: {\n endpoint: `${this.config.baseUrl || 'https://api.x.ai/v1'}/chat/completions`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n private extractImageRequest(request: ProviderRequest): {\n prompt: string;\n files?: any[];\n body: Record<string, unknown>;\n endpoint: string;\n n: number;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? extractTextFromContent(latestUser.content) : '';\n const files = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image' || part.type === 'image_url')\n .map((part: any) => contentPartToImageModelFile(part))\n : [];\n const n = typeof providerOptions.numberOfImages === 'number' ? providerOptions.numberOfImages : 1;\n const endpoint = `${this.config.baseUrl || 'https://api.x.ai/v1'}${files.length ? '/images/edits' : '/images/generations'}`;\n const body: Record<string, unknown> = {\n model: resolveModelAlias(request.model),\n prompt,\n n,\n response_format: 'b64_json',\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n };\n const imageUrls = files.map((file: any) => imageModelFileToXaiImageUrl(file));\n if (imageUrls.length === 1) {\n body.image = { url: imageUrls[0], type: 'image_url' };\n } else if (imageUrls.length > 1) {\n body.images = imageUrls.map((url: string) => ({ url, type: 'image_url' }));\n }\n\n return {\n prompt,\n files: files.length ? files : undefined,\n body,\n endpoint,\n n,\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImageModel(request.model)) {\n return this.generateImage(request);\n }\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doGenerate(this.buildLanguageModelCallOptions(request));\n const text = result.content\n .filter((part: any) => part.type === 'text')\n .map((part: any) => part.text)\n .join('');\n const reasoningParts = result.content.filter((part: any) => part.type === 'reasoning');\n const reasoning = reasoningParts.map((part: any) => part.text).join('') || null;\n const usage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), result.usage);\n\n return {\n content: text || null,\n reasoning,\n reasoningDetails: reasoningParts.length\n ? reasoningParts.map((part: any) => ({\n type: 'text',\n text: part.text,\n format: 'xai-ai-sdk-v1',\n }))\n : undefined,\n toolCalls: extractToolCalls(result.content),\n finishReason: mapFinishReason(result.finishReason),\n usage,\n metadata: {\n provider: 'xai',\n model: result.response?.modelId || resolveModelAlias(request.model),\n responseId: result.response?.id,\n warnings: result.warnings,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImage(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const imageModel = this.getImageModel(request.model);\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const extracted = this.extractImageRequest(request);\n\n const result = await imageModel.doGenerate({\n prompt: extracted.prompt,\n n: extracted.n,\n size: undefined,\n aspectRatio: typeof providerOptions.aspect_ratio === 'string'\n ? providerOptions.aspect_ratio as `${number}:${number}`\n : undefined,\n seed: undefined,\n providerOptions: {\n xai: {\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n },\n },\n abortSignal: request.signal,\n headers: undefined,\n files: extracted.files,\n mask: undefined,\n } as any);\n\n const images: ProviderGeneratedImage[] = result.images.map((image: any, index: number) => {\n const base64 = typeof image === 'string' ? image : bytesToBase64(image);\n const metadataImages = result.providerMetadata?.xai?.images;\n const revisedPrompt = Array.isArray(metadataImages)\n ? (metadataImages[index] as Record<string, unknown> | undefined)?.revisedPrompt\n : undefined;\n\n return {\n id: `image_${index}`,\n data: base64,\n mediaType: typeof providerOptions.output_format === 'string'\n ? `image/${providerOptions.output_format}`\n : 'image/png',\n revisedPrompt: typeof revisedPrompt === 'string' ? revisedPrompt : undefined,\n };\n });\n\n const cost = ticksToUsd(\n typeof result.providerMetadata?.xai?.costInUsdTicks === 'number'\n ? result.providerMetadata.xai.costInUsdTicks\n : undefined\n );\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: result.usage?.inputTokens ?? 0,\n completionTokens: result.usage?.outputTokens ?? 0,\n totalTokens: (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0),\n cost,\n provider: 'xai',\n },\n metadata: {\n provider: 'xai',\n model: result.response.modelId,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImageModel(request.model)) {\n throw new ProviderError('xAI image models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doStream(this.buildLanguageModelCallOptions(request));\n\n return {\n async *[Symbol.asyncIterator]() {\n const reader = result.stream.getReader();\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'xai',\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = value as LanguageModelV3StreamPart;\n\n if (chunk.type === 'text-delta') {\n yield { type: 'content-delta', delta: chunk.delta };\n } else if (chunk.type === 'text-end') {\n yield { type: 'content-done' };\n } else if (chunk.type === 'reasoning-delta') {\n yield { type: 'reasoning-delta', delta: chunk.delta };\n } else if (chunk.type === 'reasoning-end') {\n yield { type: 'reasoning-done' };\n } else if (chunk.type === 'tool-input-start') {\n yield { type: 'tool-call-start', id: chunk.id, name: chunk.toolName };\n } else if (chunk.type === 'tool-input-delta') {\n yield { type: 'tool-call-delta', id: chunk.id, argumentsDelta: chunk.delta };\n } else if (chunk.type === 'tool-call') {\n let parsed: Record<string, unknown> = {};\n try {\n parsed = typeof chunk.input === 'string' ? JSON.parse(chunk.input) : (chunk.input as Record<string, unknown>);\n } catch {\n parsed = {};\n }\n\n yield { type: 'tool-call-done', id: chunk.toolCallId, arguments: parsed };\n } else if (chunk.type === 'finish') {\n finishReason = mapFinishReason(chunk.finishReason);\n finalUsage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), chunk.usage);\n } else if (chunk.type === 'error') {\n yield { type: 'error', error: String(chunk.error) };\n }\n }\n\n yield { type: 'finish', finishReason, usage: finalUsage };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n } finally {\n reader.releaseLock();\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","import XAI_ICON from './xai.png';\n\nexport function getXAIIconDataUri(): string {\n return XAI_ICON;\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-code-fast-1': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },\n 'grok-3': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-mini': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n 'grok-3-mini-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n};\n\nexport function getXAITextPricing(modelId: string): XAITextPricing | undefined {\n return MODEL_PRICING[modelId];\n}\n\nexport function calculateXAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getXAITextPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / 1_000_000) * pricing.inputPerMillion;\n const cachedCost = pricing.cachedInputPerMillion\n ? (cachedTokens / 1_000_000) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / 1_000_000) * pricing.outputPerMillion;\n\n return Number((inputCost + cachedCost + outputCost).toFixed(12));\n}\n\nexport function ticksToUsd(ticks: number | undefined): number | undefined {\n if (typeof ticks !== 'number') return undefined;\n return Number((ticks / 1_000_000_000).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const xaiProviderOptions = z.object({\n reasoningEffort: z.enum(['low', 'high']).optional(),\n logprobs: z.boolean().optional(),\n topLogprobs: z.number().int().min(0).max(8).optional(),\n parallel_function_calling: z.boolean().optional(),\n searchParameters: z.object({\n mode: z.enum(['off', 'auto', 'on']),\n returnCitations: z.boolean().optional(),\n fromDate: z.string().optional(),\n toDate: z.string().optional(),\n maxSearchResults: z.number().int().optional(),\n sources: z.array(z.discriminatedUnion('type', [\n z.object({\n type: z.literal('web'),\n country: z.string().optional(),\n excludedWebsites: z.array(z.string()).optional(),\n allowedWebsites: z.array(z.string()).optional(),\n safeSearch: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('x'),\n excludedXHandles: z.array(z.string()).optional(),\n includedXHandles: z.array(z.string()).optional(),\n xHandles: z.array(z.string()).optional(),\n postFavoriteCount: z.number().optional(),\n postViewCount: z.number().optional(),\n }),\n z.object({\n type: z.literal('news'),\n country: z.string().optional(),\n excludedWebsites: z.array(z.string()).optional(),\n safeSearch: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('rss'),\n links: z.array(z.string()),\n }),\n ])).optional(),\n }).optional(),\n aspect_ratio: z.string().optional(),\n output_format: z.string().optional(),\n sync_mode: z.boolean().optional(),\n resolution: z.enum(['1k', '2k']).optional(),\n quality: z.enum(['low', 'medium', 'high']).optional(),\n user: z.string().optional(),\n numberOfImages: z.number().int().min(1).max(3).optional(),\n}).passthrough();\n\nexport type XAIProviderOptions = z.infer<typeof xaiProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { XAIProvider } from './XAIProvider';\nimport { xaiProviderOptions } from './providerOptions';\n\n/**\n * xAI provider factory for Standard Agents.\n *\n * Uses the official `@ai-sdk/xai` provider for chat and image models.\n */\nexport const xai: ProviderFactoryWithOptions<typeof xaiProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new XAIProvider(config),\n { providerOptions: xaiProviderOptions }\n);\n\nexport { xaiProviderOptions, type XAIProviderOptions } from './providerOptions';\nexport { XAIProvider } from './XAIProvider';\n"],"mappings":"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","names":["content"]}
|
|
1
|
+
{"version":3,"sources":["../src/XAIProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import { createXai } from '@ai-sdk/xai';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderAttachment,\n ProviderExecutedToolResult,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderModelsPage,\n ProviderModelsQuery,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ToolArgs,\n ToolDefinition,\n ToolResult,\n ToolTenvs,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { defineTool, ProviderError, mapReasoningLevel } from '@standardagents/spec';\nimport { z } from 'zod';\nimport { getXAIIconDataUri } from './icons';\nimport { calculateXAIUsageCost, ticksToUsd } from './pricing';\n\ntype LanguageModelV3 = any;\ntype ImageModelV3 = any;\ntype LanguageModelV3CallOptions = any;\ntype LanguageModelV3StreamPart = any;\n\nconst XAI_PROVIDER_TOOL_RESULT: ToolResult = {\n status: 'success',\n result: 'Handled by xAI',\n};\n\ninterface XAIModelCatalogEntry {\n id: string;\n name: string;\n description: string;\n contextLength?: number;\n maxOutputTokens?: number;\n capabilities: ModelCapabilities;\n}\n\ninterface XAIModelInfo {\n id: string;\n object?: string;\n created?: number;\n owned_by?: string;\n}\n\nconst MODEL_ALIASES: Record<string, string> = {\n 'grok-4': 'grok-4-0709',\n 'grok-4-latest': 'grok-4-0709',\n};\n\nconst TEXT_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-4-0709',\n name: 'Grok 4 0709',\n description: 'Flagship Grok reasoning model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4',\n name: 'Grok 4',\n description: 'Alias of the current Grok 4 production model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-latest',\n name: 'Grok 4 Latest',\n description: 'Moving alias for the latest Grok 4 snapshot.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n description: 'Low-cost long-context reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast Non-Reasoning',\n description: 'Low-cost long-context non-reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n description: 'Updated fast reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast Non-Reasoning',\n description: 'Updated fast non-reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-0309-reasoning',\n name: 'Grok 4.20 0309 Reasoning',\n description: 'Long-context reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4.20-0309-non-reasoning',\n name: 'Grok 4.20 0309 Non-Reasoning',\n description: 'Long-context non-reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-multi-agent-0309',\n name: 'Grok 4.20 Multi-Agent 0309',\n description: 'Grok multi-agent model for orchestration-heavy workloads.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-code-fast-1',\n name: 'Grok Code Fast 1',\n description: 'Fast coding-oriented Grok model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n },\n },\n {\n id: 'grok-3',\n name: 'Grok 3',\n description: 'General-purpose Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-latest',\n name: 'Grok 3 Latest',\n description: 'Moving alias for the current Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini',\n name: 'Grok 3 Mini',\n description: 'Lower-cost Grok 3 variant.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini-latest',\n name: 'Grok 3 Mini Latest',\n description: 'Moving alias for the current Grok 3 Mini model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n];\n\nconst IMAGE_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-imagine-image',\n name: 'Grok Imagine Image',\n description: 'xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'grok-imagine-image-pro',\n name: 'Grok Imagine Image Pro',\n description: 'Higher-quality xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction resolveModelAlias(modelId: string): string {\n return MODEL_ALIASES[modelId] || modelId;\n}\n\nfunction isImageModel(modelId: string): boolean {\n return resolveModelAlias(modelId).startsWith('grok-imagine-image');\n}\n\nfunction mapFinishReason(reason: { unified: string; raw?: string | undefined }): ProviderFinishReason {\n switch (reason.unified) {\n case 'length':\n return 'length';\n case 'tool-calls':\n return 'tool_calls';\n case 'content-filter':\n return 'content_filter';\n case 'error':\n return 'error';\n case 'stop':\n default:\n return 'stop';\n }\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let index = 0; index < bytes.length; index += 1) {\n binary += String.fromCharCode(bytes[index]);\n }\n return btoa(binary);\n}\n\nfunction providerUsageFromLanguageUsage(modelId: string, usage: any): ProviderUsage {\n const promptTokens = usage?.inputTokens?.total ?? 0;\n const completionTokens = usage?.outputTokens?.total ?? 0;\n const cachedTokens = usage?.inputTokens?.cacheRead ?? 0;\n const result: ProviderUsage = {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n reasoningTokens: usage?.outputTokens?.reasoning ?? undefined,\n cachedTokens,\n provider: 'xai',\n };\n result.cost = calculateXAIUsageCost(modelId, result);\n return result;\n}\n\nfunction extractTextFromContent(content: ProviderMessage['content']): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n return content\n .filter((part): part is Extract<typeof part, { type: 'text' }> => part.type === 'text')\n .map((part) => part.text)\n .join('\\n');\n}\n\nfunction attachmentToFileParts(attachments: ProviderAttachment[] | undefined): Array<{ data: string; mediaType: string; filename?: string }> {\n if (!attachments?.length) return [];\n return attachments\n .filter((attachment: ProviderAttachment) => attachment.type === 'image' && attachment.data)\n .map((attachment: ProviderAttachment) => ({\n data: attachment.data,\n mediaType: attachment.mediaType,\n filename: attachment.name,\n }));\n}\n\nfunction isHttpUrl(value: string): boolean {\n return value.startsWith('http://') || value.startsWith('https://');\n}\n\nfunction parseDataUrl(value: string): { mediaType: string; data: string } | null {\n const match = /^data:([^;,]+);base64,(.*)$/s.exec(value);\n if (!match) return null;\n return {\n mediaType: match[1],\n data: match[2],\n };\n}\n\nfunction normalizeResponsesReasoningEffort(value: string | null | undefined): 'low' | 'medium' | 'high' | undefined {\n switch (value) {\n case 'high':\n case 'medium':\n case 'low':\n return value;\n default:\n return undefined;\n }\n}\n\nfunction buildFileLanguagePart(data: string, mediaType: string, filename?: string): any {\n if (isHttpUrl(data)) {\n return {\n type: 'file',\n data: new URL(data),\n mediaType,\n filename,\n };\n }\n\n const parsedDataUrl = parseDataUrl(data);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename,\n };\n }\n\n return {\n type: 'file',\n data,\n mediaType,\n filename,\n };\n}\n\nfunction imageUrlToLanguagePart(url: string): any {\n if (isHttpUrl(url)) {\n return {\n type: 'file',\n data: new URL(url),\n mediaType: 'image/*',\n filename: undefined,\n };\n }\n\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename: undefined,\n };\n }\n\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n filename: undefined,\n };\n}\n\nfunction contentPartToImageModelFile(part: any): any {\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (isHttpUrl(url)) {\n return { type: 'url', url };\n }\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n };\n }\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n };\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction imageModelFileToXaiImageUrl(file: any): string {\n if (file.type === 'url') return file.url;\n return `data:${file.mediaType};base64,${file.data}`;\n}\n\nfunction contentPartToLanguagePart(part: any): any {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n return buildFileLanguagePart(part.data, part.mediaType);\n }\n\n if (part.type === 'image_url') {\n return imageUrlToLanguagePart(part.image_url?.url || '');\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction providerMessageToPromptMessage(message: ProviderMessage): any {\n if (message.role === 'system') {\n return { role: 'system', content: message.content };\n }\n\n if (message.role === 'user') {\n const content = typeof message.content === 'string'\n ? [{ type: 'text', text: message.content }]\n : message.content.map(contentPartToLanguagePart);\n\n return { role: 'user', content };\n }\n\n if (message.role === 'assistant') {\n const content: any[] = [];\n if (message.content) content.push({ type: 'text', text: message.content });\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.arguments,\n });\n }\n }\n return { role: 'assistant', content };\n }\n\n const content = [];\n if (typeof message.content === 'string') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content },\n });\n } else if ('type' in message.content && message.content.type === 'error') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'error-text', value: message.content.error },\n });\n } else if ('type' in message.content && message.content.type === 'text') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content.text },\n });\n } else {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: {\n type: 'content',\n value: Array.isArray(message.content)\n ? message.content.reduce<any[]>((parts, part: any) => {\n if (part.type === 'text') {\n parts.push({ type: 'text', text: part.text });\n return parts;\n }\n if (part.type === 'image') {\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType });\n return parts;\n }\n if (part.type === 'image_url') {\n parts.push({ type: 'file-url', url: part.image_url.url });\n return parts;\n }\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType, filename: part.filename });\n return parts;\n }, [])\n : [{ type: 'text', text: JSON.stringify(message.content) }],\n },\n });\n }\n\n return { role: 'tool', content };\n}\n\nfunction normalizeMessagesForXAI(messages: ProviderMessage[]): ProviderMessage[] {\n const systemMessages = messages.filter((message) => message.role === 'system');\n const nonSystemMessages = messages.filter((message) => message.role !== 'system');\n\n if (!systemMessages.length) return nonSystemMessages;\n\n return [\n {\n role: 'system',\n content: systemMessages.map((message) => message.content).join('\\n\\n'),\n },\n ...nonSystemMessages,\n ];\n}\n\nfunction isXAIProviderTool(tool: ProviderTool, name: string): boolean {\n return (\n tool.executionMode === 'provider' &&\n tool.executionProvider === 'xai' &&\n tool.function.name === name\n );\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): Array<any> | undefined {\n if (!tools?.length) return undefined;\n\n const enableImageUnderstanding = tools.some((tool) => isXAIProviderTool(tool, 'view_image'));\n const enableVideoUnderstanding = tools.some((tool) => isXAIProviderTool(tool, 'view_x_video'));\n\n const transformedTools = tools.flatMap((tool) => {\n if (tool.executionMode === 'provider' && tool.executionProvider === 'xai') {\n const nativeTool = transformNativeTool(\n tool.function.name,\n enableImageUnderstanding,\n enableVideoUnderstanding\n );\n return nativeTool ? [nativeTool] : [];\n }\n\n return [{\n type: 'function',\n name: tool.function.name,\n description: tool.function.description,\n inputSchema: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n }];\n });\n\n return transformedTools.length ? transformedTools : undefined;\n}\n\nfunction transformNativeTool(\n name: string,\n enableImageUnderstanding: boolean,\n enableVideoUnderstanding: boolean\n): any | undefined {\n switch (name) {\n case 'web_search':\n return {\n type: 'provider',\n id: 'xai.web_search',\n name,\n args: {\n ...(enableImageUnderstanding ? { enableImageUnderstanding: true } : {}),\n },\n };\n case 'x_search':\n return {\n type: 'provider',\n id: 'xai.x_search',\n name,\n args: {\n ...(enableImageUnderstanding ? { enableImageUnderstanding: true } : {}),\n ...(enableVideoUnderstanding ? { enableVideoUnderstanding: true } : {}),\n },\n };\n case 'code_execution':\n return { type: 'provider', id: 'xai.code_execution', name, args: {} };\n case 'view_image':\n case 'view_x_video':\n return undefined;\n default:\n return undefined;\n }\n}\n\nfunction mapToolChoice(choice: ProviderRequest['toolChoice']): any {\n if (choice === 'auto' || choice === 'none' || choice === 'required') {\n return { type: choice };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return { type: 'tool', toolName: choice.name };\n }\n return undefined;\n}\n\nfunction providerToolNamesFromTools(tools: ProviderTool[] | undefined): Set<string> {\n return new Set(\n (tools ?? [])\n .filter((tool) => tool.executionMode === 'provider' && tool.executionProvider === 'xai')\n .map((tool) => tool.function.name)\n );\n}\n\nfunction parseProviderToolInput(input: unknown): Record<string, unknown> | undefined {\n if (typeof input === 'string') {\n if (!input.trim()) return undefined;\n try {\n const parsed = JSON.parse(input);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : undefined;\n } catch {\n return { raw: input };\n }\n }\n\n return input && typeof input === 'object' && !Array.isArray(input)\n ? input as Record<string, unknown>\n : undefined;\n}\n\nfunction searchActionFromInput(input: Record<string, unknown> | undefined): ProviderExecutedToolResult['result'] {\n const queryKeys = ['query', 'search_query', 'q', 'keywords', 'username', 'handle', 'url'];\n const query = queryKeys\n .map((key) => input?.[key])\n .find((value): value is string => typeof value === 'string' && value.length > 0);\n\n return query\n ? { input, actions: [{ type: 'search', query }] }\n : input && Object.keys(input).length > 0\n ? { input }\n : undefined;\n}\n\nfunction providerToolResultFromCall(\n toolName: string,\n id: string,\n input: unknown\n): ProviderExecutedToolResult {\n const parsedInput = parseProviderToolInput(input);\n const result = toolName === 'web_search' || toolName === 'x_search'\n ? searchActionFromInput(parsedInput)\n : parsedInput && Object.keys(parsedInput).length > 0\n ? { input: parsedInput }\n : undefined;\n\n return {\n name: toolName,\n type: toolName,\n provider: 'xai',\n id,\n status: 'completed',\n ...(result ? { result } : {}),\n };\n}\n\nfunction extractProviderToolResults(\n content: any[],\n providerToolNames = new Set<string>()\n): ProviderExecutedToolResult[] | undefined {\n const providerTools = content\n .filter((part: any) => part.type === 'tool-call')\n .filter((part: any) => part.providerExecuted === true && providerToolNames.has(part.toolName))\n .map((part: any) => providerToolResultFromCall(\n part.toolName,\n part.toolCallId,\n part.input\n ));\n\n return providerTools.length > 0 ? providerTools : undefined;\n}\n\nfunction extractToolCalls(content: any[], providerToolNames = new Set<string>()): ProviderToolCallPart[] | undefined {\n const toolCalls = content.filter((part: any) => part.type === 'tool-call');\n const localToolCalls = toolCalls.filter(\n (part: any) => !(part.providerExecuted === true && providerToolNames.has(part.toolName))\n );\n if (!localToolCalls.length) return undefined;\n\n return localToolCalls.map((part: any) => {\n let input: Record<string, unknown> = {};\n if (typeof part.input === 'string') {\n try {\n input = JSON.parse(part.input);\n } catch {\n input = {};\n }\n } else if (part.input && typeof part.input === 'object') {\n input = part.input as Record<string, unknown>;\n }\n\n return {\n id: part.toolCallId,\n name: part.toolName,\n arguments: input,\n };\n });\n}\n\nexport class XAIProvider implements Provider {\n readonly name = 'xai';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private modelsCache: XAIModelInfo[] | null = null;\n private modelsCacheTime = 0;\n private readonly client = createXai({\n apiKey: '',\n });\n\n private static readonly CACHE_TTL = 5 * 60 * 1000;\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n this.client = createXai({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n });\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n private static readonly TOOLS: Record<string, ToolDefinition<any, ToolArgs | null, ToolTenvs | null>> = {\n web_search: defineTool({\n description: 'Search the web for up-to-date information with citations using xAI Responses API',\n args: z.object({}),\n execute: async () => XAI_PROVIDER_TOOL_RESULT,\n executionMode: 'provider',\n executionProvider: 'xai',\n }),\n x_search: defineTool({\n description: 'Search X posts and conversations using xAI Responses API',\n args: z.object({}),\n execute: async () => XAI_PROVIDER_TOOL_RESULT,\n executionMode: 'provider',\n executionProvider: 'xai',\n }),\n code_execution: defineTool({\n description: 'Execute Python code in xAI server-side sandbox',\n args: z.object({}),\n execute: async () => XAI_PROVIDER_TOOL_RESULT,\n executionMode: 'provider',\n executionProvider: 'xai',\n }),\n view_image: defineTool({\n description: 'Enable xAI image understanding for images found during Web Search or X Search',\n args: z.object({}),\n execute: async () => XAI_PROVIDER_TOOL_RESULT,\n executionMode: 'provider',\n executionProvider: 'xai',\n }),\n view_x_video: defineTool({\n description: 'Enable xAI video understanding for videos found during X Search',\n args: z.object({}),\n execute: async () => XAI_PROVIDER_TOOL_RESULT,\n executionMode: 'provider',\n executionProvider: 'xai',\n }),\n };\n\n getIcon(_modelId?: string): string {\n return getXAIIconDataUri();\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const models = await this.getAllModels();\n return this.filterModels(models, filter);\n }\n\n async getModelsPage(query?: ProviderModelsQuery): Promise<ProviderModelsPage> {\n const page = Math.max(1, query?.page ?? 1);\n const perPage = Math.max(1, query?.perPage ?? 50);\n const models = this.filterModels(await this.getAllModels(), query?.search);\n const start = (page - 1) * perPage;\n const pageModels = models.slice(start, start + perPage);\n\n return {\n models: pageModels,\n hasNextPage: start + perPage < models.length,\n };\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const resolved = resolveModelAlias(modelId);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);\n return model ? { ...model.capabilities } : this.inferCapabilities(modelId);\n }\n\n getTools(_modelId?: string): Record<string, ToolDefinition<any, ToolArgs | null, ToolTenvs | null>> {\n return { ...XAIProvider.TOOLS };\n }\n\n private async getAllModels(): Promise<ProviderModelInfo[]> {\n try {\n const liveModels = await this.fetchModelsWithCache();\n return liveModels\n .map((model) => this.mapLiveModel(model))\n .sort((a, b) => a.name.localeCompare(b.name));\n } catch (error) {\n console.error('Failed to fetch models from xAI:', error);\n return this.getStaticModels();\n }\n }\n\n private async fetchModelsWithCache(): Promise<XAIModelInfo[]> {\n const now = Date.now();\n if (this.modelsCache && now - this.modelsCacheTime < XAIProvider.CACHE_TTL) {\n return this.modelsCache;\n }\n\n const response = await fetch(`${this.getBaseUrl()}/models`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new ProviderError(`xAI models request failed with status ${response.status}`, 'server_error', response.status);\n }\n\n const payload: unknown = await response.json();\n const data = this.parseModelsPayload(payload);\n this.modelsCache = data;\n this.modelsCacheTime = now;\n return data;\n }\n\n private parseModelsPayload(payload: unknown): XAIModelInfo[] {\n if (!payload || typeof payload !== 'object' || !('data' in payload)) {\n throw new ProviderError('xAI models response did not include a data array', 'invalid_request');\n }\n\n const data = (payload as { data: unknown }).data;\n if (!Array.isArray(data)) {\n throw new ProviderError('xAI models response data was not an array', 'invalid_request');\n }\n\n return data\n .filter((model): model is Record<string, unknown> => typeof model === 'object' && model !== null)\n .filter((model) => typeof model.id === 'string')\n .map((model) => ({\n id: model.id as string,\n object: typeof model.object === 'string' ? model.object : undefined,\n created: typeof model.created === 'number' ? model.created : undefined,\n owned_by: typeof model.owned_by === 'string' ? model.owned_by : undefined,\n }));\n }\n\n private getStaticModels(): ProviderModelInfo[] {\n return [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => this.mapCatalogModel(model));\n }\n\n private mapCatalogModel(model: XAIModelCatalogEntry): ProviderModelInfo {\n return {\n id: model.id,\n name: model.name,\n description: model.description,\n contextLength: model.contextLength,\n iconId: this.getIcon(model.id),\n slug: resolveModelAlias(model.id),\n capabilities: { ...model.capabilities },\n };\n }\n\n private mapLiveModel(model: XAIModelInfo): ProviderModelInfo {\n const catalogModel = [...TEXT_MODELS, ...IMAGE_MODELS].find(\n (entry) => resolveModelAlias(entry.id) === resolveModelAlias(model.id)\n );\n\n if (catalogModel) {\n return this.mapCatalogModel({ ...catalogModel, id: model.id });\n }\n\n return {\n id: model.id,\n name: this.formatModelName(model.id),\n description: model.owned_by ? `xAI model owned by ${model.owned_by}` : 'xAI model',\n iconId: this.getIcon(model.id),\n slug: resolveModelAlias(model.id),\n capabilities: this.inferCapabilities(model.id),\n };\n }\n\n private formatModelName(modelId: string): string {\n return modelId\n .split('-')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n }\n\n private inferCapabilities(modelId: string): ModelCapabilities {\n if (isImageModel(modelId)) {\n return {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n };\n }\n\n const resolved = resolveModelAlias(modelId);\n const isMini = resolved.includes('mini');\n const isCode = resolved.includes('code');\n const longContext = resolved.includes('fast') || resolved.includes('4.20') || resolved.includes('4-1') || resolved.includes('4.3');\n const supportsReasoning = !resolved.includes('non-reasoning') && !isCode;\n\n return {\n supportsImages: !isMini && !isCode,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: longContext ? 2000000 : 256000,\n ...(supportsReasoning ? { reasoningLevels: { 0: null, 50: 'medium', 100: 'high' } } : {}),\n };\n }\n\n private filterModels(models: ProviderModelInfo[], filter?: string): ProviderModelInfo[] {\n if (!filter) return models;\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n private getBaseUrl(): string {\n return (this.config.baseUrl || 'https://api.x.ai/v1').replace(/\\/+$/, '');\n }\n\n private buildLanguageModelCallOptions(request: ProviderRequest): LanguageModelV3CallOptions {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const prompt = normalizeMessagesForXAI(request.messages).map(providerMessageToPromptMessage);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => entry.id === request.model || resolveModelAlias(entry.id) === resolveModelAlias(request.model));\n const reasoningLevel = request.reasoning?.level;\n const mappedReasoning = typeof providerOptions.reasoningEffort === 'string'\n ? normalizeResponsesReasoningEffort(providerOptions.reasoningEffort)\n : normalizeResponsesReasoningEffort(\n typeof reasoningLevel === 'number'\n ? mapReasoningLevel(reasoningLevel, model?.capabilities.reasoningLevels)\n : null\n );\n return {\n prompt,\n maxOutputTokens: request.maxOutputTokens,\n temperature: request.temperature,\n topP: request.topP,\n topK: request.topK,\n stopSequences: request.stopSequences,\n responseFormat: request.responseFormat,\n tools: transformTools(request.tools),\n toolChoice: mapToolChoice(request.toolChoice),\n abortSignal: request.signal,\n providerOptions: {\n xai: {\n ...(mappedReasoning ? { reasoningEffort: mappedReasoning } : {}),\n ...(typeof providerOptions.logprobs === 'boolean' ? { logprobs: providerOptions.logprobs } : {}),\n ...(typeof providerOptions.topLogprobs === 'number' ? { topLogprobs: providerOptions.topLogprobs } : {}),\n ...(typeof providerOptions.store === 'boolean' ? { store: providerOptions.store } : {}),\n ...(typeof providerOptions.previousResponseId === 'string' ? { previousResponseId: providerOptions.previousResponseId } : {}),\n ...(Array.isArray(providerOptions.include) ? { include: providerOptions.include } : {}),\n },\n },\n };\n }\n\n private getLanguageModel(modelId: string): LanguageModelV3 {\n return this.client.responses(resolveModelAlias(modelId));\n }\n\n private getImageModel(modelId: string): ImageModelV3 {\n return this.client.image(resolveModelAlias(modelId));\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImageModel(request.model)) {\n const imageRequest = this.extractImageRequest(request);\n return {\n body: imageRequest.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imageRequest.endpoint,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n const options = this.buildLanguageModelCallOptions(request);\n const model = this.getLanguageModel(request.model) as any;\n const sdkArgs = typeof model?.getArgs === 'function'\n ? await model.getArgs(options)\n : { args: undefined };\n return {\n body: sdkArgs.args || {\n model: resolveModelAlias(request.model),\n input: options.prompt,\n },\n messagesPath: 'input',\n metadata: {\n endpoint: `${this.getBaseUrl()}/responses`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n private extractImageRequest(request: ProviderRequest): {\n prompt: string;\n files?: any[];\n body: Record<string, unknown>;\n endpoint: string;\n n: number;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? extractTextFromContent(latestUser.content) : '';\n const files = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image' || part.type === 'image_url')\n .map((part: any) => contentPartToImageModelFile(part))\n : [];\n const n = typeof providerOptions.numberOfImages === 'number' ? providerOptions.numberOfImages : 1;\n const endpoint = `${this.getBaseUrl()}${files.length ? '/images/edits' : '/images/generations'}`;\n const body: Record<string, unknown> = {\n model: resolveModelAlias(request.model),\n prompt,\n n,\n response_format: 'b64_json',\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n };\n const imageUrls = files.map((file: any) => imageModelFileToXaiImageUrl(file));\n if (imageUrls.length === 1) {\n body.image = { url: imageUrls[0], type: 'image_url' };\n } else if (imageUrls.length > 1) {\n body.images = imageUrls.map((url: string) => ({ url, type: 'image_url' }));\n }\n\n return {\n prompt,\n files: files.length ? files : undefined,\n body,\n endpoint,\n n,\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImageModel(request.model)) {\n return this.generateImage(request);\n }\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doGenerate(this.buildLanguageModelCallOptions(request));\n const providerToolNames = providerToolNamesFromTools(request.tools);\n const text = result.content\n .filter((part: any) => part.type === 'text')\n .map((part: any) => part.text)\n .join('');\n const reasoningParts = result.content.filter((part: any) => part.type === 'reasoning');\n const reasoning = reasoningParts.map((part: any) => part.text).join('') || null;\n const usage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), result.usage);\n\n return {\n content: text || null,\n reasoning,\n reasoningDetails: reasoningParts.length\n ? reasoningParts.map((part: any) => ({\n type: 'text',\n text: part.text,\n format: 'xai-ai-sdk-v1',\n }))\n : undefined,\n toolCalls: extractToolCalls(result.content, providerToolNames),\n providerTools: extractProviderToolResults(result.content, providerToolNames),\n finishReason: mapFinishReason(result.finishReason),\n usage,\n metadata: {\n provider: 'xai',\n model: result.response?.modelId || resolveModelAlias(request.model),\n responseId: result.response?.id,\n warnings: result.warnings,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImage(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const imageModel = this.getImageModel(request.model);\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const extracted = this.extractImageRequest(request);\n\n const result = await imageModel.doGenerate({\n prompt: extracted.prompt,\n n: extracted.n,\n size: undefined,\n aspectRatio: typeof providerOptions.aspect_ratio === 'string'\n ? providerOptions.aspect_ratio as `${number}:${number}`\n : undefined,\n seed: undefined,\n providerOptions: {\n xai: {\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n },\n },\n abortSignal: request.signal,\n headers: undefined,\n files: extracted.files,\n mask: undefined,\n } as any);\n\n const images: ProviderGeneratedImage[] = result.images.map((image: any, index: number) => {\n const base64 = typeof image === 'string' ? image : bytesToBase64(image);\n const metadataImages = result.providerMetadata?.xai?.images;\n const revisedPrompt = Array.isArray(metadataImages)\n ? (metadataImages[index] as Record<string, unknown> | undefined)?.revisedPrompt\n : undefined;\n\n return {\n id: `image_${index}`,\n data: base64,\n mediaType: typeof providerOptions.output_format === 'string'\n ? `image/${providerOptions.output_format}`\n : 'image/png',\n revisedPrompt: typeof revisedPrompt === 'string' ? revisedPrompt : undefined,\n };\n });\n\n const cost = ticksToUsd(\n typeof result.providerMetadata?.xai?.costInUsdTicks === 'number'\n ? result.providerMetadata.xai.costInUsdTicks\n : undefined\n );\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: result.usage?.inputTokens ?? 0,\n completionTokens: result.usage?.outputTokens ?? 0,\n totalTokens: (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0),\n cost,\n provider: 'xai',\n },\n metadata: {\n provider: 'xai',\n model: result.response.modelId,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImageModel(request.model)) {\n throw new ProviderError('xAI image models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doStream(this.buildLanguageModelCallOptions(request));\n const providerToolNames = providerToolNamesFromTools(request.tools);\n\n return {\n async *[Symbol.asyncIterator]() {\n const reader = result.stream.getReader();\n const skippedProviderToolIds = new Map<string, string>();\n const loggedProviderToolIds = new Set<string>();\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'xai',\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = value as LanguageModelV3StreamPart;\n\n if (chunk.type === 'text-delta') {\n yield { type: 'content-delta', delta: chunk.delta };\n } else if (chunk.type === 'text-end') {\n yield { type: 'content-done' };\n } else if (chunk.type === 'reasoning-delta') {\n yield { type: 'reasoning-delta', delta: chunk.delta };\n } else if (chunk.type === 'reasoning-end') {\n yield { type: 'reasoning-done' };\n } else if (chunk.type === 'tool-input-start') {\n if (providerToolNames.has(chunk.toolName)) {\n skippedProviderToolIds.set(chunk.id, chunk.toolName);\n continue;\n }\n yield { type: 'tool-call-start', id: chunk.id, name: chunk.toolName };\n } else if (chunk.type === 'tool-input-delta') {\n if (skippedProviderToolIds.has(chunk.id)) continue;\n yield { type: 'tool-call-delta', id: chunk.id, argumentsDelta: chunk.delta };\n } else if (chunk.type === 'tool-call') {\n const skippedProviderToolName = skippedProviderToolIds.get(chunk.toolCallId);\n const providerExecutedToolName = providerToolNames.has(chunk.toolName)\n ? chunk.toolName\n : skippedProviderToolName;\n\n if (skippedProviderToolName || (chunk.providerExecuted === true && providerExecutedToolName)) {\n if (providerExecutedToolName) {\n skippedProviderToolIds.set(chunk.toolCallId, providerExecutedToolName);\n if (!loggedProviderToolIds.has(chunk.toolCallId)) {\n loggedProviderToolIds.add(chunk.toolCallId);\n yield {\n type: 'provider-tool-done',\n tool: providerToolResultFromCall(\n providerExecutedToolName,\n chunk.toolCallId,\n chunk.input\n ),\n };\n }\n }\n continue;\n }\n let parsed: Record<string, unknown> = {};\n try {\n parsed = typeof chunk.input === 'string' ? JSON.parse(chunk.input) : (chunk.input as Record<string, unknown>);\n } catch {\n parsed = {};\n }\n\n yield { type: 'tool-call-done', id: chunk.toolCallId, arguments: parsed };\n } else if (chunk.type === 'finish') {\n finishReason = mapFinishReason(chunk.finishReason);\n finalUsage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), chunk.usage);\n } else if (chunk.type === 'error') {\n yield { type: 'error', error: String(chunk.error) };\n }\n }\n\n yield { type: 'finish', finishReason, usage: finalUsage };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n } finally {\n reader.releaseLock();\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","import XAI_ICON from './xai.png';\n\nexport function getXAIIconDataUri(): string {\n return XAI_ICON;\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-code-fast-1': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },\n 'grok-3': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-mini': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n 'grok-3-mini-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n};\n\nexport function getXAITextPricing(modelId: string): XAITextPricing | undefined {\n return MODEL_PRICING[modelId];\n}\n\nexport function calculateXAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getXAITextPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / 1_000_000) * pricing.inputPerMillion;\n const cachedCost = pricing.cachedInputPerMillion\n ? (cachedTokens / 1_000_000) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / 1_000_000) * pricing.outputPerMillion;\n\n return Number((inputCost + cachedCost + outputCost).toFixed(12));\n}\n\nexport function ticksToUsd(ticks: number | undefined): number | undefined {\n if (typeof ticks !== 'number') return undefined;\n return Number((ticks / 1_000_000_000).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const xaiProviderOptions = z.object({\n reasoningEffort: z.enum(['low', 'medium', 'high']).optional(),\n logprobs: z.boolean().optional(),\n topLogprobs: z.number().int().min(0).max(8).optional(),\n store: z.boolean().optional(),\n previousResponseId: z.string().optional(),\n include: z.array(z.enum(['file_search_call.results', 'reasoning.encrypted_content'])).optional(),\n aspect_ratio: z.string().optional(),\n output_format: z.string().optional(),\n sync_mode: z.boolean().optional(),\n resolution: z.enum(['1k', '2k']).optional(),\n quality: z.enum(['low', 'medium', 'high']).optional(),\n user: z.string().optional(),\n numberOfImages: z.number().int().min(1).max(3).optional(),\n}).passthrough();\n\nexport type XAIProviderOptions = z.infer<typeof xaiProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { XAIProvider } from './XAIProvider';\nimport { xaiProviderOptions } from './providerOptions';\n\n/**\n * xAI provider factory for Standard Agents.\n *\n * Uses the official `@ai-sdk/xai` provider for chat and image models.\n */\nexport const xai: ProviderFactoryWithOptions<typeof xaiProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new XAIProvider(config),\n { providerOptions: xaiProviderOptions }\n);\n\nexport { xaiProviderOptions, type XAIProviderOptions } from './providerOptions';\nexport { XAIProvider } from './XAIProvider';\n"],"mappings":"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","names":["content","z"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standardagents/xai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "restricted",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"tsup": "^8.3.5",
|
|
33
33
|
"typescript": "^5.9.0",
|
|
34
|
-
"@standardagents/spec": "0.
|
|
34
|
+
"@standardagents/spec": "0.15.0"
|
|
35
35
|
},
|
|
36
36
|
"keywords": [
|
|
37
37
|
"standardagents",
|