@ai-sdk/xai 1.2.1 → 1.2.3
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/CHANGELOG.md +16 -0
- package/dist/index.js +6 -87
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -90
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @ai-sdk/xai
|
|
2
2
|
|
|
3
|
+
## 1.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- a6b55cc: feat (providers/openai-compatible): add openai-compatible image model and use as xai image model base
|
|
8
|
+
- Updated dependencies [a6b55cc]
|
|
9
|
+
- @ai-sdk/openai-compatible@0.2.2
|
|
10
|
+
|
|
11
|
+
## 1.2.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [f10f0fa]
|
|
16
|
+
- @ai-sdk/provider-utils@2.2.1
|
|
17
|
+
- @ai-sdk/openai-compatible@0.2.1
|
|
18
|
+
|
|
3
19
|
## 1.2.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(src_exports);
|
|
|
28
28
|
// src/xai-provider.ts
|
|
29
29
|
var import_provider = require("@ai-sdk/provider");
|
|
30
30
|
var import_openai_compatible = require("@ai-sdk/openai-compatible");
|
|
31
|
-
var
|
|
31
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
32
32
|
|
|
33
33
|
// src/xai-chat-settings.ts
|
|
34
34
|
function supportsStructuredOutputs(modelId) {
|
|
@@ -42,88 +42,6 @@ var xaiErrorSchema = import_zod.z.object({
|
|
|
42
42
|
error: import_zod.z.string()
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
-
// src/xai-image-model.ts
|
|
46
|
-
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
47
|
-
var import_zod2 = require("zod");
|
|
48
|
-
var XaiImageModel = class {
|
|
49
|
-
constructor(modelId, settings, config) {
|
|
50
|
-
this.modelId = modelId;
|
|
51
|
-
this.settings = settings;
|
|
52
|
-
this.config = config;
|
|
53
|
-
this.specificationVersion = "v1";
|
|
54
|
-
}
|
|
55
|
-
get maxImagesPerCall() {
|
|
56
|
-
var _a;
|
|
57
|
-
return (_a = this.settings.maxImagesPerCall) != null ? _a : 10;
|
|
58
|
-
}
|
|
59
|
-
get provider() {
|
|
60
|
-
return this.config.provider;
|
|
61
|
-
}
|
|
62
|
-
async doGenerate({
|
|
63
|
-
prompt,
|
|
64
|
-
n,
|
|
65
|
-
size,
|
|
66
|
-
aspectRatio,
|
|
67
|
-
seed,
|
|
68
|
-
providerOptions,
|
|
69
|
-
headers,
|
|
70
|
-
abortSignal
|
|
71
|
-
}) {
|
|
72
|
-
var _a, _b, _c, _d;
|
|
73
|
-
const warnings = [];
|
|
74
|
-
if (aspectRatio != null) {
|
|
75
|
-
warnings.push({
|
|
76
|
-
type: "unsupported-setting",
|
|
77
|
-
setting: "aspectRatio",
|
|
78
|
-
details: "This model does not support aspect ratio. Use `size` instead."
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (seed != null) {
|
|
82
|
-
warnings.push({ type: "unsupported-setting", setting: "seed" });
|
|
83
|
-
}
|
|
84
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
85
|
-
const { value: response, responseHeaders } = await (0, import_provider_utils.postJsonToApi)({
|
|
86
|
-
url: this.config.url({
|
|
87
|
-
path: "/images/generations",
|
|
88
|
-
modelId: this.modelId
|
|
89
|
-
}),
|
|
90
|
-
headers: (0, import_provider_utils.combineHeaders)(this.config.headers(), headers),
|
|
91
|
-
body: {
|
|
92
|
-
model: this.modelId,
|
|
93
|
-
prompt,
|
|
94
|
-
n,
|
|
95
|
-
size,
|
|
96
|
-
...(_d = providerOptions.openai) != null ? _d : {},
|
|
97
|
-
response_format: "b64_json"
|
|
98
|
-
},
|
|
99
|
-
failedResponseHandler: (0, import_provider_utils.createJsonErrorResponseHandler)({
|
|
100
|
-
errorSchema: xaiErrorSchema,
|
|
101
|
-
errorToMessage: (data) => data.error
|
|
102
|
-
}),
|
|
103
|
-
successfulResponseHandler: (0, import_provider_utils.createJsonResponseHandler)(
|
|
104
|
-
openaiCompatibleImageResponseSchema
|
|
105
|
-
),
|
|
106
|
-
abortSignal,
|
|
107
|
-
fetch: this.config.fetch
|
|
108
|
-
});
|
|
109
|
-
return {
|
|
110
|
-
images: response.data.map((item) => {
|
|
111
|
-
const b64Data = item.b64_json;
|
|
112
|
-
return b64Data.startsWith("data:") && b64Data.includes(",") ? b64Data.split(",")[1] : b64Data;
|
|
113
|
-
}),
|
|
114
|
-
warnings,
|
|
115
|
-
response: {
|
|
116
|
-
timestamp: currentDate,
|
|
117
|
-
modelId: this.modelId,
|
|
118
|
-
headers: responseHeaders
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
var openaiCompatibleImageResponseSchema = import_zod2.z.object({
|
|
124
|
-
data: import_zod2.z.array(import_zod2.z.object({ b64_json: import_zod2.z.string() }))
|
|
125
|
-
});
|
|
126
|
-
|
|
127
45
|
// src/xai-provider.ts
|
|
128
46
|
var xaiErrorStructure = {
|
|
129
47
|
errorSchema: xaiErrorSchema,
|
|
@@ -131,11 +49,11 @@ var xaiErrorStructure = {
|
|
|
131
49
|
};
|
|
132
50
|
function createXai(options = {}) {
|
|
133
51
|
var _a;
|
|
134
|
-
const baseURL = (0,
|
|
52
|
+
const baseURL = (0, import_provider_utils.withoutTrailingSlash)(
|
|
135
53
|
(_a = options.baseURL) != null ? _a : "https://api.x.ai/v1"
|
|
136
54
|
);
|
|
137
55
|
const getHeaders = () => ({
|
|
138
|
-
Authorization: `Bearer ${(0,
|
|
56
|
+
Authorization: `Bearer ${(0, import_provider_utils.loadApiKey)({
|
|
139
57
|
apiKey: options.apiKey,
|
|
140
58
|
environmentVariableName: "XAI_API_KEY",
|
|
141
59
|
description: "xAI API key"
|
|
@@ -155,11 +73,12 @@ function createXai(options = {}) {
|
|
|
155
73
|
});
|
|
156
74
|
};
|
|
157
75
|
const createImageModel = (modelId, settings = {}) => {
|
|
158
|
-
return new
|
|
76
|
+
return new import_openai_compatible.OpenAICompatibleImageModel(modelId, settings, {
|
|
159
77
|
provider: "xai.image",
|
|
160
78
|
url: ({ path }) => `${baseURL}${path}`,
|
|
161
79
|
headers: getHeaders,
|
|
162
|
-
fetch: options.fetch
|
|
80
|
+
fetch: options.fetch,
|
|
81
|
+
errorStructure: xaiErrorStructure
|
|
163
82
|
});
|
|
164
83
|
};
|
|
165
84
|
const provider = (modelId, settings) => createLanguageModel(modelId, settings);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/xai-provider.ts","../src/xai-chat-settings.ts","../src/xai-error.ts","../src/xai-image-model.ts"],"sourcesContent":["export { createXai, xai } from './xai-provider';\nexport type { XaiProvider, XaiProviderSettings } from './xai-provider';\nexport type { XaiErrorData } from './xai-error';\n","import {\n ImageModelV1,\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n XaiChatModelId,\n XaiChatSettings,\n supportsStructuredOutputs,\n} from './xai-chat-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiErrorData, xaiErrorSchema } from './xai-error';\nimport { XaiImageModel } from './xai-image-model';\n\nconst xaiErrorStructure: ProviderErrorStructure<XaiErrorData> = {\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface XaiProvider extends ProviderV1 {\n /**\nCreates an Xai chat model for text generation.\n */\n (modelId: XaiChatModelId, settings?: XaiChatSettings): LanguageModelV1;\n\n /**\nCreates an Xai language model for text generation.\n */\n languageModel(\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates an Xai chat model for text generation.\n */\n chat: (\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ) => LanguageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n image(modelId: XaiImageModelId, settings?: XaiImageSettings): ImageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n imageModel(\n modelId: XaiImageModelId,\n settings?: XaiImageSettings,\n ): ImageModelV1;\n}\n\nexport interface XaiProviderSettings {\n /**\nBase URL for the xAI API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createXai(options: XaiProviderSettings = {}): XaiProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.x.ai/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'XAI_API_KEY',\n description: 'xAI API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (\n modelId: XaiChatModelId,\n settings: XaiChatSettings = {},\n ) => {\n const structuredOutputs = supportsStructuredOutputs(modelId);\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n provider: 'xai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: structuredOutputs ? 'json' : 'tool',\n errorStructure: xaiErrorStructure,\n supportsStructuredOutputs: structuredOutputs,\n });\n };\n\n const createImageModel = (\n modelId: XaiImageModelId,\n settings: XaiImageSettings = {},\n ) => {\n return new XaiImageModel(modelId, settings, {\n provider: 'xai.image',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: XaiChatModelId, settings?: XaiChatSettings) =>\n createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = createImageModel;\n provider.image = createImageModel;\n\n return provider;\n}\n\nexport const xai = createXai();\n","import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';\n\n// https://console.x.ai and see \"View models\"\nexport type XaiChatModelId =\n | 'grok-2-1212'\n | 'grok-2-vision-1212'\n | 'grok-beta'\n | 'grok-vision-beta'\n | (string & {});\n\nexport interface XaiChatSettings extends OpenAICompatibleChatSettings {}\n\nexport function supportsStructuredOutputs(modelId: XaiChatModelId) {\n return ['grok-2-1212', 'grok-2-vision-1212'].includes(modelId);\n}\n","import { z } from 'zod';\n\n// Add error schema and structure\nexport const xaiErrorSchema = z.object({\n code: z.string(),\n error: z.string(),\n});\n\nexport type XaiErrorData = z.infer<typeof xaiErrorSchema>;\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { xaiErrorSchema } from './xai-error';\n\nexport type XaiImageModelConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\nexport class XaiImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 10;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: XaiImageModelId,\n private readonly settings: XaiImageSettings,\n private readonly config: XaiImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n if (aspectRatio != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'aspectRatio',\n details:\n 'This model does not support aspect ratio. Use `size` instead.',\n });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported-setting', setting: 'seed' });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.config.url({\n path: '/images/generations',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n prompt,\n n,\n size,\n ...(providerOptions.openai ?? {}),\n response_format: 'b64_json',\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n openaiCompatibleImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => {\n const b64Data = item.b64_json;\n return b64Data.startsWith('data:') && b64Data.includes(',')\n ? b64Data.split(',')[1]\n : b64Data;\n }),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openaiCompatibleImageResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() })),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAKO;AACP,+BAGO;AACP,IAAAA,yBAIO;;;ACFA,SAAS,0BAA0B,SAAyB;AACjE,SAAO,CAAC,eAAe,oBAAoB,EAAE,SAAS,OAAO;AAC/D;;;ACdA,iBAAkB;AAGX,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,MAAM,aAAE,OAAO;AAAA,EACf,OAAO,aAAE,OAAO;AAClB,CAAC;;;ACLD,4BAMO;AACP,IAAAC,cAAkB;AAeX,IAAM,gBAAN,MAA4C;AAAA,EAWjD,YACW,SACQ,UACA,QACjB;AAHS;AACQ;AACA;AAbnB,SAAS,uBAAuB;AAAA,EAc7B;AAAA,EAZH,IAAI,mBAA2B;AA1BjC;AA2BI,YAAO,UAAK,SAAS,qBAAd,YAAkC;AAAA,EAC3C;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAQA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AAnDJ;AAoDI,UAAM,WAA2C,CAAC;AAElD,QAAI,eAAe,MAAM;AACvB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK,EAAE,MAAM,uBAAuB,SAAS,OAAO,CAAC;AAAA,IAChE;AAEA,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,EAAE,OAAO,UAAU,gBAAgB,IAAI,UAAM,qCAAc;AAAA,MAC/D,KAAK,KAAK,OAAO,IAAI;AAAA,QACnB,MAAM;AAAA,QACN,SAAS,KAAK;AAAA,MAChB,CAAC;AAAA,MACD,aAAS,sCAAe,KAAK,OAAO,QAAQ,GAAG,OAAO;AAAA,MACtD,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA,IAAI,qBAAgB,WAAhB,YAA0B,CAAC;AAAA,QAC/B,iBAAiB;AAAA,MACnB;AAAA,MACA,2BAAuB,sDAA+B;AAAA,QACpD,aAAa;AAAA,QACb,gBAAgB,UAAQ,KAAK;AAAA,MAC/B,CAAC;AAAA,MACD,+BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAED,WAAO;AAAA,MACL,QAAQ,SAAS,KAAK,IAAI,UAAQ;AAChC,cAAM,UAAU,KAAK;AACrB,eAAO,QAAQ,WAAW,OAAO,KAAK,QAAQ,SAAS,GAAG,IACtD,QAAQ,MAAM,GAAG,EAAE,CAAC,IACpB;AAAA,MACN,CAAC;AAAA,MACD;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,QACX,SAAS,KAAK;AAAA,QACd,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACF;AAIA,IAAM,sCAAsC,cAAE,OAAO;AAAA,EACnD,MAAM,cAAE,MAAM,cAAE,OAAO,EAAE,UAAU,cAAE,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;;;AHzFD,IAAM,oBAA0D;AAAA,EAC9D,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AA6DO,SAAS,UAAU,UAA+B,CAAC,GAAgB;AAzF1E;AA0FE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,mCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAC1B,SACA,WAA4B,CAAC,MAC1B;AACH,UAAM,oBAAoB,0BAA0B,OAAO;AAC3D,WAAO,IAAI,2DAAkC,SAAS,UAAU;AAAA,MAC9D,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,6BAA6B,oBAAoB,SAAS;AAAA,MAC1D,gBAAgB;AAAA,MAChB,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,CACvB,SACA,WAA6B,CAAC,MAC3B;AACH,WAAO,IAAI,cAAc,SAAS,UAAU;AAAA,MAC1C,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,SAAyB,aACzC,oBAAoB,SAAS,QAAQ;AAEvC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa;AACtB,WAAS,QAAQ;AAEjB,SAAO;AACT;AAEO,IAAM,MAAM,UAAU;","names":["import_provider_utils","import_zod"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/xai-provider.ts","../src/xai-chat-settings.ts","../src/xai-error.ts"],"sourcesContent":["export { createXai, xai } from './xai-provider';\nexport type { XaiProvider, XaiProviderSettings } from './xai-provider';\nexport type { XaiErrorData } from './xai-error';\n","import {\n ImageModelV1,\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleImageModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n XaiChatModelId,\n XaiChatSettings,\n supportsStructuredOutputs,\n} from './xai-chat-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiErrorData, xaiErrorSchema } from './xai-error';\n\nconst xaiErrorStructure: ProviderErrorStructure<XaiErrorData> = {\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface XaiProvider extends ProviderV1 {\n /**\nCreates an Xai chat model for text generation.\n */\n (modelId: XaiChatModelId, settings?: XaiChatSettings): LanguageModelV1;\n\n /**\nCreates an Xai language model for text generation.\n */\n languageModel(\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates an Xai chat model for text generation.\n */\n chat: (\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ) => LanguageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n image(modelId: XaiImageModelId, settings?: XaiImageSettings): ImageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n imageModel(\n modelId: XaiImageModelId,\n settings?: XaiImageSettings,\n ): ImageModelV1;\n}\n\nexport interface XaiProviderSettings {\n /**\nBase URL for the xAI API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createXai(options: XaiProviderSettings = {}): XaiProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.x.ai/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'XAI_API_KEY',\n description: 'xAI API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (\n modelId: XaiChatModelId,\n settings: XaiChatSettings = {},\n ) => {\n const structuredOutputs = supportsStructuredOutputs(modelId);\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n provider: 'xai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: structuredOutputs ? 'json' : 'tool',\n errorStructure: xaiErrorStructure,\n supportsStructuredOutputs: structuredOutputs,\n });\n };\n\n const createImageModel = (\n modelId: XaiImageModelId,\n settings: XaiImageSettings = {},\n ) => {\n return new OpenAICompatibleImageModel(modelId, settings, {\n provider: 'xai.image',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: xaiErrorStructure,\n });\n };\n\n const provider = (modelId: XaiChatModelId, settings?: XaiChatSettings) =>\n createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = createImageModel;\n provider.image = createImageModel;\n\n return provider;\n}\n\nexport const xai = createXai();\n","import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';\n\n// https://console.x.ai and see \"View models\"\nexport type XaiChatModelId =\n | 'grok-2-1212'\n | 'grok-2-vision-1212'\n | 'grok-beta'\n | 'grok-vision-beta'\n | (string & {});\n\nexport interface XaiChatSettings extends OpenAICompatibleChatSettings {}\n\nexport function supportsStructuredOutputs(modelId: XaiChatModelId) {\n return ['grok-2-1212', 'grok-2-vision-1212'].includes(modelId);\n}\n","import { z } from 'zod';\n\n// Add error schema and structure\nexport const xaiErrorSchema = z.object({\n code: z.string(),\n error: z.string(),\n});\n\nexport type XaiErrorData = z.infer<typeof xaiErrorSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,sBAKO;AACP,+BAIO;AACP,4BAIO;;;ACHA,SAAS,0BAA0B,SAAyB;AACjE,SAAO,CAAC,eAAe,oBAAoB,EAAE,SAAS,OAAO;AAC/D;;;ACdA,iBAAkB;AAGX,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,MAAM,aAAE,OAAO;AAAA,EACf,OAAO,aAAE,OAAO;AAClB,CAAC;;;AFmBD,IAAM,oBAA0D;AAAA,EAC9D,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AA6DO,SAAS,UAAU,UAA+B,CAAC,GAAgB;AAzF1E;AA0FE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,kCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAC1B,SACA,WAA4B,CAAC,MAC1B;AACH,UAAM,oBAAoB,0BAA0B,OAAO;AAC3D,WAAO,IAAI,2DAAkC,SAAS,UAAU;AAAA,MAC9D,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,6BAA6B,oBAAoB,SAAS;AAAA,MAC1D,gBAAgB;AAAA,MAChB,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,CACvB,SACA,WAA6B,CAAC,MAC3B;AACH,WAAO,IAAI,oDAA2B,SAAS,UAAU;AAAA,MACvD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,SAAyB,aACzC,oBAAoB,SAAS,QAAQ;AAEvC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iCAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa;AACtB,WAAS,QAAQ;AAEjB,SAAO;AACT;AAEO,IAAM,MAAM,UAAU;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -3,7 +3,8 @@ import {
|
|
|
3
3
|
NoSuchModelError
|
|
4
4
|
} from "@ai-sdk/provider";
|
|
5
5
|
import {
|
|
6
|
-
OpenAICompatibleChatLanguageModel
|
|
6
|
+
OpenAICompatibleChatLanguageModel,
|
|
7
|
+
OpenAICompatibleImageModel
|
|
7
8
|
} from "@ai-sdk/openai-compatible";
|
|
8
9
|
import {
|
|
9
10
|
loadApiKey,
|
|
@@ -22,93 +23,6 @@ var xaiErrorSchema = z.object({
|
|
|
22
23
|
error: z.string()
|
|
23
24
|
});
|
|
24
25
|
|
|
25
|
-
// src/xai-image-model.ts
|
|
26
|
-
import {
|
|
27
|
-
combineHeaders,
|
|
28
|
-
createJsonErrorResponseHandler,
|
|
29
|
-
createJsonResponseHandler,
|
|
30
|
-
postJsonToApi
|
|
31
|
-
} from "@ai-sdk/provider-utils";
|
|
32
|
-
import { z as z2 } from "zod";
|
|
33
|
-
var XaiImageModel = class {
|
|
34
|
-
constructor(modelId, settings, config) {
|
|
35
|
-
this.modelId = modelId;
|
|
36
|
-
this.settings = settings;
|
|
37
|
-
this.config = config;
|
|
38
|
-
this.specificationVersion = "v1";
|
|
39
|
-
}
|
|
40
|
-
get maxImagesPerCall() {
|
|
41
|
-
var _a;
|
|
42
|
-
return (_a = this.settings.maxImagesPerCall) != null ? _a : 10;
|
|
43
|
-
}
|
|
44
|
-
get provider() {
|
|
45
|
-
return this.config.provider;
|
|
46
|
-
}
|
|
47
|
-
async doGenerate({
|
|
48
|
-
prompt,
|
|
49
|
-
n,
|
|
50
|
-
size,
|
|
51
|
-
aspectRatio,
|
|
52
|
-
seed,
|
|
53
|
-
providerOptions,
|
|
54
|
-
headers,
|
|
55
|
-
abortSignal
|
|
56
|
-
}) {
|
|
57
|
-
var _a, _b, _c, _d;
|
|
58
|
-
const warnings = [];
|
|
59
|
-
if (aspectRatio != null) {
|
|
60
|
-
warnings.push({
|
|
61
|
-
type: "unsupported-setting",
|
|
62
|
-
setting: "aspectRatio",
|
|
63
|
-
details: "This model does not support aspect ratio. Use `size` instead."
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
if (seed != null) {
|
|
67
|
-
warnings.push({ type: "unsupported-setting", setting: "seed" });
|
|
68
|
-
}
|
|
69
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
70
|
-
const { value: response, responseHeaders } = await postJsonToApi({
|
|
71
|
-
url: this.config.url({
|
|
72
|
-
path: "/images/generations",
|
|
73
|
-
modelId: this.modelId
|
|
74
|
-
}),
|
|
75
|
-
headers: combineHeaders(this.config.headers(), headers),
|
|
76
|
-
body: {
|
|
77
|
-
model: this.modelId,
|
|
78
|
-
prompt,
|
|
79
|
-
n,
|
|
80
|
-
size,
|
|
81
|
-
...(_d = providerOptions.openai) != null ? _d : {},
|
|
82
|
-
response_format: "b64_json"
|
|
83
|
-
},
|
|
84
|
-
failedResponseHandler: createJsonErrorResponseHandler({
|
|
85
|
-
errorSchema: xaiErrorSchema,
|
|
86
|
-
errorToMessage: (data) => data.error
|
|
87
|
-
}),
|
|
88
|
-
successfulResponseHandler: createJsonResponseHandler(
|
|
89
|
-
openaiCompatibleImageResponseSchema
|
|
90
|
-
),
|
|
91
|
-
abortSignal,
|
|
92
|
-
fetch: this.config.fetch
|
|
93
|
-
});
|
|
94
|
-
return {
|
|
95
|
-
images: response.data.map((item) => {
|
|
96
|
-
const b64Data = item.b64_json;
|
|
97
|
-
return b64Data.startsWith("data:") && b64Data.includes(",") ? b64Data.split(",")[1] : b64Data;
|
|
98
|
-
}),
|
|
99
|
-
warnings,
|
|
100
|
-
response: {
|
|
101
|
-
timestamp: currentDate,
|
|
102
|
-
modelId: this.modelId,
|
|
103
|
-
headers: responseHeaders
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
var openaiCompatibleImageResponseSchema = z2.object({
|
|
109
|
-
data: z2.array(z2.object({ b64_json: z2.string() }))
|
|
110
|
-
});
|
|
111
|
-
|
|
112
26
|
// src/xai-provider.ts
|
|
113
27
|
var xaiErrorStructure = {
|
|
114
28
|
errorSchema: xaiErrorSchema,
|
|
@@ -140,11 +54,12 @@ function createXai(options = {}) {
|
|
|
140
54
|
});
|
|
141
55
|
};
|
|
142
56
|
const createImageModel = (modelId, settings = {}) => {
|
|
143
|
-
return new
|
|
57
|
+
return new OpenAICompatibleImageModel(modelId, settings, {
|
|
144
58
|
provider: "xai.image",
|
|
145
59
|
url: ({ path }) => `${baseURL}${path}`,
|
|
146
60
|
headers: getHeaders,
|
|
147
|
-
fetch: options.fetch
|
|
61
|
+
fetch: options.fetch,
|
|
62
|
+
errorStructure: xaiErrorStructure
|
|
148
63
|
});
|
|
149
64
|
};
|
|
150
65
|
const provider = (modelId, settings) => createLanguageModel(modelId, settings);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/xai-provider.ts","../src/xai-chat-settings.ts","../src/xai-error.ts","../src/xai-image-model.ts"],"sourcesContent":["import {\n ImageModelV1,\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n XaiChatModelId,\n XaiChatSettings,\n supportsStructuredOutputs,\n} from './xai-chat-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiErrorData, xaiErrorSchema } from './xai-error';\nimport { XaiImageModel } from './xai-image-model';\n\nconst xaiErrorStructure: ProviderErrorStructure<XaiErrorData> = {\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface XaiProvider extends ProviderV1 {\n /**\nCreates an Xai chat model for text generation.\n */\n (modelId: XaiChatModelId, settings?: XaiChatSettings): LanguageModelV1;\n\n /**\nCreates an Xai language model for text generation.\n */\n languageModel(\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates an Xai chat model for text generation.\n */\n chat: (\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ) => LanguageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n image(modelId: XaiImageModelId, settings?: XaiImageSettings): ImageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n imageModel(\n modelId: XaiImageModelId,\n settings?: XaiImageSettings,\n ): ImageModelV1;\n}\n\nexport interface XaiProviderSettings {\n /**\nBase URL for the xAI API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createXai(options: XaiProviderSettings = {}): XaiProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.x.ai/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'XAI_API_KEY',\n description: 'xAI API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (\n modelId: XaiChatModelId,\n settings: XaiChatSettings = {},\n ) => {\n const structuredOutputs = supportsStructuredOutputs(modelId);\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n provider: 'xai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: structuredOutputs ? 'json' : 'tool',\n errorStructure: xaiErrorStructure,\n supportsStructuredOutputs: structuredOutputs,\n });\n };\n\n const createImageModel = (\n modelId: XaiImageModelId,\n settings: XaiImageSettings = {},\n ) => {\n return new XaiImageModel(modelId, settings, {\n provider: 'xai.image',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n };\n\n const provider = (modelId: XaiChatModelId, settings?: XaiChatSettings) =>\n createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = createImageModel;\n provider.image = createImageModel;\n\n return provider;\n}\n\nexport const xai = createXai();\n","import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';\n\n// https://console.x.ai and see \"View models\"\nexport type XaiChatModelId =\n | 'grok-2-1212'\n | 'grok-2-vision-1212'\n | 'grok-beta'\n | 'grok-vision-beta'\n | (string & {});\n\nexport interface XaiChatSettings extends OpenAICompatibleChatSettings {}\n\nexport function supportsStructuredOutputs(modelId: XaiChatModelId) {\n return ['grok-2-1212', 'grok-2-vision-1212'].includes(modelId);\n}\n","import { z } from 'zod';\n\n// Add error schema and structure\nexport const xaiErrorSchema = z.object({\n code: z.string(),\n error: z.string(),\n});\n\nexport type XaiErrorData = z.infer<typeof xaiErrorSchema>;\n","import { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n FetchFunction,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { xaiErrorSchema } from './xai-error';\n\nexport type XaiImageModelConfig = {\n provider: string;\n headers: () => Record<string, string | undefined>;\n url: (options: { modelId: string; path: string }) => string;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n};\n\nexport class XaiImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 10;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: XaiImageModelId,\n private readonly settings: XaiImageSettings,\n private readonly config: XaiImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n if (aspectRatio != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'aspectRatio',\n details:\n 'This model does not support aspect ratio. Use `size` instead.',\n });\n }\n\n if (seed != null) {\n warnings.push({ type: 'unsupported-setting', setting: 'seed' });\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: this.config.url({\n path: '/images/generations',\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n prompt,\n n,\n size,\n ...(providerOptions.openai ?? {}),\n response_format: 'b64_json',\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n }),\n successfulResponseHandler: createJsonResponseHandler(\n openaiCompatibleImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: response.data.map(item => {\n const b64Data = item.b64_json;\n return b64Data.startsWith('data:') && b64Data.includes(',')\n ? b64Data.split(',')[1]\n : b64Data;\n }),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n\n// minimal version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst openaiCompatibleImageResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() })),\n});\n"],"mappings":"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","names":["z","z"]}
|
|
1
|
+
{"version":3,"sources":["../src/xai-provider.ts","../src/xai-chat-settings.ts","../src/xai-error.ts"],"sourcesContent":["import {\n ImageModelV1,\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleImageModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n XaiChatModelId,\n XaiChatSettings,\n supportsStructuredOutputs,\n} from './xai-chat-settings';\nimport { XaiImageSettings } from './xai-image-settings';\nimport { XaiImageModelId } from './xai-image-settings';\nimport { XaiErrorData, xaiErrorSchema } from './xai-error';\n\nconst xaiErrorStructure: ProviderErrorStructure<XaiErrorData> = {\n errorSchema: xaiErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface XaiProvider extends ProviderV1 {\n /**\nCreates an Xai chat model for text generation.\n */\n (modelId: XaiChatModelId, settings?: XaiChatSettings): LanguageModelV1;\n\n /**\nCreates an Xai language model for text generation.\n */\n languageModel(\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates an Xai chat model for text generation.\n */\n chat: (\n modelId: XaiChatModelId,\n settings?: XaiChatSettings,\n ) => LanguageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n image(modelId: XaiImageModelId, settings?: XaiImageSettings): ImageModelV1;\n\n /**\nCreates an Xai image model for image generation.\n */\n imageModel(\n modelId: XaiImageModelId,\n settings?: XaiImageSettings,\n ): ImageModelV1;\n}\n\nexport interface XaiProviderSettings {\n /**\nBase URL for the xAI API calls.\n */\n baseURL?: string;\n\n /**\nAPI key for authenticating requests.\n */\n apiKey?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport function createXai(options: XaiProviderSettings = {}): XaiProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.x.ai/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'XAI_API_KEY',\n description: 'xAI API key',\n })}`,\n ...options.headers,\n });\n\n const createLanguageModel = (\n modelId: XaiChatModelId,\n settings: XaiChatSettings = {},\n ) => {\n const structuredOutputs = supportsStructuredOutputs(modelId);\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n provider: 'xai.chat',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n defaultObjectGenerationMode: structuredOutputs ? 'json' : 'tool',\n errorStructure: xaiErrorStructure,\n supportsStructuredOutputs: structuredOutputs,\n });\n };\n\n const createImageModel = (\n modelId: XaiImageModelId,\n settings: XaiImageSettings = {},\n ) => {\n return new OpenAICompatibleImageModel(modelId, settings, {\n provider: 'xai.image',\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: xaiErrorStructure,\n });\n };\n\n const provider = (modelId: XaiChatModelId, settings?: XaiChatSettings) =>\n createLanguageModel(modelId, settings);\n\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n provider.imageModel = createImageModel;\n provider.image = createImageModel;\n\n return provider;\n}\n\nexport const xai = createXai();\n","import { OpenAICompatibleChatSettings } from '@ai-sdk/openai-compatible';\n\n// https://console.x.ai and see \"View models\"\nexport type XaiChatModelId =\n | 'grok-2-1212'\n | 'grok-2-vision-1212'\n | 'grok-beta'\n | 'grok-vision-beta'\n | (string & {});\n\nexport interface XaiChatSettings extends OpenAICompatibleChatSettings {}\n\nexport function supportsStructuredOutputs(modelId: XaiChatModelId) {\n return ['grok-2-1212', 'grok-2-vision-1212'].includes(modelId);\n}\n","import { z } from 'zod';\n\n// Add error schema and structure\nexport const xaiErrorSchema = z.object({\n code: z.string(),\n error: z.string(),\n});\n\nexport type XaiErrorData = z.infer<typeof xaiErrorSchema>;\n"],"mappings":";AAAA;AAAA,EAGE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;;;ACHA,SAAS,0BAA0B,SAAyB;AACjE,SAAO,CAAC,eAAe,oBAAoB,EAAE,SAAS,OAAO;AAC/D;;;ACdA,SAAS,SAAS;AAGX,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO;AAClB,CAAC;;;AFmBD,IAAM,oBAA0D;AAAA,EAC9D,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AA6DO,SAAS,UAAU,UAA+B,CAAC,GAAgB;AAzF1E;AA0FE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAEA,QAAM,sBAAsB,CAC1B,SACA,WAA4B,CAAC,MAC1B;AACH,UAAM,oBAAoB,0BAA0B,OAAO;AAC3D,WAAO,IAAI,kCAAkC,SAAS,UAAU;AAAA,MAC9D,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,6BAA6B,oBAAoB,SAAS;AAAA,MAC1D,gBAAgB;AAAA,MAChB,2BAA2B;AAAA,IAC7B,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,CACvB,SACA,WAA6B,CAAC,MAC3B;AACH,WAAO,IAAI,2BAA2B,SAAS,UAAU;AAAA,MACvD,UAAU;AAAA,MACV,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,MACpC,SAAS;AAAA,MACT,OAAO,QAAQ;AAAA,MACf,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,WAAW,CAAC,SAAyB,aACzC,oBAAoB,SAAS,QAAQ;AAEvC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AACA,WAAS,aAAa;AACtB,WAAS,QAAQ;AAEjB,SAAO;AACT;AAEO,IAAM,MAAM,UAAU;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/xai",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ai-sdk/openai-compatible": "0.2.
|
|
22
|
+
"@ai-sdk/openai-compatible": "0.2.2",
|
|
23
23
|
"@ai-sdk/provider": "1.1.0",
|
|
24
|
-
"@ai-sdk/provider-utils": "2.2.
|
|
24
|
+
"@ai-sdk/provider-utils": "2.2.1"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "20.17.24",
|