@standardagents/xai 0.14.1 → 0.15.1

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 CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  xAI provider for Standard Agents.
4
4
 
5
- This package integrates xAI chat and image models through the Standard Agents provider interface. It uses the official `@ai-sdk/xai` integration under the hood and handles:
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 chat requests with image inputs
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 chat
63
- - images in chat input
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
- - `parallel_function_calling`
84
- - `searchParameters`
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
- reasoningEffort: 'high',
100
- searchParameters: {
101
- mode: 'auto',
102
- returnCitations: true,
103
- sources: [{ type: 'web', safeSearch: true }],
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 chat models, the provider translates Standard Agents image parts and image attachments into xAI 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.
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 tool choice translation is normalized to the shapes expected by the xAI SDK.
133
- - Non-image generic file parts are not supported in xAI chat requests; image parts are supported.
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
- parallel_function_calling: z.ZodOptional<z.ZodBoolean>;
12
- searchParameters: z.ZodOptional<z.ZodObject<{
13
- mode: z.ZodEnum<{
14
- off: "off";
15
- auto: "auto";
16
- on: "on";
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 normalizeChatReasoningEffort(value) {
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 "low";
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
- return tools.map((tool) => ({
534
- type: "function",
535
- name: tool.function.name,
536
- description: tool.function.description,
537
- inputSchema: tool.function.parameters || {
538
- type: "object",
539
- properties: {},
540
- required: []
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 extractToolCalls(content) {
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
- if (!toolCalls.length) return void 0;
556
- return toolCalls.map((part) => {
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 = [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => ({
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
- async getModelCapabilities(modelId) {
610
- const resolved = resolveModelAlias(modelId);
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" ? normalizeChatReasoningEffort(providerOptions.reasoningEffort) : normalizeChatReasoningEffort(
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 parallelFunctionCalling === "boolean" ? { parallel_function_calling: parallelFunctionCalling } : {},
640
- ...providerOptions.searchParameters ? { searchParameters: providerOptions.searchParameters } : {}
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.chat(resolveModelAlias(modelId));
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
- messages: options.prompt
919
+ input: options.prompt
670
920
  },
671
- messagesPath: "messages",
921
+ messagesPath: "input",
672
922
  metadata: {
673
- endpoint: `${this.config.baseUrl || "https://api.x.ai/v1"}/chat/completions`,
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.config.baseUrl || "https://api.x.ai/v1"}${files.length ? "/images/edits" : "/images/generations"}`;
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 = z.object({
885
- reasoningEffort: z.enum(["low", "high"]).optional(),
886
- logprobs: z.boolean().optional(),
887
- topLogprobs: z.number().int().min(0).max(8).optional(),
888
- parallel_function_calling: z.boolean().optional(),
889
- searchParameters: z.object({
890
- mode: z.enum(["off", "auto", "on"]),
891
- returnCitations: z.boolean().optional(),
892
- fromDate: z.string().optional(),
893
- toDate: z.string().optional(),
894
- maxSearchResults: z.number().int().optional(),
895
- sources: z.array(z.discriminatedUnion("type", [
896
- z.object({
897
- type: z.literal("web"),
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,9 +1,9 @@
1
1
  {
2
2
  "name": "@standardagents/xai",
3
- "version": "0.14.1",
3
+ "version": "0.15.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
- "access": "restricted",
6
+ "access": "public",
7
7
  "registry": "https://registry.npmjs.org/"
8
8
  },
9
9
  "type": "module",
@@ -26,12 +26,12 @@
26
26
  "zod": "^4.3.5"
27
27
  },
28
28
  "peerDependencies": {
29
- "@standardagents/spec": "^0.10.0"
29
+ "@standardagents/spec": "^0.15.1"
30
30
  },
31
31
  "devDependencies": {
32
32
  "tsup": "^8.3.5",
33
33
  "typescript": "^5.9.0",
34
- "@standardagents/spec": "0.14.1"
34
+ "@standardagents/spec": "0.15.1"
35
35
  },
36
36
  "keywords": [
37
37
  "standardagents",