@standardagents/xai 0.21.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,6 +45,7 @@ The package exports:
45
45
  - `xai(config)` - provider factory
46
46
  - `XAIProvider` - provider class
47
47
  - `xaiProviderOptions` - Zod schema for provider-specific options
48
+ - pricing helpers from `@standardagents/xai/pricing`
48
49
 
49
50
  Factory config:
50
51
 
@@ -129,7 +130,17 @@ For language models, the provider translates Standard Agents image parts and ima
129
130
 
130
131
  ## Cost Data
131
132
 
132
- When xAI returns `cost_in_usd_ticks`, this package converts it to USD and attaches the monetary value to `usage.cost`. That means xAI responses can log actual API-reported cost instead of relying only on token-price fallback tables.
133
+ For xAI image generation, the package converts API-reported
134
+ `cost_in_usd_ticks` to USD and attaches the monetary value to `usage.cost`.
135
+ xAI defines 10,000,000,000 ticks as 1 USD.
136
+
137
+ The underlying `@ai-sdk/xai` language integration does not currently surface
138
+ `cost_in_usd_ticks` for Responses language calls, so language usage falls back
139
+ to the static token pricing helpers below.
140
+
141
+ Known xAI fallback pricing helpers are also exported from the package root and
142
+ the pure `@standardagents/xai/pricing` subpath. Unknown provider prices are not
143
+ guessed.
133
144
 
134
145
  ## Debugging
135
146
 
@@ -0,0 +1,13 @@
1
+ // src/pricing.ts
2
+ import {
3
+ calculateXAIUsageCost,
4
+ getXAITextPricing,
5
+ ticksToUsd
6
+ } from "@standardagents/provider-pricing";
7
+
8
+ export {
9
+ calculateXAIUsageCost,
10
+ getXAITextPricing,
11
+ ticksToUsd
12
+ };
13
+ //# sourceMappingURL=chunk-YUJ5XJGA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pricing.ts"],"sourcesContent":["export {\n calculateXAIUsageCost,\n getXAITextPricing,\n ticksToUsd,\n type XAITextPricing,\n} from '@standardagents/provider-pricing';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
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
+ export { XAITextPricing, calculateXAIUsageCost, getXAITextPricing, ticksToUsd } from '@standardagents/provider-pricing';
3
4
 
4
5
  declare const xaiProviderOptions: z.ZodObject<{
5
6
  reasoningEffort: z.ZodOptional<z.ZodEnum<{
package/dist/index.js CHANGED
@@ -1,3 +1,9 @@
1
+ import {
2
+ calculateXAIUsageCost,
3
+ getXAITextPricing,
4
+ ticksToUsd
5
+ } from "./chunk-YUJ5XJGA.js";
6
+
1
7
  // src/XAIProvider.ts
2
8
  import { createXai } from "@ai-sdk/xai";
3
9
  import { defineTool, ProviderError, mapReasoningLevel } from "@standardagents/spec";
@@ -11,42 +17,6 @@ function getXAIIconDataUri() {
11
17
  return xai_default;
12
18
  }
13
19
 
14
- // src/pricing.ts
15
- var MODEL_PRICING = {
16
- "grok-4-0709": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
17
- "grok-4": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
18
- "grok-4-latest": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
19
- "grok-4-fast-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
20
- "grok-4-fast-non-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
21
- "grok-4-1-fast-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
22
- "grok-4-1-fast-non-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
23
- "grok-4.20-0309-reasoning": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
24
- "grok-4.20-0309-non-reasoning": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
25
- "grok-4.20-multi-agent-0309": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
26
- "grok-code-fast-1": { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },
27
- "grok-3": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
28
- "grok-3-latest": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
29
- "grok-3-mini": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },
30
- "grok-3-mini-latest": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 }
31
- };
32
- function getXAITextPricing(modelId) {
33
- return MODEL_PRICING[modelId];
34
- }
35
- function calculateXAIUsageCost(modelId, usage) {
36
- const pricing = getXAITextPricing(modelId);
37
- if (!pricing) return void 0;
38
- const cachedTokens = usage.cachedTokens ?? 0;
39
- const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);
40
- const inputCost = uncachedPromptTokens / 1e6 * pricing.inputPerMillion;
41
- const cachedCost = pricing.cachedInputPerMillion ? cachedTokens / 1e6 * pricing.cachedInputPerMillion : 0;
42
- const outputCost = usage.completionTokens / 1e6 * pricing.outputPerMillion;
43
- return Number((inputCost + cachedCost + outputCost).toFixed(12));
44
- }
45
- function ticksToUsd(ticks) {
46
- if (typeof ticks !== "number") return void 0;
47
- return Number((ticks / 1e9).toFixed(12));
48
- }
49
-
50
20
  // src/XAIProvider.ts
51
21
  var XAI_PROVIDER_TOOL_RESULT = {
52
22
  status: "success",
@@ -1183,6 +1153,9 @@ var xai = Object.assign(
1183
1153
  );
1184
1154
  export {
1185
1155
  XAIProvider,
1156
+ calculateXAIUsageCost,
1157
+ getXAITextPricing,
1158
+ ticksToUsd,
1186
1159
  xai,
1187
1160
  xaiProviderOptions
1188
1161
  };
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 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"]}
1
+ {"version":3,"sources":["../src/XAIProvider.ts","../src/icons.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 { 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';\nexport {\n calculateXAIUsageCost,\n getXAITextPricing,\n ticksToUsd,\n type XAITextPricing,\n} from './pricing';\n"],"mappings":"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","names":["content","z"]}
@@ -0,0 +1 @@
1
+ export { XAITextPricing, calculateXAIUsageCost, getXAITextPricing, ticksToUsd } from '@standardagents/provider-pricing';
@@ -0,0 +1,11 @@
1
+ import {
2
+ calculateXAIUsageCost,
3
+ getXAITextPricing,
4
+ ticksToUsd
5
+ } from "./chunk-YUJ5XJGA.js";
6
+ export {
7
+ calculateXAIUsageCost,
8
+ getXAITextPricing,
9
+ ticksToUsd
10
+ };
11
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@standardagents/xai",
3
- "version": "0.21.1",
3
+ "version": "0.22.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -14,6 +14,10 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
+ },
18
+ "./pricing": {
19
+ "types": "./dist/pricing.d.ts",
20
+ "import": "./dist/pricing.js"
17
21
  }
18
22
  },
19
23
  "files": [
@@ -23,15 +27,16 @@
23
27
  "dependencies": {
24
28
  "@ai-sdk/xai": "^3.0.75",
25
29
  "ai": "^6.0.142",
26
- "zod": "^4.3.5"
30
+ "zod": "^4.3.5",
31
+ "@standardagents/provider-pricing": "0.22.0"
27
32
  },
28
33
  "peerDependencies": {
29
- "@standardagents/spec": "^0.21.1"
34
+ "@standardagents/spec": "^0.22.0"
30
35
  },
31
36
  "devDependencies": {
32
37
  "tsup": "^8.3.5",
33
38
  "typescript": "^5.9.0",
34
- "@standardagents/spec": "0.21.1"
39
+ "@standardagents/spec": "0.22.0"
35
40
  },
36
41
  "keywords": [
37
42
  "standardagents",