@ai-sdk/xai 2.0.59 → 2.0.61
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 +14 -0
- package/dist/index.js +69 -38
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +69 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @ai-sdk/xai
|
|
2
2
|
|
|
3
|
+
## 2.0.61
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c80d906: fix(provider/xai): handle inconsistent cached token reporting
|
|
8
|
+
|
|
9
|
+
## 2.0.60
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [20565b8]
|
|
14
|
+
- @ai-sdk/provider-utils@3.0.21
|
|
15
|
+
- @ai-sdk/openai-compatible@1.0.33
|
|
16
|
+
|
|
3
17
|
## 2.0.59
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/dist/index.js
CHANGED
|
@@ -42,6 +42,30 @@ var import_provider3 = require("@ai-sdk/provider");
|
|
|
42
42
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
43
43
|
var import_v43 = require("zod/v4");
|
|
44
44
|
|
|
45
|
+
// src/convert-xai-chat-usage.ts
|
|
46
|
+
function convertXaiChatUsage(usage) {
|
|
47
|
+
var _a, _b, _c, _d;
|
|
48
|
+
if (usage == null) {
|
|
49
|
+
return {
|
|
50
|
+
inputTokens: void 0,
|
|
51
|
+
outputTokens: void 0,
|
|
52
|
+
totalTokens: void 0,
|
|
53
|
+
reasoningTokens: void 0,
|
|
54
|
+
cachedInputTokens: void 0
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const cacheReadTokens = (_b = (_a = usage.prompt_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _b : 0;
|
|
58
|
+
const reasoningTokens = (_d = (_c = usage.completion_tokens_details) == null ? void 0 : _c.reasoning_tokens) != null ? _d : 0;
|
|
59
|
+
const promptTokensIncludesCached = cacheReadTokens <= usage.prompt_tokens;
|
|
60
|
+
return {
|
|
61
|
+
inputTokens: promptTokensIncludesCached ? usage.prompt_tokens : usage.prompt_tokens + cacheReadTokens,
|
|
62
|
+
outputTokens: usage.completion_tokens + reasoningTokens,
|
|
63
|
+
totalTokens: usage.total_tokens,
|
|
64
|
+
reasoningTokens: reasoningTokens || void 0,
|
|
65
|
+
cachedInputTokens: cacheReadTokens || void 0
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
45
69
|
// src/convert-to-xai-chat-messages.ts
|
|
46
70
|
var import_provider = require("@ai-sdk/provider");
|
|
47
71
|
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
@@ -468,7 +492,7 @@ var XaiChatLanguageModel = class {
|
|
|
468
492
|
};
|
|
469
493
|
}
|
|
470
494
|
async doGenerate(options) {
|
|
471
|
-
var _a
|
|
495
|
+
var _a;
|
|
472
496
|
const { args: body, warnings } = await this.getArgs(options);
|
|
473
497
|
const url = `${(_a = this.config.baseURL) != null ? _a : "https://api.x.ai/v1"}/chat/completions`;
|
|
474
498
|
const {
|
|
@@ -548,13 +572,7 @@ var XaiChatLanguageModel = class {
|
|
|
548
572
|
return {
|
|
549
573
|
content,
|
|
550
574
|
finishReason: mapXaiFinishReason(choice.finish_reason),
|
|
551
|
-
usage:
|
|
552
|
-
inputTokens: (_b = response.usage) == null ? void 0 : _b.prompt_tokens,
|
|
553
|
-
outputTokens: ((_d = (_c = response.usage) == null ? void 0 : _c.completion_tokens) != null ? _d : 0) + ((_g = (_f = (_e = response.usage) == null ? void 0 : _e.completion_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : 0),
|
|
554
|
-
totalTokens: (_h = response.usage) == null ? void 0 : _h.total_tokens,
|
|
555
|
-
reasoningTokens: (_k = (_j = (_i = response.usage) == null ? void 0 : _i.completion_tokens_details) == null ? void 0 : _j.reasoning_tokens) != null ? _k : void 0,
|
|
556
|
-
cachedInputTokens: (_n = (_m = (_l = response.usage) == null ? void 0 : _l.prompt_tokens_details) == null ? void 0 : _m.cached_tokens) != null ? _n : void 0
|
|
557
|
-
},
|
|
575
|
+
usage: convertXaiChatUsage(response.usage),
|
|
558
576
|
request: { body },
|
|
559
577
|
response: {
|
|
560
578
|
...getResponseMetadata(response),
|
|
@@ -638,7 +656,6 @@ var XaiChatLanguageModel = class {
|
|
|
638
656
|
controller.enqueue({ type: "stream-start", warnings });
|
|
639
657
|
},
|
|
640
658
|
transform(chunk, controller) {
|
|
641
|
-
var _a2, _b, _c, _d, _e, _f, _g;
|
|
642
659
|
if (options.includeRawChunks) {
|
|
643
660
|
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
644
661
|
}
|
|
@@ -665,11 +682,12 @@ var XaiChatLanguageModel = class {
|
|
|
665
682
|
}
|
|
666
683
|
}
|
|
667
684
|
if (value.usage != null) {
|
|
668
|
-
|
|
669
|
-
usage.
|
|
670
|
-
usage.
|
|
671
|
-
usage.
|
|
672
|
-
usage.
|
|
685
|
+
const converted = convertXaiChatUsage(value.usage);
|
|
686
|
+
usage.inputTokens = converted.inputTokens;
|
|
687
|
+
usage.outputTokens = converted.outputTokens;
|
|
688
|
+
usage.totalTokens = converted.totalTokens;
|
|
689
|
+
usage.reasoningTokens = converted.reasoningTokens;
|
|
690
|
+
usage.cachedInputTokens = converted.cachedInputTokens;
|
|
673
691
|
}
|
|
674
692
|
const choice = value.choices[0];
|
|
675
693
|
if ((choice == null ? void 0 : choice.finish_reason) != null) {
|
|
@@ -864,6 +882,28 @@ var xaiStreamErrorSchema = import_v43.z.object({
|
|
|
864
882
|
// src/responses/xai-responses-language-model.ts
|
|
865
883
|
var import_provider_utils8 = require("@ai-sdk/provider-utils");
|
|
866
884
|
|
|
885
|
+
// src/responses/convert-xai-responses-usage.ts
|
|
886
|
+
function convertXaiResponsesUsage(usage) {
|
|
887
|
+
var _a, _b, _c, _d;
|
|
888
|
+
if (usage == null) {
|
|
889
|
+
return {
|
|
890
|
+
inputTokens: 0,
|
|
891
|
+
outputTokens: 0,
|
|
892
|
+
totalTokens: 0
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
|
+
const cacheReadTokens = (_b = (_a = usage.input_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _b : 0;
|
|
896
|
+
const reasoningTokens = (_d = (_c = usage.output_tokens_details) == null ? void 0 : _c.reasoning_tokens) != null ? _d : 0;
|
|
897
|
+
const inputTokensIncludesCached = cacheReadTokens <= usage.input_tokens;
|
|
898
|
+
return {
|
|
899
|
+
inputTokens: inputTokensIncludesCached ? usage.input_tokens : usage.input_tokens + cacheReadTokens,
|
|
900
|
+
outputTokens: usage.output_tokens,
|
|
901
|
+
totalTokens: usage.total_tokens,
|
|
902
|
+
reasoningTokens: reasoningTokens || void 0,
|
|
903
|
+
cachedInputTokens: cacheReadTokens || void 0
|
|
904
|
+
};
|
|
905
|
+
}
|
|
906
|
+
|
|
867
907
|
// src/responses/xai-responses-api.ts
|
|
868
908
|
var import_v44 = require("zod/v4");
|
|
869
909
|
var annotationSchema = import_v44.z.union([
|
|
@@ -1717,7 +1757,7 @@ var XaiResponsesLanguageModel = class {
|
|
|
1717
1757
|
};
|
|
1718
1758
|
}
|
|
1719
1759
|
async doGenerate(options) {
|
|
1720
|
-
var _a, _b, _c, _d, _e, _f, _g
|
|
1760
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1721
1761
|
const {
|
|
1722
1762
|
args: body,
|
|
1723
1763
|
warnings,
|
|
@@ -1840,17 +1880,7 @@ var XaiResponsesLanguageModel = class {
|
|
|
1840
1880
|
return {
|
|
1841
1881
|
content,
|
|
1842
1882
|
finishReason: mapXaiResponsesFinishReason(response.status),
|
|
1843
|
-
usage: response.usage
|
|
1844
|
-
inputTokens: response.usage.input_tokens,
|
|
1845
|
-
outputTokens: response.usage.output_tokens,
|
|
1846
|
-
totalTokens: response.usage.total_tokens,
|
|
1847
|
-
reasoningTokens: (_h = response.usage.output_tokens_details) == null ? void 0 : _h.reasoning_tokens,
|
|
1848
|
-
cachedInputTokens: (_i = response.usage.input_tokens_details) == null ? void 0 : _i.cached_tokens
|
|
1849
|
-
} : {
|
|
1850
|
-
inputTokens: 0,
|
|
1851
|
-
outputTokens: 0,
|
|
1852
|
-
totalTokens: 0
|
|
1853
|
-
},
|
|
1883
|
+
usage: convertXaiResponsesUsage(response.usage),
|
|
1854
1884
|
request: { body },
|
|
1855
1885
|
response: {
|
|
1856
1886
|
...getResponseMetadata(response),
|
|
@@ -1903,7 +1933,7 @@ var XaiResponsesLanguageModel = class {
|
|
|
1903
1933
|
controller.enqueue({ type: "stream-start", warnings });
|
|
1904
1934
|
},
|
|
1905
1935
|
transform(chunk, controller) {
|
|
1906
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h
|
|
1936
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h;
|
|
1907
1937
|
if (options.includeRawChunks) {
|
|
1908
1938
|
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
1909
1939
|
}
|
|
@@ -2028,11 +2058,12 @@ var XaiResponsesLanguageModel = class {
|
|
|
2028
2058
|
if (event.type === "response.done" || event.type === "response.completed") {
|
|
2029
2059
|
const response2 = event.response;
|
|
2030
2060
|
if (response2.usage) {
|
|
2031
|
-
|
|
2032
|
-
usage.
|
|
2033
|
-
usage.outputTokens =
|
|
2034
|
-
usage.totalTokens =
|
|
2035
|
-
usage.reasoningTokens =
|
|
2061
|
+
const converted = convertXaiResponsesUsage(response2.usage);
|
|
2062
|
+
usage.inputTokens = converted.inputTokens;
|
|
2063
|
+
usage.outputTokens = converted.outputTokens;
|
|
2064
|
+
usage.totalTokens = converted.totalTokens;
|
|
2065
|
+
usage.reasoningTokens = converted.reasoningTokens;
|
|
2066
|
+
usage.cachedInputTokens = converted.cachedInputTokens;
|
|
2036
2067
|
}
|
|
2037
2068
|
if (response2.status) {
|
|
2038
2069
|
finishReason = mapXaiResponsesFinishReason(response2.status);
|
|
@@ -2096,15 +2127,15 @@ var XaiResponsesLanguageModel = class {
|
|
|
2096
2127
|
"x_semantic_search",
|
|
2097
2128
|
"x_thread_fetch"
|
|
2098
2129
|
];
|
|
2099
|
-
let toolName = (
|
|
2100
|
-
if (webSearchSubTools.includes((
|
|
2130
|
+
let toolName = (_c = part.name) != null ? _c : "";
|
|
2131
|
+
if (webSearchSubTools.includes((_d = part.name) != null ? _d : "") || part.type === "web_search_call") {
|
|
2101
2132
|
toolName = webSearchToolName != null ? webSearchToolName : "web_search";
|
|
2102
|
-
} else if (xSearchSubTools.includes((
|
|
2133
|
+
} else if (xSearchSubTools.includes((_e = part.name) != null ? _e : "") || part.type === "x_search_call") {
|
|
2103
2134
|
toolName = xSearchToolName != null ? xSearchToolName : "x_search";
|
|
2104
2135
|
} else if (part.name === "code_execution" || part.type === "code_interpreter_call" || part.type === "code_execution_call") {
|
|
2105
2136
|
toolName = codeExecutionToolName != null ? codeExecutionToolName : "code_execution";
|
|
2106
2137
|
}
|
|
2107
|
-
const toolInput = part.type === "custom_tool_call" ? (
|
|
2138
|
+
const toolInput = part.type === "custom_tool_call" ? (_f = part.input) != null ? _f : "" : (_g = part.arguments) != null ? _g : "";
|
|
2108
2139
|
const shouldEmit = part.type === "custom_tool_call" ? event.type === "response.output_item.done" : !seenToolCalls.has(part.id);
|
|
2109
2140
|
if (shouldEmit && !seenToolCalls.has(part.id)) {
|
|
2110
2141
|
seenToolCalls.add(part.id);
|
|
@@ -2157,7 +2188,7 @@ var XaiResponsesLanguageModel = class {
|
|
|
2157
2188
|
sourceType: "url",
|
|
2158
2189
|
id: self.config.generateId(),
|
|
2159
2190
|
url: annotation.url,
|
|
2160
|
-
title: (
|
|
2191
|
+
title: (_h = annotation.title) != null ? _h : annotation.url
|
|
2161
2192
|
});
|
|
2162
2193
|
}
|
|
2163
2194
|
}
|
|
@@ -2265,7 +2296,7 @@ var xaiTools = {
|
|
|
2265
2296
|
};
|
|
2266
2297
|
|
|
2267
2298
|
// src/version.ts
|
|
2268
|
-
var VERSION = true ? "2.0.
|
|
2299
|
+
var VERSION = true ? "2.0.61" : "0.0.0-test";
|
|
2269
2300
|
|
|
2270
2301
|
// src/xai-provider.ts
|
|
2271
2302
|
var xaiErrorStructure = {
|