@zhivex-ai/xai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +425 -0
- package/dist/index.js.map +1 -0
- package/package.json +48 -0
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# @zhivex-ai/xai
|
|
2
|
+
|
|
3
|
+
xAI Grok adapter for Zhivex AI SDK. It uses the xAI Responses API by default and supports Chat Completions as an explicit compatibility mode.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add @zhivex-ai/xai
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { generateText } from "@zhivex-ai/core";
|
|
15
|
+
import { createXAI, xAIXSearchTool, xAIWebSearchTool } from "@zhivex-ai/xai";
|
|
16
|
+
|
|
17
|
+
const xai = createXAI({
|
|
18
|
+
apiKey: process.env.XAI_API_KEY
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const result = await generateText({
|
|
22
|
+
model: xai("grok-4.5"),
|
|
23
|
+
prompt: "Summarize the latest xAI release with sources.",
|
|
24
|
+
reasoning: { effort: "medium" },
|
|
25
|
+
providerOptions: { conversationId: "release-research" },
|
|
26
|
+
tools: {
|
|
27
|
+
web: xAIWebSearchTool(),
|
|
28
|
+
x: xAIXSearchTool()
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
console.log(result.text);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The adapter defaults to `https://api.x.ai/v1` and reads `XAI_API_KEY` when no API key is passed explicitly.
|
|
36
|
+
|
|
37
|
+
## Supported Grok 4.5 features
|
|
38
|
+
|
|
39
|
+
- text and image input
|
|
40
|
+
- streaming
|
|
41
|
+
- function calling and tool choice
|
|
42
|
+
- native structured output
|
|
43
|
+
- `low`, `medium`, and `high` reasoning effort
|
|
44
|
+
- hosted Web Search, X Search, code execution, and Collections file search
|
|
45
|
+
- Files API attachments
|
|
46
|
+
- prompt caching through `conversationId` or `prompt_cache_key`
|
|
47
|
+
- Responses conversation continuity and encrypted reasoning preservation when `store: false`
|
|
48
|
+
|
|
49
|
+
Use `providerOptions: { apiMode: "chat" }` only when Chat Completions compatibility is required. In Chat mode, `conversationId` is sent through the `x-grok-conv-id` header.
|
|
50
|
+
|
|
51
|
+
Repository and full documentation:
|
|
52
|
+
|
|
53
|
+
- <https://github.com/Zhivex/zhivex-ai-sdk>
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type CallableProviderAdapter, type FilesClient, type JsonValue, type ProviderAdapter } from "@zhivex-ai/core";
|
|
2
|
+
export interface XAIProviderOptions {
|
|
3
|
+
apiKey?: string;
|
|
4
|
+
baseURL?: string;
|
|
5
|
+
headers?: Record<string, string>;
|
|
6
|
+
fetch?: typeof globalThis.fetch;
|
|
7
|
+
}
|
|
8
|
+
export interface XAILanguageModelOptions {
|
|
9
|
+
apiMode?: "chat" | "responses";
|
|
10
|
+
headers?: Record<string, string>;
|
|
11
|
+
conversationId?: string;
|
|
12
|
+
prompt_cache_key?: string;
|
|
13
|
+
include?: string[];
|
|
14
|
+
store?: boolean;
|
|
15
|
+
parallel_tool_calls?: boolean;
|
|
16
|
+
top_p?: number;
|
|
17
|
+
frequency_penalty?: number;
|
|
18
|
+
presence_penalty?: number;
|
|
19
|
+
stop?: string | string[];
|
|
20
|
+
seed?: number;
|
|
21
|
+
user?: string;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
export interface XAIFileOptions {
|
|
25
|
+
purpose?: string;
|
|
26
|
+
expires_after?: number;
|
|
27
|
+
order?: "asc" | "desc";
|
|
28
|
+
sort_by?: "created_at" | "filename" | "size";
|
|
29
|
+
filter?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
export interface XAIWebSearchToolConfig {
|
|
33
|
+
allowed_domains?: string[];
|
|
34
|
+
excluded_domains?: string[];
|
|
35
|
+
enable_image_understanding?: boolean;
|
|
36
|
+
enable_image_search?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface XAIXSearchToolConfig {
|
|
39
|
+
allowed_x_handles?: string[];
|
|
40
|
+
excluded_x_handles?: string[];
|
|
41
|
+
from_date?: string;
|
|
42
|
+
to_date?: string;
|
|
43
|
+
enable_image_understanding?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface XAICodeExecutionToolConfig {
|
|
46
|
+
[key: string]: JsonValue | undefined;
|
|
47
|
+
}
|
|
48
|
+
export interface XAIFileSearchToolConfig {
|
|
49
|
+
vector_store_ids: string[];
|
|
50
|
+
max_num_results?: number;
|
|
51
|
+
filters?: Record<string, JsonValue>;
|
|
52
|
+
}
|
|
53
|
+
export declare const xAIWebSearchTool: (config?: XAIWebSearchToolConfig) => import("@zhivex-ai/core").HostedToolDefinition<JsonValue>;
|
|
54
|
+
export declare const xAIXSearchTool: (config?: XAIXSearchToolConfig) => import("@zhivex-ai/core").HostedToolDefinition<JsonValue>;
|
|
55
|
+
export declare const xAICodeExecutionTool: (config?: XAICodeExecutionToolConfig) => import("@zhivex-ai/core").HostedToolDefinition<JsonValue>;
|
|
56
|
+
export declare const xAIFileSearchTool: (config: XAIFileSearchToolConfig) => import("@zhivex-ai/core").HostedToolDefinition<JsonValue>;
|
|
57
|
+
export declare const xAIFilePart: (fileId: string, mediaType?: string, filename?: string) => {
|
|
58
|
+
type: "file";
|
|
59
|
+
data: string;
|
|
60
|
+
mediaType: string;
|
|
61
|
+
filename: string | undefined;
|
|
62
|
+
};
|
|
63
|
+
export declare const createXAI: (options?: XAIProviderOptions) => CallableProviderAdapter & ProviderAdapter & {
|
|
64
|
+
files: FilesClient<XAIFileOptions>;
|
|
65
|
+
rawFetch: typeof globalThis.fetch;
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
import { ConfigurationError, ProviderHTTPError, UnsupportedFeatureError, createProviderAdapter, hostedTool, isHostedToolDefinition, normalizeMessages, withRetry, withTimeoutSignal } from "@zhivex-ai/core";
|
|
2
|
+
import { createOpenAI } from "@zhivex-ai/openai";
|
|
3
|
+
const baseCapabilities = {
|
|
4
|
+
streaming: true,
|
|
5
|
+
tools: true,
|
|
6
|
+
structuredOutput: true,
|
|
7
|
+
jsonMode: true,
|
|
8
|
+
toolChoice: true,
|
|
9
|
+
parallelToolCalls: true,
|
|
10
|
+
vision: true,
|
|
11
|
+
files: true,
|
|
12
|
+
audioInput: false,
|
|
13
|
+
audioOutput: false,
|
|
14
|
+
embeddings: false,
|
|
15
|
+
fileSearch: true,
|
|
16
|
+
contextCaching: true,
|
|
17
|
+
reasoning: true,
|
|
18
|
+
webSearch: true,
|
|
19
|
+
agentCapabilities: {
|
|
20
|
+
supportTier: "tier-b",
|
|
21
|
+
toolChoiceNone: true,
|
|
22
|
+
approvalRequests: false,
|
|
23
|
+
hostedWebSearch: true,
|
|
24
|
+
hostedFileSearch: true,
|
|
25
|
+
remoteMcp: false,
|
|
26
|
+
computerUse: false,
|
|
27
|
+
codeExecution: true,
|
|
28
|
+
toolsets: false
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const normalizedModelId = (modelId) => modelId.trim().toLowerCase();
|
|
32
|
+
const isGrok45 = (modelId) => /^grok-4\.5(?:[-@]|$)/.test(normalizedModelId(modelId));
|
|
33
|
+
const isGrok420MultiAgent = (modelId) => /^grok-4\.20(?:-\d{4})?-multi-agent(?:[-@]|$)/.test(normalizedModelId(modelId));
|
|
34
|
+
const isNonReasoningModel = (modelId) => /non-reasoning/.test(normalizedModelId(modelId));
|
|
35
|
+
const modelCapabilities = (modelId) => ({
|
|
36
|
+
...baseCapabilities,
|
|
37
|
+
reasoning: !isNonReasoningModel(modelId),
|
|
38
|
+
reasoningEfforts: isNonReasoningModel(modelId)
|
|
39
|
+
? undefined
|
|
40
|
+
: isGrok45(modelId)
|
|
41
|
+
? ["low", "medium", "high"]
|
|
42
|
+
: isGrok420MultiAgent(modelId)
|
|
43
|
+
? ["low", "medium", "high", "xhigh"]
|
|
44
|
+
: ["none", "low", "medium", "high"]
|
|
45
|
+
});
|
|
46
|
+
const jsonHeaders = (apiKey) => ({
|
|
47
|
+
"content-type": "application/json",
|
|
48
|
+
authorization: `Bearer ${apiKey}`
|
|
49
|
+
});
|
|
50
|
+
const parseJson = async (response) => {
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const body = await response.text();
|
|
53
|
+
throw new ProviderHTTPError(`xAI request failed with status ${response.status}.`, response.status, {
|
|
54
|
+
responseBody: body
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return response.json();
|
|
58
|
+
};
|
|
59
|
+
const remapHTTPError = (error) => {
|
|
60
|
+
if (error instanceof ProviderHTTPError) {
|
|
61
|
+
throw new ProviderHTTPError(`xAI request failed with status ${error.status}.`, error.status, {
|
|
62
|
+
cause: error,
|
|
63
|
+
responseBody: error.responseBody
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
};
|
|
68
|
+
const remapMessageProvider = (message, from, to) => ({
|
|
69
|
+
...message,
|
|
70
|
+
parts: message.parts.map((part) => part.type === "provider-data" && part.provider === from
|
|
71
|
+
? { ...part, provider: to }
|
|
72
|
+
: part)
|
|
73
|
+
});
|
|
74
|
+
const remapToolsForOpenAITransport = (tools) => tools
|
|
75
|
+
? Object.fromEntries(Object.entries(tools).map(([name, definition]) => [
|
|
76
|
+
name,
|
|
77
|
+
isHostedToolDefinition(definition) && definition.provider === "xai"
|
|
78
|
+
? { ...definition, provider: "openai" }
|
|
79
|
+
: definition
|
|
80
|
+
]))
|
|
81
|
+
: undefined;
|
|
82
|
+
const validateXAIInput = (modelId, input) => {
|
|
83
|
+
const reasoning = input.reasoning;
|
|
84
|
+
if (reasoning?.budgetTokens !== undefined) {
|
|
85
|
+
throw new UnsupportedFeatureError('Provider "xai" does not support "reasoning.budgetTokens".');
|
|
86
|
+
}
|
|
87
|
+
if (reasoning?.mode !== undefined || reasoning?.context !== undefined) {
|
|
88
|
+
throw new UnsupportedFeatureError('Provider "xai" does not support "reasoning.mode" or "reasoning.context".');
|
|
89
|
+
}
|
|
90
|
+
if (reasoning?.includeThoughts) {
|
|
91
|
+
throw new UnsupportedFeatureError('Provider "xai" does not expose reasoning through "includeThoughts"; use providerOptions.include with encrypted reasoning when required.');
|
|
92
|
+
}
|
|
93
|
+
if (isNonReasoningModel(modelId) && reasoning) {
|
|
94
|
+
throw new UnsupportedFeatureError(`Provider "xai" model "${modelId}" does not support reasoning.`);
|
|
95
|
+
}
|
|
96
|
+
const effort = reasoning?.effort;
|
|
97
|
+
const supportedEfforts = modelCapabilities(modelId).reasoningEfforts;
|
|
98
|
+
if (effort && supportedEfforts && !supportedEfforts.includes(effort)) {
|
|
99
|
+
throw new UnsupportedFeatureError(`Provider "xai" model "${modelId}" does not support reasoning effort "${effort}". Supported efforts: ${supportedEfforts.join(", ")}.`);
|
|
100
|
+
}
|
|
101
|
+
const providerOptions = input.providerOptions;
|
|
102
|
+
if (providerOptions?.apiMode === "chat" &&
|
|
103
|
+
Object.values(input.tools ?? {}).some(isHostedToolDefinition)) {
|
|
104
|
+
throw new UnsupportedFeatureError('Provider "xai" supports hosted tools through the Responses API only.');
|
|
105
|
+
}
|
|
106
|
+
const reasoningIsActive = Boolean(reasoning) || isGrok45(modelId);
|
|
107
|
+
if (reasoningIsActive &&
|
|
108
|
+
(providerOptions?.presence_penalty !== undefined ||
|
|
109
|
+
providerOptions?.frequency_penalty !== undefined ||
|
|
110
|
+
providerOptions?.stop !== undefined)) {
|
|
111
|
+
throw new UnsupportedFeatureError(`Provider "xai" model "${modelId}" does not support presence_penalty, frequency_penalty, or stop while reasoning is active.`);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const resolveTransportOptions = (options, defaultHeaders) => {
|
|
115
|
+
const { conversationId, headers, apiMode = "responses", prompt_cache_key: promptCacheKey, ...bodyOptions } = options ?? {};
|
|
116
|
+
const mergedHeaders = { ...defaultHeaders, ...headers };
|
|
117
|
+
if (apiMode === "chat") {
|
|
118
|
+
const cacheKey = conversationId ?? promptCacheKey;
|
|
119
|
+
if (cacheKey) {
|
|
120
|
+
mergedHeaders["x-grok-conv-id"] = cacheKey;
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
...bodyOptions,
|
|
124
|
+
apiMode,
|
|
125
|
+
headers: mergedHeaders
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
const include = bodyOptions.store === false
|
|
129
|
+
? [...new Set([...(Array.isArray(bodyOptions.include) ? bodyOptions.include : []), "reasoning.encrypted_content"])]
|
|
130
|
+
: bodyOptions.include;
|
|
131
|
+
return {
|
|
132
|
+
...bodyOptions,
|
|
133
|
+
apiMode,
|
|
134
|
+
headers: mergedHeaders,
|
|
135
|
+
...(include ? { include } : {}),
|
|
136
|
+
...(promptCacheKey ?? conversationId ? { prompt_cache_key: promptCacheKey ?? conversationId } : {})
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
const prepareTransportInput = (input, defaultHeaders) => ({
|
|
140
|
+
...input,
|
|
141
|
+
messages: input.messages.map((message) => remapMessageProvider(message, "xai", "openai")),
|
|
142
|
+
tools: remapToolsForOpenAITransport(input.tools),
|
|
143
|
+
providerOptions: resolveTransportOptions(input.providerOptions, defaultHeaders)
|
|
144
|
+
});
|
|
145
|
+
const remapGenerateResult = (result) => ({
|
|
146
|
+
...result,
|
|
147
|
+
...(result.message ? { message: remapMessageProvider(result.message, "openai", "xai") } : {}),
|
|
148
|
+
...(result.messages
|
|
149
|
+
? { messages: result.messages.map((message) => remapMessageProvider(message, "openai", "xai")) }
|
|
150
|
+
: {})
|
|
151
|
+
});
|
|
152
|
+
class XAILanguageModel {
|
|
153
|
+
modelId;
|
|
154
|
+
delegate;
|
|
155
|
+
defaultHeaders;
|
|
156
|
+
provider = "xai";
|
|
157
|
+
capabilities;
|
|
158
|
+
constructor(modelId, delegate, defaultHeaders) {
|
|
159
|
+
this.modelId = modelId;
|
|
160
|
+
this.delegate = delegate;
|
|
161
|
+
this.defaultHeaders = defaultHeaders;
|
|
162
|
+
this.capabilities = modelCapabilities(modelId);
|
|
163
|
+
}
|
|
164
|
+
async generate(input) {
|
|
165
|
+
validateXAIInput(this.modelId, input);
|
|
166
|
+
try {
|
|
167
|
+
return remapGenerateResult(await this.delegate.generate(prepareTransportInput(input, this.defaultHeaders)));
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return remapHTTPError(error);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async stream(input) {
|
|
174
|
+
validateXAIInput(this.modelId, input);
|
|
175
|
+
if (!this.delegate.stream) {
|
|
176
|
+
throw new UnsupportedFeatureError('Provider "xai" transport does not support streaming.');
|
|
177
|
+
}
|
|
178
|
+
let stream;
|
|
179
|
+
try {
|
|
180
|
+
stream = await this.delegate.stream(prepareTransportInput(input, this.defaultHeaders));
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return remapHTTPError(error);
|
|
184
|
+
}
|
|
185
|
+
return (async function* () {
|
|
186
|
+
for await (const event of stream) {
|
|
187
|
+
if (event.type === "provider-data" && event.provider === "openai") {
|
|
188
|
+
yield { ...event, provider: "xai" };
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
yield event;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
})();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const extractSources = (value) => {
|
|
198
|
+
const sources = [];
|
|
199
|
+
const visit = (node) => {
|
|
200
|
+
if (!node || typeof node !== "object")
|
|
201
|
+
return;
|
|
202
|
+
const record = node;
|
|
203
|
+
if (typeof record.url === "string") {
|
|
204
|
+
sources.push({
|
|
205
|
+
title: typeof record.title === "string" ? record.title : undefined,
|
|
206
|
+
url: record.url,
|
|
207
|
+
snippet: typeof record.snippet === "string" ? record.snippet : undefined,
|
|
208
|
+
providerMetadata: record
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
for (const nested of Object.values(record)) {
|
|
212
|
+
if (Array.isArray(nested))
|
|
213
|
+
nested.forEach(visit);
|
|
214
|
+
else if (nested && typeof nested === "object")
|
|
215
|
+
visit(nested);
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
visit(value);
|
|
219
|
+
return sources.filter((source, index, all) => all.findIndex((candidate) => candidate.url === source.url) === index);
|
|
220
|
+
};
|
|
221
|
+
class XAIGroundedLanguageModel {
|
|
222
|
+
modelId;
|
|
223
|
+
languageModel;
|
|
224
|
+
provider = "xai";
|
|
225
|
+
capabilities;
|
|
226
|
+
constructor(modelId, languageModel) {
|
|
227
|
+
this.modelId = modelId;
|
|
228
|
+
this.languageModel = languageModel;
|
|
229
|
+
this.capabilities = languageModel.capabilities;
|
|
230
|
+
}
|
|
231
|
+
async generate(input) {
|
|
232
|
+
const result = await this.languageModel.generate({
|
|
233
|
+
...input,
|
|
234
|
+
messages: normalizeMessages(input),
|
|
235
|
+
tools: { webSearch: xAIWebSearchTool() }
|
|
236
|
+
});
|
|
237
|
+
return {
|
|
238
|
+
text: result.text ?? "",
|
|
239
|
+
sources: extractSources(result.rawResponse),
|
|
240
|
+
finishReason: result.finishReason,
|
|
241
|
+
providerFinishReason: result.providerFinishReason,
|
|
242
|
+
usage: result.usage,
|
|
243
|
+
rawResponse: result.rawResponse
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const blobFromData = (data, mediaType) => {
|
|
248
|
+
if (data instanceof Blob)
|
|
249
|
+
return data;
|
|
250
|
+
if (typeof data === "string")
|
|
251
|
+
return new Blob([Buffer.from(data, "base64")], { type: mediaType });
|
|
252
|
+
return new Blob([data instanceof Uint8Array ? data.buffer : data], { type: mediaType });
|
|
253
|
+
};
|
|
254
|
+
const normalizeUploadedFile = (json) => ({
|
|
255
|
+
name: json.id ?? json.name,
|
|
256
|
+
uri: json.id ?? json.uri,
|
|
257
|
+
mimeType: json.mime_type ?? json.mimeType,
|
|
258
|
+
sizeBytes: json.bytes ?? json.size_bytes ?? json.sizeBytes,
|
|
259
|
+
state: json.status ?? json.state,
|
|
260
|
+
displayName: json.filename ?? json.display_name ?? json.displayName,
|
|
261
|
+
rawResponse: json,
|
|
262
|
+
providerMetadata: json
|
|
263
|
+
});
|
|
264
|
+
const appendQuery = (url, query) => {
|
|
265
|
+
const parsed = new URL(url);
|
|
266
|
+
for (const [key, value] of Object.entries(query)) {
|
|
267
|
+
if (value !== undefined)
|
|
268
|
+
parsed.searchParams.set(key, String(value));
|
|
269
|
+
}
|
|
270
|
+
return parsed.toString();
|
|
271
|
+
};
|
|
272
|
+
class XAIFilesClient {
|
|
273
|
+
apiKey;
|
|
274
|
+
baseURL;
|
|
275
|
+
fetcher;
|
|
276
|
+
constructor(apiKey, baseURL, fetcher) {
|
|
277
|
+
this.apiKey = apiKey;
|
|
278
|
+
this.baseURL = baseURL;
|
|
279
|
+
this.fetcher = fetcher;
|
|
280
|
+
}
|
|
281
|
+
async upload(input) {
|
|
282
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
283
|
+
const form = new FormData();
|
|
284
|
+
const options = input.providerOptions ?? {};
|
|
285
|
+
if (options.expires_after !== undefined &&
|
|
286
|
+
(!Number.isInteger(options.expires_after) || options.expires_after < 3_600 || options.expires_after > 2_592_000)) {
|
|
287
|
+
throw new UnsupportedFeatureError('Provider "xai" requires files.expires_after to be an integer between 3600 and 2592000 seconds.');
|
|
288
|
+
}
|
|
289
|
+
if (options.expires_after !== undefined)
|
|
290
|
+
form.set("expires_after", String(options.expires_after));
|
|
291
|
+
form.set("purpose", options.purpose ?? "assistants");
|
|
292
|
+
for (const [key, value] of Object.entries(options)) {
|
|
293
|
+
if (!["expires_after", "purpose", "order", "sort_by", "filter"].includes(key) && value !== undefined) {
|
|
294
|
+
form.set(key, typeof value === "string" ? value : JSON.stringify(value));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const filename = input.filename ?? input.displayName ?? input.name ?? "file";
|
|
298
|
+
form.set("file", blobFromData(input.data, input.mediaType), filename);
|
|
299
|
+
try {
|
|
300
|
+
const response = await withRetry(() => this.fetcher(`${this.baseURL}/files`, {
|
|
301
|
+
method: "POST",
|
|
302
|
+
headers: { authorization: `Bearer ${this.apiKey}` },
|
|
303
|
+
signal,
|
|
304
|
+
body: form
|
|
305
|
+
}), input);
|
|
306
|
+
return normalizeUploadedFile(await parseJson(response));
|
|
307
|
+
}
|
|
308
|
+
finally {
|
|
309
|
+
cleanup();
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
async get(input) {
|
|
313
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
314
|
+
try {
|
|
315
|
+
const response = await withRetry(() => this.fetcher(`${this.baseURL}/files/${input.name}`, {
|
|
316
|
+
method: "GET",
|
|
317
|
+
headers: jsonHeaders(this.apiKey),
|
|
318
|
+
signal
|
|
319
|
+
}), input);
|
|
320
|
+
return normalizeUploadedFile(await parseJson(response));
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
cleanup();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
async list(input = {}) {
|
|
327
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
328
|
+
const options = input.providerOptions ?? {};
|
|
329
|
+
try {
|
|
330
|
+
const response = await withRetry(() => this.fetcher(appendQuery(`${this.baseURL}/files`, {
|
|
331
|
+
limit: input.pageSize,
|
|
332
|
+
pagination_token: input.pageToken,
|
|
333
|
+
order: options.order,
|
|
334
|
+
sort_by: options.sort_by,
|
|
335
|
+
filter: options.filter
|
|
336
|
+
}), { method: "GET", headers: jsonHeaders(this.apiKey), signal }), input);
|
|
337
|
+
const json = await parseJson(response);
|
|
338
|
+
return {
|
|
339
|
+
files: (json.data ?? json.files ?? []).map(normalizeUploadedFile),
|
|
340
|
+
nextPageToken: json.pagination_token ?? json.next ?? json.nextPageToken,
|
|
341
|
+
rawResponse: json
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
finally {
|
|
345
|
+
cleanup();
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
async delete(input) {
|
|
349
|
+
const { signal, cleanup } = withTimeoutSignal(input);
|
|
350
|
+
try {
|
|
351
|
+
const response = await withRetry(() => this.fetcher(`${this.baseURL}/files/${input.name}`, {
|
|
352
|
+
method: "DELETE",
|
|
353
|
+
headers: jsonHeaders(this.apiKey),
|
|
354
|
+
signal
|
|
355
|
+
}), input);
|
|
356
|
+
return { name: input.name, rawResponse: await parseJson(response) };
|
|
357
|
+
}
|
|
358
|
+
finally {
|
|
359
|
+
cleanup();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
const sanitizeConfig = (config) => Object.fromEntries(Object.entries(config).filter(([, value]) => value !== undefined));
|
|
364
|
+
export const xAIWebSearchTool = (config = {}) => {
|
|
365
|
+
const { allowed_domains, excluded_domains, ...rest } = config;
|
|
366
|
+
if (allowed_domains?.length && excluded_domains?.length) {
|
|
367
|
+
throw new UnsupportedFeatureError('Provider "xai" Web Search cannot combine allowed_domains with excluded_domains.');
|
|
368
|
+
}
|
|
369
|
+
return hostedTool({
|
|
370
|
+
name: "web_search",
|
|
371
|
+
provider: "xai",
|
|
372
|
+
type: "web_search",
|
|
373
|
+
toolClass: "web-search",
|
|
374
|
+
config: sanitizeConfig({
|
|
375
|
+
...rest,
|
|
376
|
+
...(allowed_domains?.length ? { filters: { allowed_domains } } : {}),
|
|
377
|
+
...(excluded_domains?.length ? { filters: { excluded_domains } } : {})
|
|
378
|
+
})
|
|
379
|
+
});
|
|
380
|
+
};
|
|
381
|
+
export const xAIXSearchTool = (config = {}) => hostedTool({
|
|
382
|
+
name: "x_search",
|
|
383
|
+
provider: "xai",
|
|
384
|
+
type: "x_search",
|
|
385
|
+
toolClass: "web-search",
|
|
386
|
+
config: sanitizeConfig(config)
|
|
387
|
+
});
|
|
388
|
+
export const xAICodeExecutionTool = (config = {}) => hostedTool({
|
|
389
|
+
name: "code_execution",
|
|
390
|
+
provider: "xai",
|
|
391
|
+
type: "code_interpreter",
|
|
392
|
+
toolClass: "code-execution",
|
|
393
|
+
config: sanitizeConfig(config)
|
|
394
|
+
});
|
|
395
|
+
export const xAIFileSearchTool = (config) => hostedTool({
|
|
396
|
+
name: "file_search",
|
|
397
|
+
provider: "xai",
|
|
398
|
+
type: "file_search",
|
|
399
|
+
toolClass: "file-search",
|
|
400
|
+
config: sanitizeConfig(config)
|
|
401
|
+
});
|
|
402
|
+
export const xAIFilePart = (fileId, mediaType = "application/octet-stream", filename) => ({
|
|
403
|
+
type: "file",
|
|
404
|
+
data: fileId,
|
|
405
|
+
mediaType,
|
|
406
|
+
filename
|
|
407
|
+
});
|
|
408
|
+
export const createXAI = (options = {}) => {
|
|
409
|
+
const apiKey = options.apiKey ?? process.env.XAI_API_KEY;
|
|
410
|
+
if (!apiKey)
|
|
411
|
+
throw new ConfigurationError("Missing xAI API key.");
|
|
412
|
+
const baseURL = (options.baseURL ?? "https://api.x.ai/v1").replace(/\/+$/, "");
|
|
413
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
414
|
+
const transport = createOpenAI({ apiKey, baseURL, fetch: fetcher });
|
|
415
|
+
const defaultHeaders = options.headers ?? {};
|
|
416
|
+
const languageModel = (modelId) => new XAILanguageModel(modelId, transport.languageModel(modelId), defaultHeaders);
|
|
417
|
+
return createProviderAdapter({
|
|
418
|
+
name: "xai",
|
|
419
|
+
languageModel,
|
|
420
|
+
groundedLanguageModel: (modelId) => new XAIGroundedLanguageModel(modelId, languageModel(modelId)),
|
|
421
|
+
files: new XAIFilesClient(apiKey, baseURL, fetcher),
|
|
422
|
+
rawFetch: fetcher
|
|
423
|
+
});
|
|
424
|
+
};
|
|
425
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zhivex-ai/xai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "xAI Grok adapter for Zhivex AI SDK.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=18.18.0",
|
|
11
|
+
"bun": ">=1.3.7"
|
|
12
|
+
},
|
|
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
|
+
"sideEffects": false,
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/Zhivex/zhivex-ai-sdk.git",
|
|
27
|
+
"directory": "packages/xai"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/Zhivex/zhivex-ai-sdk#readme",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/Zhivex/zhivex-ai-sdk/issues"
|
|
32
|
+
},
|
|
33
|
+
"keywords": [
|
|
34
|
+
"ai",
|
|
35
|
+
"sdk",
|
|
36
|
+
"xai",
|
|
37
|
+
"grok",
|
|
38
|
+
"llm",
|
|
39
|
+
"typescript"
|
|
40
|
+
],
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@zhivex-ai/core": "^0.17.0",
|
|
46
|
+
"@zhivex-ai/openai": "^0.8.1"
|
|
47
|
+
}
|
|
48
|
+
}
|