@standardagents/xai 0.0.1-dev.ffffff

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 ADDED
@@ -0,0 +1,7 @@
1
+ # @standardagents/xai
2
+
3
+ Stub prerelease package for Standard Agents xAI provider publishing setup.
4
+
5
+ Current bootstrap version: `0.0.1-dev.ffffff`
6
+
7
+ This package will be wired into the normal monorepo release flow after trusted publishing is configured.
@@ -0,0 +1,90 @@
1
+ import { LLMProviderInterface, ProviderFactoryConfig, ProviderModelInfo, ModelCapabilities, ProviderRequest, InspectedRequest, ProviderResponse, ProviderStreamChunk, ProviderFactoryWithOptions } from '@standardagents/spec';
2
+ import { z } from 'zod';
3
+
4
+ declare const xaiProviderOptions: z.ZodObject<{
5
+ reasoningEffort: z.ZodOptional<z.ZodEnum<{
6
+ low: "low";
7
+ high: "high";
8
+ }>>;
9
+ logprobs: z.ZodOptional<z.ZodBoolean>;
10
+ topLogprobs: z.ZodOptional<z.ZodNumber>;
11
+ parallel_function_calling: z.ZodOptional<z.ZodBoolean>;
12
+ searchParameters: z.ZodOptional<z.ZodObject<{
13
+ mode: z.ZodEnum<{
14
+ off: "off";
15
+ auto: "auto";
16
+ on: "on";
17
+ }>;
18
+ returnCitations: z.ZodOptional<z.ZodBoolean>;
19
+ fromDate: z.ZodOptional<z.ZodString>;
20
+ toDate: z.ZodOptional<z.ZodString>;
21
+ maxSearchResults: z.ZodOptional<z.ZodNumber>;
22
+ sources: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
23
+ type: z.ZodLiteral<"web">;
24
+ country: z.ZodOptional<z.ZodString>;
25
+ excludedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ allowedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ safeSearch: z.ZodOptional<z.ZodBoolean>;
28
+ }, z.core.$strip>, z.ZodObject<{
29
+ type: z.ZodLiteral<"x">;
30
+ excludedXHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
+ includedXHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
32
+ xHandles: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
+ postFavoriteCount: z.ZodOptional<z.ZodNumber>;
34
+ postViewCount: z.ZodOptional<z.ZodNumber>;
35
+ }, z.core.$strip>, z.ZodObject<{
36
+ type: z.ZodLiteral<"news">;
37
+ country: z.ZodOptional<z.ZodString>;
38
+ excludedWebsites: z.ZodOptional<z.ZodArray<z.ZodString>>;
39
+ safeSearch: z.ZodOptional<z.ZodBoolean>;
40
+ }, z.core.$strip>, z.ZodObject<{
41
+ type: z.ZodLiteral<"rss">;
42
+ links: z.ZodArray<z.ZodString>;
43
+ }, z.core.$strip>], "type">>>;
44
+ }, z.core.$strip>>;
45
+ aspect_ratio: z.ZodOptional<z.ZodString>;
46
+ output_format: z.ZodOptional<z.ZodString>;
47
+ sync_mode: z.ZodOptional<z.ZodBoolean>;
48
+ resolution: z.ZodOptional<z.ZodEnum<{
49
+ "1k": "1k";
50
+ "2k": "2k";
51
+ }>>;
52
+ quality: z.ZodOptional<z.ZodEnum<{
53
+ low: "low";
54
+ high: "high";
55
+ medium: "medium";
56
+ }>>;
57
+ user: z.ZodOptional<z.ZodString>;
58
+ numberOfImages: z.ZodOptional<z.ZodNumber>;
59
+ }, z.core.$loose>;
60
+ type XAIProviderOptions = z.infer<typeof xaiProviderOptions>;
61
+
62
+ declare class XAIProvider implements LLMProviderInterface {
63
+ readonly name = "xai";
64
+ readonly specificationVersion: "1";
65
+ private readonly config;
66
+ private readonly client;
67
+ constructor(config: ProviderFactoryConfig);
68
+ supportsModel(_modelId: string): boolean;
69
+ getIcon(_modelId?: string): string;
70
+ getModels(filter?: string): Promise<ProviderModelInfo[]>;
71
+ getModelCapabilities(modelId: string): Promise<ModelCapabilities | null>;
72
+ private buildLanguageModelCallOptions;
73
+ private getLanguageModel;
74
+ private getImageModel;
75
+ inspectRequest(request: ProviderRequest): Promise<InspectedRequest>;
76
+ private extractImageRequest;
77
+ generate(request: ProviderRequest): Promise<ProviderResponse>;
78
+ private generateImage;
79
+ stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>>;
80
+ private toProviderError;
81
+ }
82
+
83
+ /**
84
+ * xAI provider factory for Standard Agents.
85
+ *
86
+ * Uses the official `@ai-sdk/xai` provider for chat and image models.
87
+ */
88
+ declare const xai: ProviderFactoryWithOptions<typeof xaiProviderOptions>;
89
+
90
+ export { XAIProvider, type XAIProviderOptions, xai, xaiProviderOptions };
package/dist/index.js ADDED
@@ -0,0 +1,942 @@
1
+ // src/XAIProvider.ts
2
+ import { createXai } from "@ai-sdk/xai";
3
+ import { ProviderError, mapReasoningLevel } from "@standardagents/spec";
4
+
5
+ // src/xai.png
6
+ var xai_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAN4AAADhCAYAAACnSwvPAAAAAXNSR0IArs4c6QAAAGJlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJKGAAcAAAASAAAAUKABAAMAAAABAAEAAKACAAQAAAABAAAA3qADAAQAAAABAAAA4QAAAABBU0NJSQAAAFNjcmVlbnNob3Q9zwxOAAAB1mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yMjU8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjIyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cm0NfmQAAA75SURBVHgB7Z1bktS6EkWbC/Pig3nxwbz4YF5EnHsSjrrctvWwLWkrpeWIDpdfUmqlduW2qwo+ff78+Z83FghAoCuB/3Xtjc4gAIE/BBAeEwECAgIITwCdLiGA8JgDEBAQQHgC6HQJAYTHHICAgADCE0CnSwggPOYABAQEEJ4AOl1CAOExByAgIIDwBNDpEgIIjzkAAQEBhCeATpcQQHjMAQh0J/Dp7Uv3PukQAssS+PQ+cireOwpeQKAfAYTXjzU9LU3gVe0MA8JbejIw+D4EPorO+kR4fcjTCwQ+EEB4H3CwAYHaBI7VznpAeLU50x4ECgggvAJInAKB2gQQXm2itAeBAgIIrwASp0CgNgGEV5so7UGggADCK4DEKRCoTQDh1SZKexAoIIDwCiBxCgRqE0B4tYnSHgQKCCC8AkicAoHaBBBebaK0B4ECAgivABKnQKA2AYRXmyjtQaCAAMIrgMQpEKhNAOHVJrpge9+/f3/7/ft39z/r1+vyif8D3WvqxojbJr9KAF++ePi3uvg93hgzdbIoVKL78eOHa5JYTdfp0wb/8+dPSQAmOoQnQU+nagJW6b5+/do9jF+/frkXnUHjHq/71PHfoQlOVe2+ffv2ZuLzs3CP5ydXg0eqvK/zJbp4IrnHi7PhyAkBLOYJlBu7EN4NaKteYqJTVruZuHOPN1M2G4/FPiRXLL6fYnKPp5gz0/SprHTePzo4mwRYzTMq7PtAYFSLqXoz+ADn5gZW8ya4lS4b1WJaXON/bQyruZJWqo1VVVVy93WquGqBpeLVIjlhO0qLmapk27hS542RkvOKh/DGyM6QUYxsMQMwr8Lj4UrIIOsPBFRWbnaLGSBT8QIJ1u8EtlbufWenF6kKdhZX6vxOIRd0c7SbCK8A22qnjGgxY1/M9io8rOZqqsqMF4uZAXTr8D+Hq6h4ByTr7jizcr1opCpXKq7Udb1iL+/nZTmpeOXUpj7TrJyy2sXgKuOKxVRjPxWvBsUJ2rAfttok773knmLm7jd9VTyj+7fqefhnmnrPheX6s0qnEF3un3FQVeC2E+Dv/R4Vry3l4Vs3wY34zzik7uu2UP1VvL/RI7xtFhd87dVihlR5FR4PV0IGF1yrLGbuvm5Oi/lxglHxPvJYZqvUyrUAkqpSV+NKtdUi9lptIrxaJJ21k3ta2Go4uWp3NS6vwsNqtpphA7ersnI50aniUqSKiqegLuzzqpWrGWqqOt2NK9Vmzdhrt4XwahMdvL2rVq7WcHLV7m5cXoWH1aw1sxy0o7JyOdGp4lKmjIqnpN+x77tWrkaIqar0NK5U2zVib9UGwmtFdrB271q5p8PIVbuncXkVHlbz6cxycL3KyuVEp/qq2ggpo+KNkIWGMTy1ck9CS1WjWnGl+ngSe+trEV5rwuL2n1q5u+Gnql3NL2Z7FR5W8+7McnDdqBZTFddIKUN4I2WjYiy1rNzVkEp+Y6f47d/VcbQ+H6vZmrCg/ZpW7mr4qf8qucWbgVerifCuziwH53v/jd0VxF6Fh9W8kmUH51pVUVi5EovpAF+3EBFeN9TtO2ph5UqjtqeYsUUZVywm9X6spjoDFfsf8aMDG17LuLCaFScQTV0nYFVFsaQ+r7N4VHEpWFzpk4p3hdag5yqtXKri9Igr1f+g6foTFsIbOTuFsbW0cqkQctWuR1xehcfDldTMcnBMZeVyonOAThoiFU+K/1nnPaxcLMKSSkPFi9F7e6PixdkMf0RZ7YaHM3iACG/wBMXCU4ou9ZldLF72fySA1fzIw8XW6BYzQMRqBhLHNRXvyGT4PcpqNzwcJwEO/9902fcOFd89tPyNaKmUohuRhxOdHcIc3mqO+hOXA8kOO7xYzIACqxlIHNfDW83ct96PQ6q3R1VdzkZgb0CqeKh0Zxl5tm944dnwLPEmwN6LcrLvx6oUHcLbZ+P59vBWMwxxZcupspj2Zme/KL+7YDXj5FxUPAt/VcuprLpUurhwnh5xIzwb6IqWU2kxFfb+6YT2cr0bqxmArmQ5vVrMkCusZiBxXLuqeBb+KpZTJTpj/OS+zq5nyRNwV/HCkFT/ktbTBw4h/ty6R7U4i8HsfK17ux5jKPmVxNk41fvcVbwATPWubFbX/louyvu6WqJryWeGtt1WPIOvvN9r9U6rtJi1x0TFi79FuK14NiTl/V6r/2JKWe3i04QjtQm4Fp7BmOkjBqXosJi1pZVuz7XVDENTWs7U/xUQ4itZz2Qxw3ixmoHEce2+4tmQlJazVpWq1c4xxek9VLo0n1ZHpxCewfFsOZWiQ3itpJVudwqrGYbo0XLOaDFDPrCagcRxPU3Fs6F5tJzKanecDuzpRWAq4Rk0T5ZTKTosZi+JnfczldUMQ/RgOWe2mCEPWM1A4rieruLZEEe3nPbGoKp2qq/aHafe2numFJ6ldGTLacJTLComirGO3ueUVjNAH9VyKuIyF9C72mE1w0w8rqeteDbUUS2nIi4ephwnv3LP1MIzsCp7lbuP6xlXz76Uk9lT31NbzW0ietiebX/hdeq7nD0sp4nO/hRLD+a1f8rUi9MywusxyWNJS02O1h8rpPqOxVtrP8KLk5zeaoah232V/SmW1G/3WtpAVaVTMPbW5zIVLySmx7tw6Gu77m05lRYzjLsHa2VFD+O8s15OeKtYzhEmJMKLS3IZqxkQKB7lh757WU4sZiA+7nq5ihdSofrnAXMW8GmVyLUfxt9j/XQsJTGOUNlL4tyfs6zwlJaz5f3eSBMR4e3l9tpezmqGoSstZ+oL0k/iwmKG7I6/XrbihdSMajmvxjWSxQxsqXiBxHG9vPBmsZwjWcwwzRBeIHFcL2s1A4on1i60cXddy3JiMe9mQHfd8hUvoL9q7cJ1T9c5i5iLK3f90/ieXE/Fi9NDeP+x8Wg5rVr3/o1dfCodjyC8I5OwZ3mrGUB4tJxYzJA9f2uEt8mZTWQTYO/Fqm3qfu8srrN9veOmv/sEsJo7dh4s5+gWMyDFagYSxzUVb8fEg+XEYu6S5nCTihdJWu5pYuSyx7tNVClhWUVW2OE7A6PixakhvDibtx4T56z71Hc5z84fdV8PfiN+caAkH1jNBCXVo3qrtixzE0B4ifyapVPZOsSXSMwEhxBeJokq22f3cvbHMicBhFeQ19TDjoLLb5+iesBzO2AuLCaA8ApQjfoRQ0HonDIoAYRXmBireor7PbObqW+1FIbPaYMR4OOECwkxEageeqjuNS/gOZzKxwkHJO87qHjvKPIvsJx5RpxRRgDhlXF6PwvL+Y6CFw8IYDVvwMNylkHDasY5UfFO2OSEheU8gcauSwQQ3gkue4qYe5qI5TwBx65iAljNHSoT3fbxfeppYq4y7pquupmKq2pHDxrDasbhIbwNm5iQUt+A3wt101zTl2Z3TXwjLwgvnh2s5obNttJtdic/u8NybknxupQAwvuPlInOKt7ZYvtjx+x8E59iScWsiIc+ywlgNf9lVWoXU5YzZlPLU3HvzJEtJ1YznlOE9y+b0gmSm+SqXxPk4oqnv+2RUq5Poki9GT5pt/W1y1vN2H3dGXiraqnzVQ87clb4bCzs0xJYuuKVWsx9ilKP8lWW02Ic7d2firefOa/tpSteqnq9EB1fpa4z26d62KL65cSREHtyBJYVXko8OWg5y8lHDDmCHF/Sat61mPvpMqrlTMW1H0PLbaxmnO6Swqs1IXJPE2sJPJ6+8yO5uM6vqr+3FudUZKPd16Zi3R5bzmo+sZhbcPYay7knwnYpgaUqXqsKlLJ2yqecqbhKJ8iT86h4cXpLCa/VRMhZu1aCj6f175FcXLnrnx5vxXsbF1ZzS2PA1zUt5n54WM49EbZzBJaoeL0qTsrarWg5qXhx+U3/cCVXjeJorh9JVVWzfaoP1lNxXR8lV9QgML3wek66nMj5YL3GlJ2jjamtZi+LuZ8KWM6/RLCa+5nx2p624uWqzwtB31dYzr68R+1tWuGpvjBcYidLzmkxYUZ9M2ox1tHbnFJ4Pe/rtgk2QdlfyWJ2VLEYGxMgi5bAdPd4qvs6S+PVD3NNAKrKfDXWO9OUe7w4tekqnrLaxTGfH7H7PftTLCrBK8Y6Yp9TCU8pulKLuZ8EKstp1RbLuc9Gv+1prKYni7lP76yWE6u5z/Rre5qKp6x2L5z3Xik/YsBy3svZ06umEJ5SdHct5j5x1o7ifs+qrYrfnsFK2+6tpmeLuZ9oSsuZ+rbNPs7SbaxmnJT7iqd6t65V6bapUVpOFcft+Fd67Vp4qsliomshPJt4WM415OfWas5kMfdTbRbLidXcZ/a17bbiKavdC1+bV1jONlxHatWl8FSPwFtazP2kwHLuicy17c5qqiymVaHe3zLxbjmxmvE3C1cVT/mZU6uHKfHUvP35XE/Rr8WksvIpHjMdcyU81WRQ2T6baKq+lW9yMwksNhY3VnMli7lPllfLidXcZ/K17aLiqURnmFRW75UiLOeWxZivP/0b1rU/FxWvxzvnWUJNdCMIL8RmT3Ot+vVe7j5Y6pG3Hj/ojfM2sd1bhq94yvu6kURn6e39VDVMKRO7QvCh//HWobrdj8xFxbs/PK6EQG0C96vcNpLhK942WF5DQEugjuhsDAhPm0l6d0OgnuhsyAjPTeIJdCYCCG+mbDKWRgTqVjsLEuE1ShXNQiBFAOGl6HAMAn8+GK+PAeHVZ0qL0xCobzEDGoQXSLCGQEcCCK8jbLryRKBdtTMKCM/TXCDWTgTais4GgfA6pZJuvBBoLzoj8cULDuKEQFsCfQQXxoDwAgnWixLoK7gAGasZSLBekIBGdAaairfgdGPIOsEF9lS8QIL1IgT0ojPQCG+R6cYwjcAYorNIEJ5RYFmAwDiiM9gIb4EpxxDHI4DwxssJEVUnMFa1s+EhvOpJpkEI5AkgvDwjznBNYLxqZzgRnutJRfBpAmOKzmJGeOnMcRQCTQggvCZYaVRPYNxqZ2wQnn6GEEF1AmOLzoaL8KonnQa1BMYXnfHhS9LaWULv1Qj4EFwYLsILJFg7JeBLcAEyVjOQYO2QgE/RGWgqnsPpRsh+BRdyR8ULJFg7IeBfdAYa4TmZboRpBOYQnY0E4RkFFgcE5hGdwUZ4DqYcIc5H4P8aByycMFeQWwAAAABJRU5ErkJggg==";
7
+
8
+ // src/icons.ts
9
+ function getXAIIconDataUri() {
10
+ return xai_default;
11
+ }
12
+
13
+ // src/pricing.ts
14
+ var MODEL_PRICING = {
15
+ "grok-4-0709": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
16
+ "grok-4": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
17
+ "grok-4-latest": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
18
+ "grok-4-fast-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
19
+ "grok-4-fast-non-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
20
+ "grok-4-1-fast-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
21
+ "grok-4-1-fast-non-reasoning": { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },
22
+ "grok-4.20-0309-reasoning": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
23
+ "grok-4.20-0309-non-reasoning": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
24
+ "grok-4.20-multi-agent-0309": { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },
25
+ "grok-code-fast-1": { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },
26
+ "grok-3": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
27
+ "grok-3-latest": { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },
28
+ "grok-3-mini": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },
29
+ "grok-3-mini-latest": { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 }
30
+ };
31
+ function getXAITextPricing(modelId) {
32
+ return MODEL_PRICING[modelId];
33
+ }
34
+ function calculateXAIUsageCost(modelId, usage) {
35
+ const pricing = getXAITextPricing(modelId);
36
+ if (!pricing) return void 0;
37
+ const cachedTokens = usage.cachedTokens ?? 0;
38
+ const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);
39
+ const inputCost = uncachedPromptTokens / 1e6 * pricing.inputPerMillion;
40
+ const cachedCost = pricing.cachedInputPerMillion ? cachedTokens / 1e6 * pricing.cachedInputPerMillion : 0;
41
+ const outputCost = usage.completionTokens / 1e6 * pricing.outputPerMillion;
42
+ return Number((inputCost + cachedCost + outputCost).toFixed(12));
43
+ }
44
+ function ticksToUsd(ticks) {
45
+ if (typeof ticks !== "number") return void 0;
46
+ return Number((ticks / 1e9).toFixed(12));
47
+ }
48
+
49
+ // src/XAIProvider.ts
50
+ var MODEL_ALIASES = {
51
+ "grok-4": "grok-4-0709",
52
+ "grok-4-latest": "grok-4-0709"
53
+ };
54
+ var TEXT_MODELS = [
55
+ {
56
+ id: "grok-4-0709",
57
+ name: "Grok 4 0709",
58
+ description: "Flagship Grok reasoning model.",
59
+ contextLength: 256e3,
60
+ capabilities: {
61
+ supportsImages: true,
62
+ supportsToolCalls: true,
63
+ supportsStreaming: true,
64
+ supportsJsonMode: true,
65
+ maxContextTokens: 256e3,
66
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
67
+ }
68
+ },
69
+ {
70
+ id: "grok-4",
71
+ name: "Grok 4",
72
+ description: "Alias of the current Grok 4 production model.",
73
+ contextLength: 256e3,
74
+ capabilities: {
75
+ supportsImages: true,
76
+ supportsToolCalls: true,
77
+ supportsStreaming: true,
78
+ supportsJsonMode: true,
79
+ maxContextTokens: 256e3,
80
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
81
+ }
82
+ },
83
+ {
84
+ id: "grok-4-latest",
85
+ name: "Grok 4 Latest",
86
+ description: "Moving alias for the latest Grok 4 snapshot.",
87
+ contextLength: 256e3,
88
+ capabilities: {
89
+ supportsImages: true,
90
+ supportsToolCalls: true,
91
+ supportsStreaming: true,
92
+ supportsJsonMode: true,
93
+ maxContextTokens: 256e3,
94
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
95
+ }
96
+ },
97
+ {
98
+ id: "grok-4-fast-reasoning",
99
+ name: "Grok 4 Fast Reasoning",
100
+ description: "Low-cost long-context reasoning model.",
101
+ contextLength: 2e6,
102
+ capabilities: {
103
+ supportsImages: true,
104
+ supportsToolCalls: true,
105
+ supportsStreaming: true,
106
+ supportsJsonMode: true,
107
+ maxContextTokens: 2e6,
108
+ reasoningLevels: { 0: null, 100: "high" }
109
+ }
110
+ },
111
+ {
112
+ id: "grok-4-fast-non-reasoning",
113
+ name: "Grok 4 Fast Non-Reasoning",
114
+ description: "Low-cost long-context non-reasoning model.",
115
+ contextLength: 2e6,
116
+ capabilities: {
117
+ supportsImages: true,
118
+ supportsToolCalls: true,
119
+ supportsStreaming: true,
120
+ supportsJsonMode: true,
121
+ maxContextTokens: 2e6
122
+ }
123
+ },
124
+ {
125
+ id: "grok-4-1-fast-reasoning",
126
+ name: "Grok 4.1 Fast Reasoning",
127
+ description: "Updated fast reasoning Grok model with 2M-token context.",
128
+ contextLength: 2e6,
129
+ capabilities: {
130
+ supportsImages: true,
131
+ supportsToolCalls: true,
132
+ supportsStreaming: true,
133
+ supportsJsonMode: true,
134
+ maxContextTokens: 2e6,
135
+ reasoningLevels: { 0: null, 100: "high" }
136
+ }
137
+ },
138
+ {
139
+ id: "grok-4-1-fast-non-reasoning",
140
+ name: "Grok 4.1 Fast Non-Reasoning",
141
+ description: "Updated fast non-reasoning Grok model with 2M-token context.",
142
+ contextLength: 2e6,
143
+ capabilities: {
144
+ supportsImages: true,
145
+ supportsToolCalls: true,
146
+ supportsStreaming: true,
147
+ supportsJsonMode: true,
148
+ maxContextTokens: 2e6
149
+ }
150
+ },
151
+ {
152
+ id: "grok-4.20-0309-reasoning",
153
+ name: "Grok 4.20 0309 Reasoning",
154
+ description: "Long-context reasoning Grok 4.20 snapshot.",
155
+ contextLength: 2e6,
156
+ capabilities: {
157
+ supportsImages: true,
158
+ supportsToolCalls: true,
159
+ supportsStreaming: true,
160
+ supportsJsonMode: true,
161
+ maxContextTokens: 2e6,
162
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
163
+ }
164
+ },
165
+ {
166
+ id: "grok-4.20-0309-non-reasoning",
167
+ name: "Grok 4.20 0309 Non-Reasoning",
168
+ description: "Long-context non-reasoning Grok 4.20 snapshot.",
169
+ contextLength: 2e6,
170
+ capabilities: {
171
+ supportsImages: true,
172
+ supportsToolCalls: true,
173
+ supportsStreaming: true,
174
+ supportsJsonMode: true,
175
+ maxContextTokens: 2e6
176
+ }
177
+ },
178
+ {
179
+ id: "grok-4.20-multi-agent-0309",
180
+ name: "Grok 4.20 Multi-Agent 0309",
181
+ description: "Grok multi-agent model for orchestration-heavy workloads.",
182
+ contextLength: 2e6,
183
+ capabilities: {
184
+ supportsImages: true,
185
+ supportsToolCalls: true,
186
+ supportsStreaming: true,
187
+ supportsJsonMode: true,
188
+ maxContextTokens: 2e6,
189
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
190
+ }
191
+ },
192
+ {
193
+ id: "grok-code-fast-1",
194
+ name: "Grok Code Fast 1",
195
+ description: "Fast coding-oriented Grok model.",
196
+ contextLength: 256e3,
197
+ capabilities: {
198
+ supportsImages: false,
199
+ supportsToolCalls: true,
200
+ supportsStreaming: true,
201
+ supportsJsonMode: true,
202
+ maxContextTokens: 256e3
203
+ }
204
+ },
205
+ {
206
+ id: "grok-3",
207
+ name: "Grok 3",
208
+ description: "General-purpose Grok 3 model.",
209
+ contextLength: 131072,
210
+ capabilities: {
211
+ supportsImages: true,
212
+ supportsToolCalls: true,
213
+ supportsStreaming: true,
214
+ supportsJsonMode: true,
215
+ maxContextTokens: 131072,
216
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
217
+ }
218
+ },
219
+ {
220
+ id: "grok-3-latest",
221
+ name: "Grok 3 Latest",
222
+ description: "Moving alias for the current Grok 3 model.",
223
+ contextLength: 131072,
224
+ capabilities: {
225
+ supportsImages: true,
226
+ supportsToolCalls: true,
227
+ supportsStreaming: true,
228
+ supportsJsonMode: true,
229
+ maxContextTokens: 131072,
230
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
231
+ }
232
+ },
233
+ {
234
+ id: "grok-3-mini",
235
+ name: "Grok 3 Mini",
236
+ description: "Lower-cost Grok 3 variant.",
237
+ contextLength: 131072,
238
+ capabilities: {
239
+ supportsImages: false,
240
+ supportsToolCalls: true,
241
+ supportsStreaming: true,
242
+ supportsJsonMode: true,
243
+ maxContextTokens: 131072,
244
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
245
+ }
246
+ },
247
+ {
248
+ id: "grok-3-mini-latest",
249
+ name: "Grok 3 Mini Latest",
250
+ description: "Moving alias for the current Grok 3 Mini model.",
251
+ contextLength: 131072,
252
+ capabilities: {
253
+ supportsImages: false,
254
+ supportsToolCalls: true,
255
+ supportsStreaming: true,
256
+ supportsJsonMode: true,
257
+ maxContextTokens: 131072,
258
+ reasoningLevels: { 0: null, 50: "low", 100: "high" }
259
+ }
260
+ }
261
+ ];
262
+ var IMAGE_MODELS = [
263
+ {
264
+ id: "grok-imagine-image",
265
+ name: "Grok Imagine Image",
266
+ description: "xAI image generation and edit model.",
267
+ capabilities: {
268
+ supportsImages: true,
269
+ supportsStreaming: false,
270
+ supportsToolCalls: false,
271
+ supportsJsonMode: false,
272
+ maxContextTokens: 0
273
+ }
274
+ },
275
+ {
276
+ id: "grok-imagine-image-pro",
277
+ name: "Grok Imagine Image Pro",
278
+ description: "Higher-quality xAI image generation and edit model.",
279
+ capabilities: {
280
+ supportsImages: true,
281
+ supportsStreaming: false,
282
+ supportsToolCalls: false,
283
+ supportsJsonMode: false,
284
+ maxContextTokens: 0
285
+ }
286
+ }
287
+ ];
288
+ function resolveModelAlias(modelId) {
289
+ return MODEL_ALIASES[modelId] || modelId;
290
+ }
291
+ function isImageModel(modelId) {
292
+ return resolveModelAlias(modelId).startsWith("grok-imagine-image");
293
+ }
294
+ function mapFinishReason(reason) {
295
+ switch (reason.unified) {
296
+ case "length":
297
+ return "length";
298
+ case "tool-calls":
299
+ return "tool_calls";
300
+ case "content-filter":
301
+ return "content_filter";
302
+ case "error":
303
+ return "error";
304
+ case "stop":
305
+ default:
306
+ return "stop";
307
+ }
308
+ }
309
+ function bytesToBase64(bytes) {
310
+ let binary = "";
311
+ for (let index = 0; index < bytes.length; index += 1) {
312
+ binary += String.fromCharCode(bytes[index]);
313
+ }
314
+ return btoa(binary);
315
+ }
316
+ function providerUsageFromLanguageUsage(modelId, usage) {
317
+ const promptTokens = usage?.inputTokens?.total ?? 0;
318
+ const completionTokens = usage?.outputTokens?.total ?? 0;
319
+ const cachedTokens = usage?.inputTokens?.cacheRead ?? 0;
320
+ const result = {
321
+ promptTokens,
322
+ completionTokens,
323
+ totalTokens: promptTokens + completionTokens,
324
+ reasoningTokens: usage?.outputTokens?.reasoning ?? void 0,
325
+ cachedTokens,
326
+ provider: "xai"
327
+ };
328
+ result.cost = calculateXAIUsageCost(modelId, result);
329
+ return result;
330
+ }
331
+ function extractTextFromContent(content) {
332
+ if (typeof content === "string") return content;
333
+ if (!Array.isArray(content)) return "";
334
+ return content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
335
+ }
336
+ function isHttpUrl(value) {
337
+ return value.startsWith("http://") || value.startsWith("https://");
338
+ }
339
+ function parseDataUrl(value) {
340
+ const match = /^data:([^;,]+);base64,(.*)$/s.exec(value);
341
+ if (!match) return null;
342
+ return {
343
+ mediaType: match[1],
344
+ data: match[2]
345
+ };
346
+ }
347
+ function normalizeChatReasoningEffort(value) {
348
+ switch (value) {
349
+ case "high":
350
+ return "high";
351
+ case "medium":
352
+ case "low":
353
+ return "low";
354
+ default:
355
+ return void 0;
356
+ }
357
+ }
358
+ function buildFileLanguagePart(data, mediaType, filename) {
359
+ if (isHttpUrl(data)) {
360
+ return {
361
+ type: "file",
362
+ data: new URL(data),
363
+ mediaType,
364
+ filename
365
+ };
366
+ }
367
+ const parsedDataUrl = parseDataUrl(data);
368
+ if (parsedDataUrl) {
369
+ return {
370
+ type: "file",
371
+ data: parsedDataUrl.data,
372
+ mediaType: parsedDataUrl.mediaType,
373
+ filename
374
+ };
375
+ }
376
+ return {
377
+ type: "file",
378
+ data,
379
+ mediaType,
380
+ filename
381
+ };
382
+ }
383
+ function imageUrlToLanguagePart(url) {
384
+ if (isHttpUrl(url)) {
385
+ return {
386
+ type: "file",
387
+ data: new URL(url),
388
+ mediaType: "image/*",
389
+ filename: void 0
390
+ };
391
+ }
392
+ const parsedDataUrl = parseDataUrl(url);
393
+ if (parsedDataUrl) {
394
+ return {
395
+ type: "file",
396
+ data: parsedDataUrl.data,
397
+ mediaType: parsedDataUrl.mediaType,
398
+ filename: void 0
399
+ };
400
+ }
401
+ return {
402
+ type: "file",
403
+ data: url,
404
+ mediaType: "image/jpeg",
405
+ filename: void 0
406
+ };
407
+ }
408
+ function contentPartToImageModelFile(part) {
409
+ if (part.type === "image_url") {
410
+ const url = part.image_url?.url || "";
411
+ if (isHttpUrl(url)) {
412
+ return { type: "url", url };
413
+ }
414
+ const parsedDataUrl = parseDataUrl(url);
415
+ if (parsedDataUrl) {
416
+ return {
417
+ type: "file",
418
+ data: parsedDataUrl.data,
419
+ mediaType: parsedDataUrl.mediaType
420
+ };
421
+ }
422
+ return {
423
+ type: "file",
424
+ data: url,
425
+ mediaType: "image/jpeg"
426
+ };
427
+ }
428
+ return buildFileLanguagePart(part.data, part.mediaType, part.filename);
429
+ }
430
+ function imageModelFileToXaiImageUrl(file) {
431
+ if (file.type === "url") return file.url;
432
+ return `data:${file.mediaType};base64,${file.data}`;
433
+ }
434
+ function contentPartToLanguagePart(part) {
435
+ if (part.type === "text") {
436
+ return { type: "text", text: part.text };
437
+ }
438
+ if (part.type === "image") {
439
+ return buildFileLanguagePart(part.data, part.mediaType);
440
+ }
441
+ if (part.type === "image_url") {
442
+ return imageUrlToLanguagePart(part.image_url?.url || "");
443
+ }
444
+ return buildFileLanguagePart(part.data, part.mediaType, part.filename);
445
+ }
446
+ function providerMessageToPromptMessage(message) {
447
+ if (message.role === "system") {
448
+ return { role: "system", content: message.content };
449
+ }
450
+ if (message.role === "user") {
451
+ const content2 = typeof message.content === "string" ? [{ type: "text", text: message.content }] : message.content.map(contentPartToLanguagePart);
452
+ return { role: "user", content: content2 };
453
+ }
454
+ if (message.role === "assistant") {
455
+ const content2 = [];
456
+ if (message.content) content2.push({ type: "text", text: message.content });
457
+ if (message.toolCalls?.length) {
458
+ for (const toolCall of message.toolCalls) {
459
+ content2.push({
460
+ type: "tool-call",
461
+ toolCallId: toolCall.id,
462
+ toolName: toolCall.name,
463
+ input: toolCall.arguments
464
+ });
465
+ }
466
+ }
467
+ return { role: "assistant", content: content2 };
468
+ }
469
+ const content = [];
470
+ if (typeof message.content === "string") {
471
+ content.push({
472
+ type: "tool-result",
473
+ toolCallId: message.toolCallId,
474
+ toolName: message.toolName,
475
+ output: { type: "text", value: message.content }
476
+ });
477
+ } else if ("type" in message.content && message.content.type === "error") {
478
+ content.push({
479
+ type: "tool-result",
480
+ toolCallId: message.toolCallId,
481
+ toolName: message.toolName,
482
+ output: { type: "error-text", value: message.content.error }
483
+ });
484
+ } else if ("type" in message.content && message.content.type === "text") {
485
+ content.push({
486
+ type: "tool-result",
487
+ toolCallId: message.toolCallId,
488
+ toolName: message.toolName,
489
+ output: { type: "text", value: message.content.text }
490
+ });
491
+ } else {
492
+ content.push({
493
+ type: "tool-result",
494
+ toolCallId: message.toolCallId,
495
+ toolName: message.toolName,
496
+ output: {
497
+ type: "content",
498
+ value: Array.isArray(message.content) ? message.content.reduce((parts, part) => {
499
+ if (part.type === "text") {
500
+ parts.push({ type: "text", text: part.text });
501
+ return parts;
502
+ }
503
+ if (part.type === "image") {
504
+ parts.push({ type: "file-data", data: part.data, mediaType: part.mediaType });
505
+ return parts;
506
+ }
507
+ if (part.type === "image_url") {
508
+ parts.push({ type: "file-url", url: part.image_url.url });
509
+ return parts;
510
+ }
511
+ parts.push({ type: "file-data", data: part.data, mediaType: part.mediaType, filename: part.filename });
512
+ return parts;
513
+ }, []) : [{ type: "text", text: JSON.stringify(message.content) }]
514
+ }
515
+ });
516
+ }
517
+ return { role: "tool", content };
518
+ }
519
+ function normalizeMessagesForXAI(messages) {
520
+ const systemMessages = messages.filter((message) => message.role === "system");
521
+ const nonSystemMessages = messages.filter((message) => message.role !== "system");
522
+ if (!systemMessages.length) return nonSystemMessages;
523
+ return [
524
+ {
525
+ role: "system",
526
+ content: systemMessages.map((message) => message.content).join("\n\n")
527
+ },
528
+ ...nonSystemMessages
529
+ ];
530
+ }
531
+ function transformTools(tools) {
532
+ if (!tools?.length) return void 0;
533
+ return tools.map((tool) => ({
534
+ type: "function",
535
+ name: tool.function.name,
536
+ description: tool.function.description,
537
+ inputSchema: tool.function.parameters || {
538
+ type: "object",
539
+ properties: {},
540
+ required: []
541
+ }
542
+ }));
543
+ }
544
+ function mapToolChoice(choice) {
545
+ if (choice === "auto" || choice === "none" || choice === "required") {
546
+ return { type: choice };
547
+ }
548
+ if (choice && typeof choice === "object" && "name" in choice) {
549
+ return { type: "tool", toolName: choice.name };
550
+ }
551
+ return void 0;
552
+ }
553
+ function extractToolCalls(content) {
554
+ const toolCalls = content.filter((part) => part.type === "tool-call");
555
+ if (!toolCalls.length) return void 0;
556
+ return toolCalls.map((part) => {
557
+ let input = {};
558
+ if (typeof part.input === "string") {
559
+ try {
560
+ input = JSON.parse(part.input);
561
+ } catch {
562
+ input = {};
563
+ }
564
+ } else if (part.input && typeof part.input === "object") {
565
+ input = part.input;
566
+ }
567
+ return {
568
+ id: part.toolCallId,
569
+ name: part.toolName,
570
+ arguments: input
571
+ };
572
+ });
573
+ }
574
+ var XAIProvider = class {
575
+ name = "xai";
576
+ specificationVersion = "1";
577
+ config;
578
+ client = createXai({
579
+ apiKey: ""
580
+ });
581
+ constructor(config) {
582
+ this.config = config;
583
+ this.client = createXai({
584
+ apiKey: config.apiKey,
585
+ baseURL: config.baseUrl
586
+ });
587
+ }
588
+ supportsModel(_modelId) {
589
+ return true;
590
+ }
591
+ getIcon(_modelId) {
592
+ return getXAIIconDataUri();
593
+ }
594
+ async getModels(filter) {
595
+ const models = [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => ({
596
+ id: model.id,
597
+ name: model.name,
598
+ description: model.description,
599
+ contextLength: model.contextLength,
600
+ iconId: this.getIcon(model.id),
601
+ slug: resolveModelAlias(model.id)
602
+ }));
603
+ if (!filter) return models;
604
+ const query = filter.toLowerCase();
605
+ return models.filter(
606
+ (model) => model.id.toLowerCase().includes(query) || model.name.toLowerCase().includes(query) || (model.description?.toLowerCase().includes(query) ?? false)
607
+ );
608
+ }
609
+ async getModelCapabilities(modelId) {
610
+ const resolved = resolveModelAlias(modelId);
611
+ const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);
612
+ return model ? { ...model.capabilities } : null;
613
+ }
614
+ buildLanguageModelCallOptions(request) {
615
+ const providerOptions = request.providerOptions || {};
616
+ const prompt = normalizeMessagesForXAI(request.messages).map(providerMessageToPromptMessage);
617
+ const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => entry.id === request.model || resolveModelAlias(entry.id) === resolveModelAlias(request.model));
618
+ const reasoningLevel = request.reasoning?.level;
619
+ const mappedReasoning = typeof providerOptions.reasoningEffort === "string" ? normalizeChatReasoningEffort(providerOptions.reasoningEffort) : normalizeChatReasoningEffort(
620
+ typeof reasoningLevel === "number" ? mapReasoningLevel(reasoningLevel, model?.capabilities.reasoningLevels) : null
621
+ );
622
+ const parallelFunctionCalling = typeof providerOptions.parallel_function_calling === "boolean" ? providerOptions.parallel_function_calling : request.parallelToolCalls;
623
+ return {
624
+ prompt,
625
+ maxOutputTokens: request.maxOutputTokens,
626
+ temperature: request.temperature,
627
+ topP: request.topP,
628
+ topK: request.topK,
629
+ stopSequences: request.stopSequences,
630
+ responseFormat: request.responseFormat,
631
+ tools: transformTools(request.tools),
632
+ toolChoice: mapToolChoice(request.toolChoice),
633
+ abortSignal: request.signal,
634
+ providerOptions: {
635
+ xai: {
636
+ ...mappedReasoning ? { reasoningEffort: mappedReasoning } : {},
637
+ ...typeof providerOptions.logprobs === "boolean" ? { logprobs: providerOptions.logprobs } : {},
638
+ ...typeof providerOptions.topLogprobs === "number" ? { topLogprobs: providerOptions.topLogprobs } : {},
639
+ ...typeof parallelFunctionCalling === "boolean" ? { parallel_function_calling: parallelFunctionCalling } : {},
640
+ ...providerOptions.searchParameters ? { searchParameters: providerOptions.searchParameters } : {}
641
+ }
642
+ }
643
+ };
644
+ }
645
+ getLanguageModel(modelId) {
646
+ return this.client.chat(resolveModelAlias(modelId));
647
+ }
648
+ getImageModel(modelId) {
649
+ return this.client.image(resolveModelAlias(modelId));
650
+ }
651
+ async inspectRequest(request) {
652
+ if (isImageModel(request.model)) {
653
+ const imageRequest = this.extractImageRequest(request);
654
+ return {
655
+ body: imageRequest.body,
656
+ messagesPath: "prompt",
657
+ metadata: {
658
+ endpoint: imageRequest.endpoint,
659
+ headers: { "Content-Type": "application/json" }
660
+ }
661
+ };
662
+ }
663
+ const options = this.buildLanguageModelCallOptions(request);
664
+ const model = this.getLanguageModel(request.model);
665
+ const sdkArgs = typeof model?.getArgs === "function" ? await model.getArgs(options) : { args: void 0 };
666
+ return {
667
+ body: sdkArgs.args || {
668
+ model: resolveModelAlias(request.model),
669
+ messages: options.prompt
670
+ },
671
+ messagesPath: "messages",
672
+ metadata: {
673
+ endpoint: `${this.config.baseUrl || "https://api.x.ai/v1"}/chat/completions`,
674
+ headers: { "Content-Type": "application/json" }
675
+ }
676
+ };
677
+ }
678
+ extractImageRequest(request) {
679
+ const providerOptions = request.providerOptions || {};
680
+ const latestUser = [...request.messages].reverse().find((message) => message.role === "user");
681
+ const prompt = latestUser ? extractTextFromContent(latestUser.content) : "";
682
+ const files = latestUser && typeof latestUser.content !== "string" ? latestUser.content.filter((part) => part.type === "image" || part.type === "image_url").map((part) => contentPartToImageModelFile(part)) : [];
683
+ const n = typeof providerOptions.numberOfImages === "number" ? providerOptions.numberOfImages : 1;
684
+ const endpoint = `${this.config.baseUrl || "https://api.x.ai/v1"}${files.length ? "/images/edits" : "/images/generations"}`;
685
+ const body = {
686
+ model: resolveModelAlias(request.model),
687
+ prompt,
688
+ n,
689
+ response_format: "b64_json",
690
+ ...typeof providerOptions.aspect_ratio === "string" ? { aspect_ratio: providerOptions.aspect_ratio } : {},
691
+ ...typeof providerOptions.output_format === "string" ? { output_format: providerOptions.output_format } : {},
692
+ ...typeof providerOptions.sync_mode === "boolean" ? { sync_mode: providerOptions.sync_mode } : {},
693
+ ...typeof providerOptions.resolution === "string" ? { resolution: providerOptions.resolution } : {},
694
+ ...typeof providerOptions.quality === "string" ? { quality: providerOptions.quality } : {},
695
+ ...typeof providerOptions.user === "string" ? { user: providerOptions.user } : {}
696
+ };
697
+ const imageUrls = files.map((file) => imageModelFileToXaiImageUrl(file));
698
+ if (imageUrls.length === 1) {
699
+ body.image = { url: imageUrls[0], type: "image_url" };
700
+ } else if (imageUrls.length > 1) {
701
+ body.images = imageUrls.map((url) => ({ url, type: "image_url" }));
702
+ }
703
+ return {
704
+ prompt,
705
+ files: files.length ? files : void 0,
706
+ body,
707
+ endpoint,
708
+ n
709
+ };
710
+ }
711
+ async generate(request) {
712
+ if (isImageModel(request.model)) {
713
+ return this.generateImage(request);
714
+ }
715
+ try {
716
+ const model = this.getLanguageModel(request.model);
717
+ const result = await model.doGenerate(this.buildLanguageModelCallOptions(request));
718
+ const text = result.content.filter((part) => part.type === "text").map((part) => part.text).join("");
719
+ const reasoningParts = result.content.filter((part) => part.type === "reasoning");
720
+ const reasoning = reasoningParts.map((part) => part.text).join("") || null;
721
+ const usage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), result.usage);
722
+ return {
723
+ content: text || null,
724
+ reasoning,
725
+ reasoningDetails: reasoningParts.length ? reasoningParts.map((part) => ({
726
+ type: "text",
727
+ text: part.text,
728
+ format: "xai-ai-sdk-v1"
729
+ })) : void 0,
730
+ toolCalls: extractToolCalls(result.content),
731
+ finishReason: mapFinishReason(result.finishReason),
732
+ usage,
733
+ metadata: {
734
+ provider: "xai",
735
+ model: result.response?.modelId || resolveModelAlias(request.model),
736
+ responseId: result.response?.id,
737
+ warnings: result.warnings
738
+ }
739
+ };
740
+ } catch (error) {
741
+ throw this.toProviderError(error);
742
+ }
743
+ }
744
+ async generateImage(request) {
745
+ try {
746
+ const imageModel = this.getImageModel(request.model);
747
+ const providerOptions = request.providerOptions || {};
748
+ const extracted = this.extractImageRequest(request);
749
+ const result = await imageModel.doGenerate({
750
+ prompt: extracted.prompt,
751
+ n: extracted.n,
752
+ size: void 0,
753
+ aspectRatio: typeof providerOptions.aspect_ratio === "string" ? providerOptions.aspect_ratio : void 0,
754
+ seed: void 0,
755
+ providerOptions: {
756
+ xai: {
757
+ ...typeof providerOptions.aspect_ratio === "string" ? { aspect_ratio: providerOptions.aspect_ratio } : {},
758
+ ...typeof providerOptions.output_format === "string" ? { output_format: providerOptions.output_format } : {},
759
+ ...typeof providerOptions.sync_mode === "boolean" ? { sync_mode: providerOptions.sync_mode } : {},
760
+ ...typeof providerOptions.resolution === "string" ? { resolution: providerOptions.resolution } : {},
761
+ ...typeof providerOptions.quality === "string" ? { quality: providerOptions.quality } : {},
762
+ ...typeof providerOptions.user === "string" ? { user: providerOptions.user } : {}
763
+ }
764
+ },
765
+ abortSignal: request.signal,
766
+ headers: void 0,
767
+ files: extracted.files,
768
+ mask: void 0
769
+ });
770
+ const images = result.images.map((image, index) => {
771
+ const base64 = typeof image === "string" ? image : bytesToBase64(image);
772
+ const metadataImages = result.providerMetadata?.xai?.images;
773
+ const revisedPrompt = Array.isArray(metadataImages) ? metadataImages[index]?.revisedPrompt : void 0;
774
+ return {
775
+ id: `image_${index}`,
776
+ data: base64,
777
+ mediaType: typeof providerOptions.output_format === "string" ? `image/${providerOptions.output_format}` : "image/png",
778
+ revisedPrompt: typeof revisedPrompt === "string" ? revisedPrompt : void 0
779
+ };
780
+ });
781
+ const cost = ticksToUsd(
782
+ typeof result.providerMetadata?.xai?.costInUsdTicks === "number" ? result.providerMetadata.xai.costInUsdTicks : void 0
783
+ );
784
+ return {
785
+ content: null,
786
+ images,
787
+ finishReason: "stop",
788
+ usage: {
789
+ promptTokens: result.usage?.inputTokens ?? 0,
790
+ completionTokens: result.usage?.outputTokens ?? 0,
791
+ totalTokens: (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0),
792
+ cost,
793
+ provider: "xai"
794
+ },
795
+ metadata: {
796
+ provider: "xai",
797
+ model: result.response.modelId
798
+ }
799
+ };
800
+ } catch (error) {
801
+ throw this.toProviderError(error);
802
+ }
803
+ }
804
+ async stream(request) {
805
+ if (isImageModel(request.model)) {
806
+ throw new ProviderError("xAI image models do not support streaming in Standard Agents.", "invalid_request");
807
+ }
808
+ const self = this;
809
+ try {
810
+ const model = this.getLanguageModel(request.model);
811
+ const result = await model.doStream(this.buildLanguageModelCallOptions(request));
812
+ return {
813
+ async *[Symbol.asyncIterator]() {
814
+ const reader = result.stream.getReader();
815
+ let finishReason = "stop";
816
+ let finalUsage = {
817
+ promptTokens: 0,
818
+ completionTokens: 0,
819
+ totalTokens: 0,
820
+ provider: "xai"
821
+ };
822
+ try {
823
+ while (true) {
824
+ const { done, value } = await reader.read();
825
+ if (done) break;
826
+ const chunk = value;
827
+ if (chunk.type === "text-delta") {
828
+ yield { type: "content-delta", delta: chunk.delta };
829
+ } else if (chunk.type === "text-end") {
830
+ yield { type: "content-done" };
831
+ } else if (chunk.type === "reasoning-delta") {
832
+ yield { type: "reasoning-delta", delta: chunk.delta };
833
+ } else if (chunk.type === "reasoning-end") {
834
+ yield { type: "reasoning-done" };
835
+ } else if (chunk.type === "tool-input-start") {
836
+ yield { type: "tool-call-start", id: chunk.id, name: chunk.toolName };
837
+ } else if (chunk.type === "tool-input-delta") {
838
+ yield { type: "tool-call-delta", id: chunk.id, argumentsDelta: chunk.delta };
839
+ } else if (chunk.type === "tool-call") {
840
+ let parsed = {};
841
+ try {
842
+ parsed = typeof chunk.input === "string" ? JSON.parse(chunk.input) : chunk.input;
843
+ } catch {
844
+ parsed = {};
845
+ }
846
+ yield { type: "tool-call-done", id: chunk.toolCallId, arguments: parsed };
847
+ } else if (chunk.type === "finish") {
848
+ finishReason = mapFinishReason(chunk.finishReason);
849
+ finalUsage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), chunk.usage);
850
+ } else if (chunk.type === "error") {
851
+ yield { type: "error", error: String(chunk.error) };
852
+ }
853
+ }
854
+ yield { type: "finish", finishReason, usage: finalUsage };
855
+ } catch (error) {
856
+ yield { type: "error", error: self.toProviderError(error).message };
857
+ } finally {
858
+ reader.releaseLock();
859
+ }
860
+ }
861
+ };
862
+ } catch (error) {
863
+ throw this.toProviderError(error);
864
+ }
865
+ }
866
+ toProviderError(error) {
867
+ if (error instanceof ProviderError) return error;
868
+ if (error instanceof Error) {
869
+ const candidate = error;
870
+ const status = candidate.status || candidate.statusCode;
871
+ if (status === 429) return new ProviderError(error.message, "rate_limit", status);
872
+ if (status === 401 || status === 403) return new ProviderError(error.message, "auth_error", status);
873
+ if (status === 400) return new ProviderError(error.message, "invalid_request", status);
874
+ if (status && status >= 500) return new ProviderError(error.message, "server_error", status);
875
+ if (error.name === "AbortError") return new ProviderError(error.message, "timeout");
876
+ return new ProviderError(error.message, "unknown", status);
877
+ }
878
+ return new ProviderError(String(error), "unknown");
879
+ }
880
+ };
881
+
882
+ // src/providerOptions.ts
883
+ import { z } from "zod";
884
+ var xaiProviderOptions = z.object({
885
+ reasoningEffort: z.enum(["low", "high"]).optional(),
886
+ logprobs: z.boolean().optional(),
887
+ topLogprobs: z.number().int().min(0).max(8).optional(),
888
+ parallel_function_calling: z.boolean().optional(),
889
+ searchParameters: z.object({
890
+ mode: z.enum(["off", "auto", "on"]),
891
+ returnCitations: z.boolean().optional(),
892
+ fromDate: z.string().optional(),
893
+ toDate: z.string().optional(),
894
+ maxSearchResults: z.number().int().optional(),
895
+ sources: z.array(z.discriminatedUnion("type", [
896
+ z.object({
897
+ type: z.literal("web"),
898
+ country: z.string().optional(),
899
+ excludedWebsites: z.array(z.string()).optional(),
900
+ allowedWebsites: z.array(z.string()).optional(),
901
+ safeSearch: z.boolean().optional()
902
+ }),
903
+ z.object({
904
+ type: z.literal("x"),
905
+ excludedXHandles: z.array(z.string()).optional(),
906
+ includedXHandles: z.array(z.string()).optional(),
907
+ xHandles: z.array(z.string()).optional(),
908
+ postFavoriteCount: z.number().optional(),
909
+ postViewCount: z.number().optional()
910
+ }),
911
+ z.object({
912
+ type: z.literal("news"),
913
+ country: z.string().optional(),
914
+ excludedWebsites: z.array(z.string()).optional(),
915
+ safeSearch: z.boolean().optional()
916
+ }),
917
+ z.object({
918
+ type: z.literal("rss"),
919
+ links: z.array(z.string())
920
+ })
921
+ ])).optional()
922
+ }).optional(),
923
+ aspect_ratio: z.string().optional(),
924
+ output_format: z.string().optional(),
925
+ sync_mode: z.boolean().optional(),
926
+ resolution: z.enum(["1k", "2k"]).optional(),
927
+ quality: z.enum(["low", "medium", "high"]).optional(),
928
+ user: z.string().optional(),
929
+ numberOfImages: z.number().int().min(1).max(3).optional()
930
+ }).passthrough();
931
+
932
+ // src/index.ts
933
+ var xai = Object.assign(
934
+ (config) => new XAIProvider(config),
935
+ { providerOptions: xaiProviderOptions }
936
+ );
937
+ export {
938
+ XAIProvider,
939
+ xai,
940
+ xaiProviderOptions
941
+ };
942
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/XAIProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import { createXai } from '@ai-sdk/xai';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderAttachment,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { ProviderError, mapReasoningLevel } from '@standardagents/spec';\nimport { getXAIIconDataUri } from './icons';\nimport { calculateXAIUsageCost, ticksToUsd } from './pricing';\n\ntype LanguageModelV3 = any;\ntype ImageModelV3 = any;\ntype LanguageModelV3CallOptions = any;\ntype LanguageModelV3StreamPart = any;\n\ninterface XAIModelCatalogEntry {\n id: string;\n name: string;\n description: string;\n contextLength?: number;\n maxOutputTokens?: number;\n capabilities: ModelCapabilities;\n}\n\nconst MODEL_ALIASES: Record<string, string> = {\n 'grok-4': 'grok-4-0709',\n 'grok-4-latest': 'grok-4-0709',\n};\n\nconst TEXT_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-4-0709',\n name: 'Grok 4 0709',\n description: 'Flagship Grok reasoning model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4',\n name: 'Grok 4',\n description: 'Alias of the current Grok 4 production model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-latest',\n name: 'Grok 4 Latest',\n description: 'Moving alias for the latest Grok 4 snapshot.',\n contextLength: 256000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-reasoning',\n name: 'Grok 4 Fast Reasoning',\n description: 'Low-cost long-context reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-fast-non-reasoning',\n name: 'Grok 4 Fast Non-Reasoning',\n description: 'Low-cost long-context non-reasoning model.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4-1-fast-reasoning',\n name: 'Grok 4.1 Fast Reasoning',\n description: 'Updated fast reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'grok-4-1-fast-non-reasoning',\n name: 'Grok 4.1 Fast Non-Reasoning',\n description: 'Updated fast non-reasoning Grok model with 2M-token context.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-0309-reasoning',\n name: 'Grok 4.20 0309 Reasoning',\n description: 'Long-context reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-4.20-0309-non-reasoning',\n name: 'Grok 4.20 0309 Non-Reasoning',\n description: 'Long-context non-reasoning Grok 4.20 snapshot.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n },\n },\n {\n id: 'grok-4.20-multi-agent-0309',\n name: 'Grok 4.20 Multi-Agent 0309',\n description: 'Grok multi-agent model for orchestration-heavy workloads.',\n contextLength: 2000000,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 2000000,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-code-fast-1',\n name: 'Grok Code Fast 1',\n description: 'Fast coding-oriented Grok model.',\n contextLength: 256000,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 256000,\n },\n },\n {\n id: 'grok-3',\n name: 'Grok 3',\n description: 'General-purpose Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-latest',\n name: 'Grok 3 Latest',\n description: 'Moving alias for the current Grok 3 model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini',\n name: 'Grok 3 Mini',\n description: 'Lower-cost Grok 3 variant.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n {\n id: 'grok-3-mini-latest',\n name: 'Grok 3 Mini Latest',\n description: 'Moving alias for the current Grok 3 Mini model.',\n contextLength: 131072,\n capabilities: {\n supportsImages: false,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 131072,\n reasoningLevels: { 0: null, 50: 'low', 100: 'high' },\n },\n },\n];\n\nconst IMAGE_MODELS: XAIModelCatalogEntry[] = [\n {\n id: 'grok-imagine-image',\n name: 'Grok Imagine Image',\n description: 'xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'grok-imagine-image-pro',\n name: 'Grok Imagine Image Pro',\n description: 'Higher-quality xAI image generation and edit model.',\n capabilities: {\n supportsImages: true,\n supportsStreaming: false,\n supportsToolCalls: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction resolveModelAlias(modelId: string): string {\n return MODEL_ALIASES[modelId] || modelId;\n}\n\nfunction isImageModel(modelId: string): boolean {\n return resolveModelAlias(modelId).startsWith('grok-imagine-image');\n}\n\nfunction mapFinishReason(reason: { unified: string; raw?: string | undefined }): ProviderFinishReason {\n switch (reason.unified) {\n case 'length':\n return 'length';\n case 'tool-calls':\n return 'tool_calls';\n case 'content-filter':\n return 'content_filter';\n case 'error':\n return 'error';\n case 'stop':\n default:\n return 'stop';\n }\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let index = 0; index < bytes.length; index += 1) {\n binary += String.fromCharCode(bytes[index]);\n }\n return btoa(binary);\n}\n\nfunction providerUsageFromLanguageUsage(modelId: string, usage: any): ProviderUsage {\n const promptTokens = usage?.inputTokens?.total ?? 0;\n const completionTokens = usage?.outputTokens?.total ?? 0;\n const cachedTokens = usage?.inputTokens?.cacheRead ?? 0;\n const result: ProviderUsage = {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n reasoningTokens: usage?.outputTokens?.reasoning ?? undefined,\n cachedTokens,\n provider: 'xai',\n };\n result.cost = calculateXAIUsageCost(modelId, result);\n return result;\n}\n\nfunction extractTextFromContent(content: ProviderMessage['content']): string {\n if (typeof content === 'string') return content;\n if (!Array.isArray(content)) return '';\n return content\n .filter((part): part is Extract<typeof part, { type: 'text' }> => part.type === 'text')\n .map((part) => part.text)\n .join('\\n');\n}\n\nfunction attachmentToFileParts(attachments: ProviderAttachment[] | undefined): Array<{ data: string; mediaType: string; filename?: string }> {\n if (!attachments?.length) return [];\n return attachments\n .filter((attachment: ProviderAttachment) => attachment.type === 'image' && attachment.data)\n .map((attachment: ProviderAttachment) => ({\n data: attachment.data,\n mediaType: attachment.mediaType,\n filename: attachment.name,\n }));\n}\n\nfunction isHttpUrl(value: string): boolean {\n return value.startsWith('http://') || value.startsWith('https://');\n}\n\nfunction parseDataUrl(value: string): { mediaType: string; data: string } | null {\n const match = /^data:([^;,]+);base64,(.*)$/s.exec(value);\n if (!match) return null;\n return {\n mediaType: match[1],\n data: match[2],\n };\n}\n\nfunction normalizeChatReasoningEffort(value: string | null | undefined): 'low' | 'high' | undefined {\n switch (value) {\n case 'high':\n return 'high';\n case 'medium':\n case 'low':\n return 'low';\n default:\n return undefined;\n }\n}\n\nfunction buildFileLanguagePart(data: string, mediaType: string, filename?: string): any {\n if (isHttpUrl(data)) {\n return {\n type: 'file',\n data: new URL(data),\n mediaType,\n filename,\n };\n }\n\n const parsedDataUrl = parseDataUrl(data);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename,\n };\n }\n\n return {\n type: 'file',\n data,\n mediaType,\n filename,\n };\n}\n\nfunction imageUrlToLanguagePart(url: string): any {\n if (isHttpUrl(url)) {\n return {\n type: 'file',\n data: new URL(url),\n mediaType: 'image/*',\n filename: undefined,\n };\n }\n\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n filename: undefined,\n };\n }\n\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n filename: undefined,\n };\n}\n\nfunction contentPartToImageModelFile(part: any): any {\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (isHttpUrl(url)) {\n return { type: 'url', url };\n }\n const parsedDataUrl = parseDataUrl(url);\n if (parsedDataUrl) {\n return {\n type: 'file',\n data: parsedDataUrl.data,\n mediaType: parsedDataUrl.mediaType,\n };\n }\n return {\n type: 'file',\n data: url,\n mediaType: 'image/jpeg',\n };\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction imageModelFileToXaiImageUrl(file: any): string {\n if (file.type === 'url') return file.url;\n return `data:${file.mediaType};base64,${file.data}`;\n}\n\nfunction contentPartToLanguagePart(part: any): any {\n if (part.type === 'text') {\n return { type: 'text', text: part.text };\n }\n\n if (part.type === 'image') {\n return buildFileLanguagePart(part.data, part.mediaType);\n }\n\n if (part.type === 'image_url') {\n return imageUrlToLanguagePart(part.image_url?.url || '');\n }\n\n return buildFileLanguagePart(part.data, part.mediaType, part.filename);\n}\n\nfunction providerMessageToPromptMessage(message: ProviderMessage): any {\n if (message.role === 'system') {\n return { role: 'system', content: message.content };\n }\n\n if (message.role === 'user') {\n const content = typeof message.content === 'string'\n ? [{ type: 'text', text: message.content }]\n : message.content.map(contentPartToLanguagePart);\n\n return { role: 'user', content };\n }\n\n if (message.role === 'assistant') {\n const content: any[] = [];\n if (message.content) content.push({ type: 'text', text: message.content });\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n content.push({\n type: 'tool-call',\n toolCallId: toolCall.id,\n toolName: toolCall.name,\n input: toolCall.arguments,\n });\n }\n }\n return { role: 'assistant', content };\n }\n\n const content = [];\n if (typeof message.content === 'string') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content },\n });\n } else if ('type' in message.content && message.content.type === 'error') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'error-text', value: message.content.error },\n });\n } else if ('type' in message.content && message.content.type === 'text') {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: { type: 'text', value: message.content.text },\n });\n } else {\n content.push({\n type: 'tool-result',\n toolCallId: message.toolCallId,\n toolName: message.toolName,\n output: {\n type: 'content',\n value: Array.isArray(message.content)\n ? message.content.reduce<any[]>((parts, part: any) => {\n if (part.type === 'text') {\n parts.push({ type: 'text', text: part.text });\n return parts;\n }\n if (part.type === 'image') {\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType });\n return parts;\n }\n if (part.type === 'image_url') {\n parts.push({ type: 'file-url', url: part.image_url.url });\n return parts;\n }\n parts.push({ type: 'file-data', data: part.data, mediaType: part.mediaType, filename: part.filename });\n return parts;\n }, [])\n : [{ type: 'text', text: JSON.stringify(message.content) }],\n },\n });\n }\n\n return { role: 'tool', content };\n}\n\nfunction normalizeMessagesForXAI(messages: ProviderMessage[]): ProviderMessage[] {\n const systemMessages = messages.filter((message) => message.role === 'system');\n const nonSystemMessages = messages.filter((message) => message.role !== 'system');\n\n if (!systemMessages.length) return nonSystemMessages;\n\n return [\n {\n role: 'system',\n content: systemMessages.map((message) => message.content).join('\\n\\n'),\n },\n ...nonSystemMessages,\n ];\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): Array<any> | undefined {\n if (!tools?.length) return undefined;\n\n return tools.map((tool) => ({\n type: 'function',\n name: tool.function.name,\n description: tool.function.description,\n inputSchema: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n }));\n}\n\nfunction mapToolChoice(choice: ProviderRequest['toolChoice']): any {\n if (choice === 'auto' || choice === 'none' || choice === 'required') {\n return { type: choice };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return { type: 'tool', toolName: choice.name };\n }\n return undefined;\n}\n\nfunction extractToolCalls(content: any[]): ProviderToolCallPart[] | undefined {\n const toolCalls = content.filter((part: any) => part.type === 'tool-call');\n if (!toolCalls.length) return undefined;\n\n return toolCalls.map((part: any) => {\n let input: Record<string, unknown> = {};\n if (typeof part.input === 'string') {\n try {\n input = JSON.parse(part.input);\n } catch {\n input = {};\n }\n } else if (part.input && typeof part.input === 'object') {\n input = part.input as Record<string, unknown>;\n }\n\n return {\n id: part.toolCallId,\n name: part.toolName,\n arguments: input,\n };\n });\n}\n\nexport class XAIProvider implements Provider {\n readonly name = 'xai';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private readonly client = createXai({\n apiKey: '',\n });\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n this.client = createXai({\n apiKey: config.apiKey,\n baseURL: config.baseUrl,\n });\n }\n\n supportsModel(_modelId: string): boolean {\n return true;\n }\n\n getIcon(_modelId?: string): string {\n return getXAIIconDataUri();\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const models = [...TEXT_MODELS, ...IMAGE_MODELS].map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n contextLength: model.contextLength,\n iconId: this.getIcon(model.id),\n slug: resolveModelAlias(model.id),\n }));\n\n if (!filter) return models;\n\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const resolved = resolveModelAlias(modelId);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => resolveModelAlias(entry.id) === resolved);\n return model ? { ...model.capabilities } : null;\n }\n\n private buildLanguageModelCallOptions(request: ProviderRequest): LanguageModelV3CallOptions {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const prompt = normalizeMessagesForXAI(request.messages).map(providerMessageToPromptMessage);\n const model = [...TEXT_MODELS, ...IMAGE_MODELS].find((entry) => entry.id === request.model || resolveModelAlias(entry.id) === resolveModelAlias(request.model));\n const reasoningLevel = request.reasoning?.level;\n const mappedReasoning = typeof providerOptions.reasoningEffort === 'string'\n ? normalizeChatReasoningEffort(providerOptions.reasoningEffort)\n : normalizeChatReasoningEffort(\n typeof reasoningLevel === 'number'\n ? mapReasoningLevel(reasoningLevel, model?.capabilities.reasoningLevels)\n : null\n );\n const parallelFunctionCalling = typeof providerOptions.parallel_function_calling === 'boolean'\n ? providerOptions.parallel_function_calling\n : request.parallelToolCalls;\n\n return {\n prompt,\n maxOutputTokens: request.maxOutputTokens,\n temperature: request.temperature,\n topP: request.topP,\n topK: request.topK,\n stopSequences: request.stopSequences,\n responseFormat: request.responseFormat,\n tools: transformTools(request.tools),\n toolChoice: mapToolChoice(request.toolChoice),\n abortSignal: request.signal,\n providerOptions: {\n xai: {\n ...(mappedReasoning ? { reasoningEffort: mappedReasoning } : {}),\n ...(typeof providerOptions.logprobs === 'boolean' ? { logprobs: providerOptions.logprobs } : {}),\n ...(typeof providerOptions.topLogprobs === 'number' ? { topLogprobs: providerOptions.topLogprobs } : {}),\n ...(typeof parallelFunctionCalling === 'boolean' ? { parallel_function_calling: parallelFunctionCalling } : {}),\n ...(providerOptions.searchParameters ? { searchParameters: providerOptions.searchParameters } : {}),\n },\n },\n };\n }\n\n private getLanguageModel(modelId: string): LanguageModelV3 {\n return this.client.chat(resolveModelAlias(modelId));\n }\n\n private getImageModel(modelId: string): ImageModelV3 {\n return this.client.image(resolveModelAlias(modelId));\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImageModel(request.model)) {\n const imageRequest = this.extractImageRequest(request);\n return {\n body: imageRequest.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imageRequest.endpoint,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n const options = this.buildLanguageModelCallOptions(request);\n const model = this.getLanguageModel(request.model) as any;\n const sdkArgs = typeof model?.getArgs === 'function'\n ? await model.getArgs(options)\n : { args: undefined };\n return {\n body: sdkArgs.args || {\n model: resolveModelAlias(request.model),\n messages: options.prompt,\n },\n messagesPath: 'messages',\n metadata: {\n endpoint: `${this.config.baseUrl || 'https://api.x.ai/v1'}/chat/completions`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n private extractImageRequest(request: ProviderRequest): {\n prompt: string;\n files?: any[];\n body: Record<string, unknown>;\n endpoint: string;\n n: number;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? extractTextFromContent(latestUser.content) : '';\n const files = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image' || part.type === 'image_url')\n .map((part: any) => contentPartToImageModelFile(part))\n : [];\n const n = typeof providerOptions.numberOfImages === 'number' ? providerOptions.numberOfImages : 1;\n const endpoint = `${this.config.baseUrl || 'https://api.x.ai/v1'}${files.length ? '/images/edits' : '/images/generations'}`;\n const body: Record<string, unknown> = {\n model: resolveModelAlias(request.model),\n prompt,\n n,\n response_format: 'b64_json',\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n };\n const imageUrls = files.map((file: any) => imageModelFileToXaiImageUrl(file));\n if (imageUrls.length === 1) {\n body.image = { url: imageUrls[0], type: 'image_url' };\n } else if (imageUrls.length > 1) {\n body.images = imageUrls.map((url: string) => ({ url, type: 'image_url' }));\n }\n\n return {\n prompt,\n files: files.length ? files : undefined,\n body,\n endpoint,\n n,\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImageModel(request.model)) {\n return this.generateImage(request);\n }\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doGenerate(this.buildLanguageModelCallOptions(request));\n const text = result.content\n .filter((part: any) => part.type === 'text')\n .map((part: any) => part.text)\n .join('');\n const reasoningParts = result.content.filter((part: any) => part.type === 'reasoning');\n const reasoning = reasoningParts.map((part: any) => part.text).join('') || null;\n const usage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), result.usage);\n\n return {\n content: text || null,\n reasoning,\n reasoningDetails: reasoningParts.length\n ? reasoningParts.map((part: any) => ({\n type: 'text',\n text: part.text,\n format: 'xai-ai-sdk-v1',\n }))\n : undefined,\n toolCalls: extractToolCalls(result.content),\n finishReason: mapFinishReason(result.finishReason),\n usage,\n metadata: {\n provider: 'xai',\n model: result.response?.modelId || resolveModelAlias(request.model),\n responseId: result.response?.id,\n warnings: result.warnings,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImage(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const imageModel = this.getImageModel(request.model);\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const extracted = this.extractImageRequest(request);\n\n const result = await imageModel.doGenerate({\n prompt: extracted.prompt,\n n: extracted.n,\n size: undefined,\n aspectRatio: typeof providerOptions.aspect_ratio === 'string'\n ? providerOptions.aspect_ratio as `${number}:${number}`\n : undefined,\n seed: undefined,\n providerOptions: {\n xai: {\n ...(typeof providerOptions.aspect_ratio === 'string' ? { aspect_ratio: providerOptions.aspect_ratio } : {}),\n ...(typeof providerOptions.output_format === 'string' ? { output_format: providerOptions.output_format } : {}),\n ...(typeof providerOptions.sync_mode === 'boolean' ? { sync_mode: providerOptions.sync_mode } : {}),\n ...(typeof providerOptions.resolution === 'string' ? { resolution: providerOptions.resolution } : {}),\n ...(typeof providerOptions.quality === 'string' ? { quality: providerOptions.quality } : {}),\n ...(typeof providerOptions.user === 'string' ? { user: providerOptions.user } : {}),\n },\n },\n abortSignal: request.signal,\n headers: undefined,\n files: extracted.files,\n mask: undefined,\n } as any);\n\n const images: ProviderGeneratedImage[] = result.images.map((image: any, index: number) => {\n const base64 = typeof image === 'string' ? image : bytesToBase64(image);\n const metadataImages = result.providerMetadata?.xai?.images;\n const revisedPrompt = Array.isArray(metadataImages)\n ? (metadataImages[index] as Record<string, unknown> | undefined)?.revisedPrompt\n : undefined;\n\n return {\n id: `image_${index}`,\n data: base64,\n mediaType: typeof providerOptions.output_format === 'string'\n ? `image/${providerOptions.output_format}`\n : 'image/png',\n revisedPrompt: typeof revisedPrompt === 'string' ? revisedPrompt : undefined,\n };\n });\n\n const cost = ticksToUsd(\n typeof result.providerMetadata?.xai?.costInUsdTicks === 'number'\n ? result.providerMetadata.xai.costInUsdTicks\n : undefined\n );\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: result.usage?.inputTokens ?? 0,\n completionTokens: result.usage?.outputTokens ?? 0,\n totalTokens: (result.usage?.inputTokens ?? 0) + (result.usage?.outputTokens ?? 0),\n cost,\n provider: 'xai',\n },\n metadata: {\n provider: 'xai',\n model: result.response.modelId,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImageModel(request.model)) {\n throw new ProviderError('xAI image models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const model = this.getLanguageModel(request.model);\n const result = await model.doStream(this.buildLanguageModelCallOptions(request));\n\n return {\n async *[Symbol.asyncIterator]() {\n const reader = result.stream.getReader();\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'xai',\n };\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = value as LanguageModelV3StreamPart;\n\n if (chunk.type === 'text-delta') {\n yield { type: 'content-delta', delta: chunk.delta };\n } else if (chunk.type === 'text-end') {\n yield { type: 'content-done' };\n } else if (chunk.type === 'reasoning-delta') {\n yield { type: 'reasoning-delta', delta: chunk.delta };\n } else if (chunk.type === 'reasoning-end') {\n yield { type: 'reasoning-done' };\n } else if (chunk.type === 'tool-input-start') {\n yield { type: 'tool-call-start', id: chunk.id, name: chunk.toolName };\n } else if (chunk.type === 'tool-input-delta') {\n yield { type: 'tool-call-delta', id: chunk.id, argumentsDelta: chunk.delta };\n } else if (chunk.type === 'tool-call') {\n let parsed: Record<string, unknown> = {};\n try {\n parsed = typeof chunk.input === 'string' ? JSON.parse(chunk.input) : (chunk.input as Record<string, unknown>);\n } catch {\n parsed = {};\n }\n\n yield { type: 'tool-call-done', id: chunk.toolCallId, arguments: parsed };\n } else if (chunk.type === 'finish') {\n finishReason = mapFinishReason(chunk.finishReason);\n finalUsage = providerUsageFromLanguageUsage(resolveModelAlias(request.model), chunk.usage);\n } else if (chunk.type === 'error') {\n yield { type: 'error', error: String(chunk.error) };\n }\n }\n\n yield { type: 'finish', finishReason, usage: finalUsage };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n } finally {\n reader.releaseLock();\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","import XAI_ICON from './xai.png';\n\nexport function getXAIIconDataUri(): string {\n return XAI_ICON;\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\nexport interface XAITextPricing {\n inputPerMillion: number;\n outputPerMillion: number;\n cachedInputPerMillion?: number;\n}\n\nconst MODEL_PRICING: Record<string, XAITextPricing> = {\n 'grok-4-0709': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-4-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4-1-fast-non-reasoning': { inputPerMillion: 2, cachedInputPerMillion: 0.5, outputPerMillion: 5 },\n 'grok-4.20-0309-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-0309-non-reasoning': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-4.20-multi-agent-0309': { inputPerMillion: 20, cachedInputPerMillion: 2, outputPerMillion: 60 },\n 'grok-code-fast-1': { inputPerMillion: 2, cachedInputPerMillion: 0.2, outputPerMillion: 15 },\n 'grok-3': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-latest': { inputPerMillion: 30, cachedInputPerMillion: 7.5, outputPerMillion: 150 },\n 'grok-3-mini': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n 'grok-3-mini-latest': { inputPerMillion: 3, cachedInputPerMillion: 0.75, outputPerMillion: 5 },\n};\n\nexport function getXAITextPricing(modelId: string): XAITextPricing | undefined {\n return MODEL_PRICING[modelId];\n}\n\nexport function calculateXAIUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'cachedTokens'>\n): number | undefined {\n const pricing = getXAITextPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const inputCost = (uncachedPromptTokens / 1_000_000) * pricing.inputPerMillion;\n const cachedCost = pricing.cachedInputPerMillion\n ? (cachedTokens / 1_000_000) * pricing.cachedInputPerMillion\n : 0;\n const outputCost = (usage.completionTokens / 1_000_000) * pricing.outputPerMillion;\n\n return Number((inputCost + cachedCost + outputCost).toFixed(12));\n}\n\nexport function ticksToUsd(ticks: number | undefined): number | undefined {\n if (typeof ticks !== 'number') return undefined;\n return Number((ticks / 1_000_000_000).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const xaiProviderOptions = z.object({\n reasoningEffort: z.enum(['low', 'high']).optional(),\n logprobs: z.boolean().optional(),\n topLogprobs: z.number().int().min(0).max(8).optional(),\n parallel_function_calling: z.boolean().optional(),\n searchParameters: z.object({\n mode: z.enum(['off', 'auto', 'on']),\n returnCitations: z.boolean().optional(),\n fromDate: z.string().optional(),\n toDate: z.string().optional(),\n maxSearchResults: z.number().int().optional(),\n sources: z.array(z.discriminatedUnion('type', [\n z.object({\n type: z.literal('web'),\n country: z.string().optional(),\n excludedWebsites: z.array(z.string()).optional(),\n allowedWebsites: z.array(z.string()).optional(),\n safeSearch: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('x'),\n excludedXHandles: z.array(z.string()).optional(),\n includedXHandles: z.array(z.string()).optional(),\n xHandles: z.array(z.string()).optional(),\n postFavoriteCount: z.number().optional(),\n postViewCount: z.number().optional(),\n }),\n z.object({\n type: z.literal('news'),\n country: z.string().optional(),\n excludedWebsites: z.array(z.string()).optional(),\n safeSearch: z.boolean().optional(),\n }),\n z.object({\n type: z.literal('rss'),\n links: z.array(z.string()),\n }),\n ])).optional(),\n }).optional(),\n aspect_ratio: z.string().optional(),\n output_format: z.string().optional(),\n sync_mode: z.boolean().optional(),\n resolution: z.enum(['1k', '2k']).optional(),\n quality: z.enum(['low', 'medium', 'high']).optional(),\n user: z.string().optional(),\n numberOfImages: z.number().int().min(1).max(3).optional(),\n}).passthrough();\n\nexport type XAIProviderOptions = z.infer<typeof xaiProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { XAIProvider } from './XAIProvider';\nimport { xaiProviderOptions } from './providerOptions';\n\n/**\n * xAI provider factory for Standard Agents.\n *\n * Uses the official `@ai-sdk/xai` provider for chat and image models.\n */\nexport const xai: ProviderFactoryWithOptions<typeof xaiProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new XAIProvider(config),\n { providerOptions: xaiProviderOptions }\n);\n\nexport { xaiProviderOptions, type XAIProviderOptions } from './providerOptions';\nexport { XAIProvider } from './XAIProvider';\n"],"mappings":"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","names":["content"]}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@standardagents/xai",
3
+ "version": "0.0.1-dev.ffffff",
4
+ "private": false,
5
+ "publishConfig": {
6
+ "access": "restricted",
7
+ "registry": "https://registry.npmjs.org/"
8
+ },
9
+ "type": "module",
10
+ "description": "xAI provider for Standard Agents",
11
+ "main": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js"
17
+ }
18
+ },
19
+ "files": [
20
+ "dist",
21
+ "README.md"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsup",
25
+ "dev": "tsup --watch",
26
+ "typecheck": "tsc --noEmit",
27
+ "test": "cd ../.. && vitest --dir packages/xai",
28
+ "test:run": "cd ../.. && vitest run --dir packages/xai"
29
+ },
30
+ "dependencies": {
31
+ "@ai-sdk/xai": "^3.0.75",
32
+ "ai": "^6.0.142",
33
+ "zod": "^4.3.5"
34
+ },
35
+ "peerDependencies": {
36
+ "@standardagents/spec": "^0.10.0"
37
+ },
38
+ "devDependencies": {
39
+ "@standardagents/spec": "workspace:*",
40
+ "tsup": "^8.3.5",
41
+ "typescript": "^5.9.0"
42
+ },
43
+ "keywords": [
44
+ "standardagents",
45
+ "xai",
46
+ "grok",
47
+ "provider",
48
+ "ai",
49
+ "llm"
50
+ ],
51
+ "author": "FormKit Inc.",
52
+ "license": "UNLICENSED"
53
+ }