@ai-sdk/xai 2.0.33 → 2.0.35
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 +12 -0
- package/dist/index.d.mts +164 -1
- package/dist/index.d.ts +164 -1
- package/dist/index.js +1130 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1132 -19
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -268,12 +268,12 @@ function prepareTools({
|
|
|
268
268
|
if (tools == null) {
|
|
269
269
|
return { tools: void 0, toolChoice: void 0, toolWarnings };
|
|
270
270
|
}
|
|
271
|
-
const
|
|
271
|
+
const xaiTools2 = [];
|
|
272
272
|
for (const tool of tools) {
|
|
273
273
|
if (tool.type === "provider-defined") {
|
|
274
274
|
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
275
275
|
} else {
|
|
276
|
-
|
|
276
|
+
xaiTools2.push({
|
|
277
277
|
type: "function",
|
|
278
278
|
function: {
|
|
279
279
|
name: tool.name,
|
|
@@ -284,18 +284,18 @@ function prepareTools({
|
|
|
284
284
|
}
|
|
285
285
|
}
|
|
286
286
|
if (toolChoice == null) {
|
|
287
|
-
return { tools:
|
|
287
|
+
return { tools: xaiTools2, toolChoice: void 0, toolWarnings };
|
|
288
288
|
}
|
|
289
289
|
const type = toolChoice.type;
|
|
290
290
|
switch (type) {
|
|
291
291
|
case "auto":
|
|
292
292
|
case "none":
|
|
293
|
-
return { tools:
|
|
293
|
+
return { tools: xaiTools2, toolChoice: type, toolWarnings };
|
|
294
294
|
case "required":
|
|
295
|
-
return { tools:
|
|
295
|
+
return { tools: xaiTools2, toolChoice: "required", toolWarnings };
|
|
296
296
|
case "tool":
|
|
297
297
|
return {
|
|
298
|
-
tools:
|
|
298
|
+
tools: xaiTools2,
|
|
299
299
|
toolChoice: {
|
|
300
300
|
type: "function",
|
|
301
301
|
function: { name: toolChoice.toolName }
|
|
@@ -373,7 +373,7 @@ var XaiChatLanguageModel = class {
|
|
|
373
373
|
const { messages, warnings: messageWarnings } = convertToXaiChatMessages(prompt);
|
|
374
374
|
warnings.push(...messageWarnings);
|
|
375
375
|
const {
|
|
376
|
-
tools:
|
|
376
|
+
tools: xaiTools2,
|
|
377
377
|
toolChoice: xaiToolChoice,
|
|
378
378
|
toolWarnings
|
|
379
379
|
} = prepareTools({
|
|
@@ -438,7 +438,7 @@ var XaiChatLanguageModel = class {
|
|
|
438
438
|
// messages in xai format
|
|
439
439
|
messages,
|
|
440
440
|
// tools in xai format
|
|
441
|
-
tools:
|
|
441
|
+
tools: xaiTools2,
|
|
442
442
|
tool_choice: xaiToolChoice
|
|
443
443
|
};
|
|
444
444
|
return {
|
|
@@ -447,7 +447,7 @@ var XaiChatLanguageModel = class {
|
|
|
447
447
|
};
|
|
448
448
|
}
|
|
449
449
|
async doGenerate(options) {
|
|
450
|
-
var _a, _b, _c;
|
|
450
|
+
var _a, _b, _c, _d, _e;
|
|
451
451
|
const { args: body, warnings } = await this.getArgs(options);
|
|
452
452
|
const {
|
|
453
453
|
responseHeaders,
|
|
@@ -509,7 +509,8 @@ var XaiChatLanguageModel = class {
|
|
|
509
509
|
inputTokens: response.usage.prompt_tokens,
|
|
510
510
|
outputTokens: response.usage.completion_tokens,
|
|
511
511
|
totalTokens: response.usage.total_tokens,
|
|
512
|
-
reasoningTokens: (_c = (_b = response.usage.completion_tokens_details) == null ? void 0 : _b.reasoning_tokens) != null ? _c : void 0
|
|
512
|
+
reasoningTokens: (_c = (_b = response.usage.completion_tokens_details) == null ? void 0 : _b.reasoning_tokens) != null ? _c : void 0,
|
|
513
|
+
cachedInputTokens: (_e = (_d = response.usage.prompt_tokens_details) == null ? void 0 : _d.cached_tokens) != null ? _e : void 0
|
|
513
514
|
},
|
|
514
515
|
request: { body },
|
|
515
516
|
response: {
|
|
@@ -543,7 +544,9 @@ var XaiChatLanguageModel = class {
|
|
|
543
544
|
const usage = {
|
|
544
545
|
inputTokens: void 0,
|
|
545
546
|
outputTokens: void 0,
|
|
546
|
-
totalTokens: void 0
|
|
547
|
+
totalTokens: void 0,
|
|
548
|
+
reasoningTokens: void 0,
|
|
549
|
+
cachedInputTokens: void 0
|
|
547
550
|
};
|
|
548
551
|
let isFirstChunk = true;
|
|
549
552
|
const contentBlocks = {};
|
|
@@ -556,7 +559,7 @@ var XaiChatLanguageModel = class {
|
|
|
556
559
|
controller.enqueue({ type: "stream-start", warnings });
|
|
557
560
|
},
|
|
558
561
|
transform(chunk, controller) {
|
|
559
|
-
var _a2, _b;
|
|
562
|
+
var _a2, _b, _c, _d;
|
|
560
563
|
if (options.includeRawChunks) {
|
|
561
564
|
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
562
565
|
}
|
|
@@ -587,6 +590,7 @@ var XaiChatLanguageModel = class {
|
|
|
587
590
|
usage.outputTokens = value.usage.completion_tokens;
|
|
588
591
|
usage.totalTokens = value.usage.total_tokens;
|
|
589
592
|
usage.reasoningTokens = (_b = (_a2 = value.usage.completion_tokens_details) == null ? void 0 : _a2.reasoning_tokens) != null ? _b : void 0;
|
|
593
|
+
usage.cachedInputTokens = (_d = (_c = value.usage.prompt_tokens_details) == null ? void 0 : _c.cached_tokens) != null ? _d : void 0;
|
|
590
594
|
}
|
|
591
595
|
const choice = value.choices[0];
|
|
592
596
|
if ((choice == null ? void 0 : choice.finish_reason) != null) {
|
|
@@ -682,8 +686,17 @@ var xaiUsageSchema = z3.object({
|
|
|
682
686
|
prompt_tokens: z3.number(),
|
|
683
687
|
completion_tokens: z3.number(),
|
|
684
688
|
total_tokens: z3.number(),
|
|
689
|
+
prompt_tokens_details: z3.object({
|
|
690
|
+
text_tokens: z3.number().nullish(),
|
|
691
|
+
audio_tokens: z3.number().nullish(),
|
|
692
|
+
image_tokens: z3.number().nullish(),
|
|
693
|
+
cached_tokens: z3.number().nullish()
|
|
694
|
+
}).nullish(),
|
|
685
695
|
completion_tokens_details: z3.object({
|
|
686
|
-
reasoning_tokens: z3.number().nullish()
|
|
696
|
+
reasoning_tokens: z3.number().nullish(),
|
|
697
|
+
audio_tokens: z3.number().nullish(),
|
|
698
|
+
accepted_prediction_tokens: z3.number().nullish(),
|
|
699
|
+
rejected_prediction_tokens: z3.number().nullish()
|
|
687
700
|
}).nullish()
|
|
688
701
|
});
|
|
689
702
|
var xaiChatResponseSchema = z3.object({
|
|
@@ -744,8 +757,1090 @@ var xaiChatChunkSchema = z3.object({
|
|
|
744
757
|
citations: z3.array(z3.string().url()).nullish()
|
|
745
758
|
});
|
|
746
759
|
|
|
760
|
+
// src/responses/xai-responses-language-model.ts
|
|
761
|
+
import {
|
|
762
|
+
combineHeaders as combineHeaders2,
|
|
763
|
+
createEventSourceResponseHandler as createEventSourceResponseHandler2,
|
|
764
|
+
createJsonResponseHandler as createJsonResponseHandler2,
|
|
765
|
+
parseProviderOptions as parseProviderOptions2,
|
|
766
|
+
postJsonToApi as postJsonToApi2
|
|
767
|
+
} from "@ai-sdk/provider-utils";
|
|
768
|
+
|
|
769
|
+
// src/responses/xai-responses-api.ts
|
|
770
|
+
import { z as z4 } from "zod/v4";
|
|
771
|
+
var annotationSchema = z4.union([
|
|
772
|
+
z4.object({
|
|
773
|
+
type: z4.literal("url_citation"),
|
|
774
|
+
url: z4.string(),
|
|
775
|
+
title: z4.string().optional()
|
|
776
|
+
}),
|
|
777
|
+
z4.object({
|
|
778
|
+
type: z4.string()
|
|
779
|
+
})
|
|
780
|
+
]);
|
|
781
|
+
var messageContentPartSchema = z4.object({
|
|
782
|
+
type: z4.string(),
|
|
783
|
+
text: z4.string().optional(),
|
|
784
|
+
logprobs: z4.array(z4.any()).optional(),
|
|
785
|
+
annotations: z4.array(annotationSchema).optional()
|
|
786
|
+
});
|
|
787
|
+
var toolCallSchema = z4.object({
|
|
788
|
+
name: z4.string(),
|
|
789
|
+
arguments: z4.string(),
|
|
790
|
+
call_id: z4.string(),
|
|
791
|
+
id: z4.string(),
|
|
792
|
+
status: z4.string()
|
|
793
|
+
});
|
|
794
|
+
var outputItemSchema = z4.discriminatedUnion("type", [
|
|
795
|
+
z4.object({
|
|
796
|
+
type: z4.literal("web_search_call"),
|
|
797
|
+
...toolCallSchema.shape
|
|
798
|
+
}),
|
|
799
|
+
z4.object({
|
|
800
|
+
type: z4.literal("x_search_call"),
|
|
801
|
+
...toolCallSchema.shape
|
|
802
|
+
}),
|
|
803
|
+
z4.object({
|
|
804
|
+
type: z4.literal("code_interpreter_call"),
|
|
805
|
+
...toolCallSchema.shape
|
|
806
|
+
}),
|
|
807
|
+
z4.object({
|
|
808
|
+
type: z4.literal("code_execution_call"),
|
|
809
|
+
...toolCallSchema.shape
|
|
810
|
+
}),
|
|
811
|
+
z4.object({
|
|
812
|
+
type: z4.literal("view_image_call"),
|
|
813
|
+
...toolCallSchema.shape
|
|
814
|
+
}),
|
|
815
|
+
z4.object({
|
|
816
|
+
type: z4.literal("view_x_video_call"),
|
|
817
|
+
...toolCallSchema.shape
|
|
818
|
+
}),
|
|
819
|
+
z4.object({
|
|
820
|
+
type: z4.literal("message"),
|
|
821
|
+
role: z4.string(),
|
|
822
|
+
content: z4.array(messageContentPartSchema),
|
|
823
|
+
id: z4.string(),
|
|
824
|
+
status: z4.string()
|
|
825
|
+
}),
|
|
826
|
+
z4.object({
|
|
827
|
+
type: z4.literal("function_call"),
|
|
828
|
+
name: z4.string(),
|
|
829
|
+
arguments: z4.string(),
|
|
830
|
+
call_id: z4.string(),
|
|
831
|
+
id: z4.string()
|
|
832
|
+
})
|
|
833
|
+
]);
|
|
834
|
+
var xaiResponsesUsageSchema = z4.object({
|
|
835
|
+
input_tokens: z4.number(),
|
|
836
|
+
output_tokens: z4.number(),
|
|
837
|
+
total_tokens: z4.number().optional(),
|
|
838
|
+
input_tokens_details: z4.object({
|
|
839
|
+
cached_tokens: z4.number().optional()
|
|
840
|
+
}).optional(),
|
|
841
|
+
output_tokens_details: z4.object({
|
|
842
|
+
reasoning_tokens: z4.number().optional()
|
|
843
|
+
}).optional(),
|
|
844
|
+
num_sources_used: z4.number().optional(),
|
|
845
|
+
num_server_side_tools_used: z4.number().optional()
|
|
846
|
+
});
|
|
847
|
+
var xaiResponsesResponseSchema = z4.object({
|
|
848
|
+
id: z4.string().nullish(),
|
|
849
|
+
created_at: z4.number().nullish(),
|
|
850
|
+
model: z4.string().nullish(),
|
|
851
|
+
object: z4.literal("response"),
|
|
852
|
+
output: z4.array(outputItemSchema),
|
|
853
|
+
usage: xaiResponsesUsageSchema,
|
|
854
|
+
status: z4.string()
|
|
855
|
+
});
|
|
856
|
+
var xaiResponsesChunkSchema = z4.union([
|
|
857
|
+
z4.object({
|
|
858
|
+
type: z4.literal("response.created"),
|
|
859
|
+
response: xaiResponsesResponseSchema.partial({ usage: true, status: true })
|
|
860
|
+
}),
|
|
861
|
+
z4.object({
|
|
862
|
+
type: z4.literal("response.in_progress"),
|
|
863
|
+
response: xaiResponsesResponseSchema.partial({ usage: true, status: true })
|
|
864
|
+
}),
|
|
865
|
+
z4.object({
|
|
866
|
+
type: z4.literal("response.output_item.added"),
|
|
867
|
+
item: outputItemSchema,
|
|
868
|
+
output_index: z4.number()
|
|
869
|
+
}),
|
|
870
|
+
z4.object({
|
|
871
|
+
type: z4.literal("response.output_item.done"),
|
|
872
|
+
item: outputItemSchema,
|
|
873
|
+
output_index: z4.number()
|
|
874
|
+
}),
|
|
875
|
+
z4.object({
|
|
876
|
+
type: z4.literal("response.content_part.added"),
|
|
877
|
+
item_id: z4.string(),
|
|
878
|
+
output_index: z4.number(),
|
|
879
|
+
content_index: z4.number(),
|
|
880
|
+
part: messageContentPartSchema
|
|
881
|
+
}),
|
|
882
|
+
z4.object({
|
|
883
|
+
type: z4.literal("response.content_part.done"),
|
|
884
|
+
item_id: z4.string(),
|
|
885
|
+
output_index: z4.number(),
|
|
886
|
+
content_index: z4.number(),
|
|
887
|
+
part: messageContentPartSchema
|
|
888
|
+
}),
|
|
889
|
+
z4.object({
|
|
890
|
+
type: z4.literal("response.output_text.delta"),
|
|
891
|
+
item_id: z4.string(),
|
|
892
|
+
output_index: z4.number(),
|
|
893
|
+
content_index: z4.number(),
|
|
894
|
+
delta: z4.string(),
|
|
895
|
+
logprobs: z4.array(z4.any()).optional()
|
|
896
|
+
}),
|
|
897
|
+
z4.object({
|
|
898
|
+
type: z4.literal("response.output_text.done"),
|
|
899
|
+
item_id: z4.string(),
|
|
900
|
+
output_index: z4.number(),
|
|
901
|
+
content_index: z4.number(),
|
|
902
|
+
text: z4.string(),
|
|
903
|
+
logprobs: z4.array(z4.any()).optional(),
|
|
904
|
+
annotations: z4.array(annotationSchema).optional()
|
|
905
|
+
}),
|
|
906
|
+
z4.object({
|
|
907
|
+
type: z4.literal("response.output_text.annotation.added"),
|
|
908
|
+
item_id: z4.string(),
|
|
909
|
+
output_index: z4.number(),
|
|
910
|
+
content_index: z4.number(),
|
|
911
|
+
annotation_index: z4.number(),
|
|
912
|
+
annotation: annotationSchema
|
|
913
|
+
}),
|
|
914
|
+
z4.object({
|
|
915
|
+
type: z4.literal("response.done"),
|
|
916
|
+
response: xaiResponsesResponseSchema
|
|
917
|
+
}),
|
|
918
|
+
z4.object({
|
|
919
|
+
type: z4.literal("response.completed"),
|
|
920
|
+
response: xaiResponsesResponseSchema
|
|
921
|
+
})
|
|
922
|
+
]);
|
|
923
|
+
|
|
924
|
+
// src/responses/map-xai-responses-finish-reason.ts
|
|
925
|
+
function mapXaiResponsesFinishReason(finishReason) {
|
|
926
|
+
switch (finishReason) {
|
|
927
|
+
case "stop":
|
|
928
|
+
case "completed":
|
|
929
|
+
return "stop";
|
|
930
|
+
case "length":
|
|
931
|
+
return "length";
|
|
932
|
+
case "tool_calls":
|
|
933
|
+
case "function_call":
|
|
934
|
+
return "tool-calls";
|
|
935
|
+
case "content_filter":
|
|
936
|
+
return "content-filter";
|
|
937
|
+
default:
|
|
938
|
+
return "unknown";
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
// src/responses/xai-responses-options.ts
|
|
943
|
+
import { z as z5 } from "zod/v4";
|
|
944
|
+
var xaiResponsesProviderOptions = z5.object({
|
|
945
|
+
reasoningEffort: z5.enum(["low", "high"]).optional()
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
// src/responses/convert-to-xai-responses-input.ts
|
|
949
|
+
async function convertToXaiResponsesInput({
|
|
950
|
+
prompt
|
|
951
|
+
}) {
|
|
952
|
+
var _a, _b, _c, _d;
|
|
953
|
+
const input = [];
|
|
954
|
+
const inputWarnings = [];
|
|
955
|
+
for (const message of prompt) {
|
|
956
|
+
switch (message.role) {
|
|
957
|
+
case "system": {
|
|
958
|
+
input.push({
|
|
959
|
+
role: "system",
|
|
960
|
+
content: message.content
|
|
961
|
+
});
|
|
962
|
+
break;
|
|
963
|
+
}
|
|
964
|
+
case "user": {
|
|
965
|
+
let userContent = "";
|
|
966
|
+
for (const block of message.content) {
|
|
967
|
+
switch (block.type) {
|
|
968
|
+
case "text": {
|
|
969
|
+
userContent += block.text;
|
|
970
|
+
break;
|
|
971
|
+
}
|
|
972
|
+
case "file": {
|
|
973
|
+
inputWarnings.push({
|
|
974
|
+
type: "other",
|
|
975
|
+
message: `xAI Responses API does not support ${block.type} in user messages`
|
|
976
|
+
});
|
|
977
|
+
break;
|
|
978
|
+
}
|
|
979
|
+
default: {
|
|
980
|
+
const _exhaustiveCheck = block;
|
|
981
|
+
inputWarnings.push({
|
|
982
|
+
type: "other",
|
|
983
|
+
message: "xAI Responses API does not support this content type in user messages"
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
input.push({
|
|
989
|
+
role: "user",
|
|
990
|
+
content: userContent
|
|
991
|
+
});
|
|
992
|
+
break;
|
|
993
|
+
}
|
|
994
|
+
case "assistant": {
|
|
995
|
+
for (const part of message.content) {
|
|
996
|
+
switch (part.type) {
|
|
997
|
+
case "text": {
|
|
998
|
+
const id = typeof ((_b = (_a = part.providerOptions) == null ? void 0 : _a.xai) == null ? void 0 : _b.itemId) === "string" ? part.providerOptions.xai.itemId : void 0;
|
|
999
|
+
input.push({
|
|
1000
|
+
role: "assistant",
|
|
1001
|
+
content: part.text,
|
|
1002
|
+
id
|
|
1003
|
+
});
|
|
1004
|
+
break;
|
|
1005
|
+
}
|
|
1006
|
+
case "tool-call": {
|
|
1007
|
+
if (part.providerExecuted) {
|
|
1008
|
+
break;
|
|
1009
|
+
}
|
|
1010
|
+
const id = typeof ((_d = (_c = part.providerOptions) == null ? void 0 : _c.xai) == null ? void 0 : _d.itemId) === "string" ? part.providerOptions.xai.itemId : void 0;
|
|
1011
|
+
input.push({
|
|
1012
|
+
type: "function_call",
|
|
1013
|
+
id: id != null ? id : part.toolCallId,
|
|
1014
|
+
call_id: part.toolCallId,
|
|
1015
|
+
name: part.toolName,
|
|
1016
|
+
arguments: JSON.stringify(part.input),
|
|
1017
|
+
status: "completed"
|
|
1018
|
+
});
|
|
1019
|
+
break;
|
|
1020
|
+
}
|
|
1021
|
+
case "tool-result": {
|
|
1022
|
+
break;
|
|
1023
|
+
}
|
|
1024
|
+
case "reasoning":
|
|
1025
|
+
case "file": {
|
|
1026
|
+
inputWarnings.push({
|
|
1027
|
+
type: "other",
|
|
1028
|
+
message: `xAI Responses API does not support ${part.type} in assistant messages`
|
|
1029
|
+
});
|
|
1030
|
+
break;
|
|
1031
|
+
}
|
|
1032
|
+
default: {
|
|
1033
|
+
const _exhaustiveCheck = part;
|
|
1034
|
+
inputWarnings.push({
|
|
1035
|
+
type: "other",
|
|
1036
|
+
message: "xAI Responses API does not support this content type in assistant messages"
|
|
1037
|
+
});
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
break;
|
|
1042
|
+
}
|
|
1043
|
+
case "tool": {
|
|
1044
|
+
for (const part of message.content) {
|
|
1045
|
+
const output = part.output;
|
|
1046
|
+
let outputValue;
|
|
1047
|
+
switch (output.type) {
|
|
1048
|
+
case "text":
|
|
1049
|
+
case "error-text":
|
|
1050
|
+
outputValue = output.value;
|
|
1051
|
+
break;
|
|
1052
|
+
case "json":
|
|
1053
|
+
case "error-json":
|
|
1054
|
+
outputValue = JSON.stringify(output.value);
|
|
1055
|
+
break;
|
|
1056
|
+
case "content":
|
|
1057
|
+
outputValue = output.value.map((item) => {
|
|
1058
|
+
if (item.type === "text") {
|
|
1059
|
+
return item.text;
|
|
1060
|
+
}
|
|
1061
|
+
return "";
|
|
1062
|
+
}).join("");
|
|
1063
|
+
break;
|
|
1064
|
+
default: {
|
|
1065
|
+
const _exhaustiveCheck = output;
|
|
1066
|
+
outputValue = "";
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
input.push({
|
|
1070
|
+
type: "function_call_output",
|
|
1071
|
+
call_id: part.toolCallId,
|
|
1072
|
+
output: outputValue
|
|
1073
|
+
});
|
|
1074
|
+
}
|
|
1075
|
+
break;
|
|
1076
|
+
}
|
|
1077
|
+
default: {
|
|
1078
|
+
const _exhaustiveCheck = message;
|
|
1079
|
+
inputWarnings.push({
|
|
1080
|
+
type: "other",
|
|
1081
|
+
message: "unsupported message role"
|
|
1082
|
+
});
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
return { input, inputWarnings };
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
// src/responses/xai-responses-prepare-tools.ts
|
|
1090
|
+
import {
|
|
1091
|
+
UnsupportedFunctionalityError as UnsupportedFunctionalityError3
|
|
1092
|
+
} from "@ai-sdk/provider";
|
|
1093
|
+
import { validateTypes } from "@ai-sdk/provider-utils";
|
|
1094
|
+
|
|
1095
|
+
// src/tool/web-search.ts
|
|
1096
|
+
import {
|
|
1097
|
+
createProviderDefinedToolFactoryWithOutputSchema,
|
|
1098
|
+
lazySchema,
|
|
1099
|
+
zodSchema
|
|
1100
|
+
} from "@ai-sdk/provider-utils";
|
|
1101
|
+
import { z as z6 } from "zod/v4";
|
|
1102
|
+
var webSearchArgsSchema = lazySchema(
|
|
1103
|
+
() => zodSchema(
|
|
1104
|
+
z6.object({
|
|
1105
|
+
allowedDomains: z6.array(z6.string()).max(5).optional(),
|
|
1106
|
+
excludedDomains: z6.array(z6.string()).max(5).optional(),
|
|
1107
|
+
enableImageUnderstanding: z6.boolean().optional()
|
|
1108
|
+
})
|
|
1109
|
+
)
|
|
1110
|
+
);
|
|
1111
|
+
var webSearchOutputSchema = lazySchema(
|
|
1112
|
+
() => zodSchema(
|
|
1113
|
+
z6.object({
|
|
1114
|
+
query: z6.string(),
|
|
1115
|
+
sources: z6.array(
|
|
1116
|
+
z6.object({
|
|
1117
|
+
title: z6.string(),
|
|
1118
|
+
url: z6.string(),
|
|
1119
|
+
snippet: z6.string()
|
|
1120
|
+
})
|
|
1121
|
+
)
|
|
1122
|
+
})
|
|
1123
|
+
)
|
|
1124
|
+
);
|
|
1125
|
+
var webSearchToolFactory = createProviderDefinedToolFactoryWithOutputSchema({
|
|
1126
|
+
id: "xai.web_search",
|
|
1127
|
+
name: "web_search",
|
|
1128
|
+
inputSchema: lazySchema(() => zodSchema(z6.object({}))),
|
|
1129
|
+
outputSchema: webSearchOutputSchema
|
|
1130
|
+
});
|
|
1131
|
+
var webSearch = (args = {}) => webSearchToolFactory(args);
|
|
1132
|
+
|
|
1133
|
+
// src/tool/x-search.ts
|
|
1134
|
+
import {
|
|
1135
|
+
createProviderDefinedToolFactoryWithOutputSchema as createProviderDefinedToolFactoryWithOutputSchema2,
|
|
1136
|
+
lazySchema as lazySchema2,
|
|
1137
|
+
zodSchema as zodSchema2
|
|
1138
|
+
} from "@ai-sdk/provider-utils";
|
|
1139
|
+
import { z as z7 } from "zod/v4";
|
|
1140
|
+
var xSearchArgsSchema = lazySchema2(
|
|
1141
|
+
() => zodSchema2(
|
|
1142
|
+
z7.object({
|
|
1143
|
+
allowedXHandles: z7.array(z7.string()).max(10).optional(),
|
|
1144
|
+
excludedXHandles: z7.array(z7.string()).max(10).optional(),
|
|
1145
|
+
fromDate: z7.string().optional(),
|
|
1146
|
+
toDate: z7.string().optional(),
|
|
1147
|
+
enableImageUnderstanding: z7.boolean().optional(),
|
|
1148
|
+
enableVideoUnderstanding: z7.boolean().optional()
|
|
1149
|
+
})
|
|
1150
|
+
)
|
|
1151
|
+
);
|
|
1152
|
+
var xSearchOutputSchema = lazySchema2(
|
|
1153
|
+
() => zodSchema2(
|
|
1154
|
+
z7.object({
|
|
1155
|
+
query: z7.string(),
|
|
1156
|
+
posts: z7.array(
|
|
1157
|
+
z7.object({
|
|
1158
|
+
author: z7.string(),
|
|
1159
|
+
text: z7.string(),
|
|
1160
|
+
url: z7.string(),
|
|
1161
|
+
likes: z7.number()
|
|
1162
|
+
})
|
|
1163
|
+
)
|
|
1164
|
+
})
|
|
1165
|
+
)
|
|
1166
|
+
);
|
|
1167
|
+
var xSearchToolFactory = createProviderDefinedToolFactoryWithOutputSchema2({
|
|
1168
|
+
id: "xai.x_search",
|
|
1169
|
+
name: "x_search",
|
|
1170
|
+
inputSchema: lazySchema2(() => zodSchema2(z7.object({}))),
|
|
1171
|
+
outputSchema: xSearchOutputSchema
|
|
1172
|
+
});
|
|
1173
|
+
var xSearch = (args = {}) => xSearchToolFactory(args);
|
|
1174
|
+
|
|
1175
|
+
// src/responses/xai-responses-prepare-tools.ts
|
|
1176
|
+
async function prepareResponsesTools({
|
|
1177
|
+
tools,
|
|
1178
|
+
toolChoice
|
|
1179
|
+
}) {
|
|
1180
|
+
const normalizedTools = (tools == null ? void 0 : tools.length) ? tools : void 0;
|
|
1181
|
+
const toolWarnings = [];
|
|
1182
|
+
if (normalizedTools == null) {
|
|
1183
|
+
return { tools: void 0, toolChoice: void 0, toolWarnings };
|
|
1184
|
+
}
|
|
1185
|
+
const xaiTools2 = [];
|
|
1186
|
+
const toolByName = /* @__PURE__ */ new Map();
|
|
1187
|
+
for (const tool of normalizedTools) {
|
|
1188
|
+
toolByName.set(tool.name, tool);
|
|
1189
|
+
if (tool.type === "provider-defined") {
|
|
1190
|
+
switch (tool.id) {
|
|
1191
|
+
case "xai.web_search": {
|
|
1192
|
+
const args = await validateTypes({
|
|
1193
|
+
value: tool.args,
|
|
1194
|
+
schema: webSearchArgsSchema
|
|
1195
|
+
});
|
|
1196
|
+
xaiTools2.push({
|
|
1197
|
+
type: "web_search",
|
|
1198
|
+
allowed_domains: args.allowedDomains,
|
|
1199
|
+
excluded_domains: args.excludedDomains,
|
|
1200
|
+
enable_image_understanding: args.enableImageUnderstanding
|
|
1201
|
+
});
|
|
1202
|
+
break;
|
|
1203
|
+
}
|
|
1204
|
+
case "xai.x_search": {
|
|
1205
|
+
const args = await validateTypes({
|
|
1206
|
+
value: tool.args,
|
|
1207
|
+
schema: xSearchArgsSchema
|
|
1208
|
+
});
|
|
1209
|
+
xaiTools2.push({
|
|
1210
|
+
type: "x_search",
|
|
1211
|
+
allowed_x_handles: args.allowedXHandles,
|
|
1212
|
+
excluded_x_handles: args.excludedXHandles,
|
|
1213
|
+
from_date: args.fromDate,
|
|
1214
|
+
to_date: args.toDate,
|
|
1215
|
+
enable_image_understanding: args.enableImageUnderstanding,
|
|
1216
|
+
enable_video_understanding: args.enableVideoUnderstanding
|
|
1217
|
+
});
|
|
1218
|
+
break;
|
|
1219
|
+
}
|
|
1220
|
+
case "xai.code_execution": {
|
|
1221
|
+
xaiTools2.push({
|
|
1222
|
+
type: "code_interpreter"
|
|
1223
|
+
});
|
|
1224
|
+
break;
|
|
1225
|
+
}
|
|
1226
|
+
case "xai.view_image": {
|
|
1227
|
+
xaiTools2.push({
|
|
1228
|
+
type: "view_image"
|
|
1229
|
+
});
|
|
1230
|
+
break;
|
|
1231
|
+
}
|
|
1232
|
+
case "xai.view_x_video": {
|
|
1233
|
+
xaiTools2.push({
|
|
1234
|
+
type: "view_x_video"
|
|
1235
|
+
});
|
|
1236
|
+
break;
|
|
1237
|
+
}
|
|
1238
|
+
case "xai.file_search": {
|
|
1239
|
+
xaiTools2.push({
|
|
1240
|
+
type: "file_search"
|
|
1241
|
+
});
|
|
1242
|
+
break;
|
|
1243
|
+
}
|
|
1244
|
+
case "xai.mcp": {
|
|
1245
|
+
xaiTools2.push({
|
|
1246
|
+
type: "mcp"
|
|
1247
|
+
});
|
|
1248
|
+
break;
|
|
1249
|
+
}
|
|
1250
|
+
default: {
|
|
1251
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
1252
|
+
break;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
} else {
|
|
1256
|
+
xaiTools2.push({
|
|
1257
|
+
type: "function",
|
|
1258
|
+
function: {
|
|
1259
|
+
name: tool.name,
|
|
1260
|
+
description: tool.description,
|
|
1261
|
+
parameters: tool.inputSchema
|
|
1262
|
+
}
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
if (toolChoice == null) {
|
|
1267
|
+
return { tools: xaiTools2, toolChoice: void 0, toolWarnings };
|
|
1268
|
+
}
|
|
1269
|
+
const type = toolChoice.type;
|
|
1270
|
+
switch (type) {
|
|
1271
|
+
case "auto":
|
|
1272
|
+
case "none":
|
|
1273
|
+
return { tools: xaiTools2, toolChoice: type, toolWarnings };
|
|
1274
|
+
case "required":
|
|
1275
|
+
return { tools: xaiTools2, toolChoice: "required", toolWarnings };
|
|
1276
|
+
case "tool": {
|
|
1277
|
+
const selectedTool = toolByName.get(toolChoice.toolName);
|
|
1278
|
+
if (selectedTool == null) {
|
|
1279
|
+
return {
|
|
1280
|
+
tools: xaiTools2,
|
|
1281
|
+
toolChoice: void 0,
|
|
1282
|
+
toolWarnings
|
|
1283
|
+
};
|
|
1284
|
+
}
|
|
1285
|
+
if (selectedTool.type === "provider-defined") {
|
|
1286
|
+
switch (selectedTool.id) {
|
|
1287
|
+
case "xai.web_search":
|
|
1288
|
+
return {
|
|
1289
|
+
tools: xaiTools2,
|
|
1290
|
+
toolChoice: { type: "web_search" },
|
|
1291
|
+
toolWarnings
|
|
1292
|
+
};
|
|
1293
|
+
case "xai.x_search":
|
|
1294
|
+
return {
|
|
1295
|
+
tools: xaiTools2,
|
|
1296
|
+
toolChoice: { type: "x_search" },
|
|
1297
|
+
toolWarnings
|
|
1298
|
+
};
|
|
1299
|
+
case "xai.code_execution":
|
|
1300
|
+
return {
|
|
1301
|
+
tools: xaiTools2,
|
|
1302
|
+
toolChoice: { type: "code_interpreter" },
|
|
1303
|
+
toolWarnings
|
|
1304
|
+
};
|
|
1305
|
+
case "xai.view_image":
|
|
1306
|
+
return {
|
|
1307
|
+
tools: xaiTools2,
|
|
1308
|
+
toolChoice: { type: "view_image" },
|
|
1309
|
+
toolWarnings
|
|
1310
|
+
};
|
|
1311
|
+
case "xai.view_x_video":
|
|
1312
|
+
return {
|
|
1313
|
+
tools: xaiTools2,
|
|
1314
|
+
toolChoice: { type: "view_x_video" },
|
|
1315
|
+
toolWarnings
|
|
1316
|
+
};
|
|
1317
|
+
case "xai.file_search":
|
|
1318
|
+
return {
|
|
1319
|
+
tools: xaiTools2,
|
|
1320
|
+
toolChoice: { type: "file_search" },
|
|
1321
|
+
toolWarnings
|
|
1322
|
+
};
|
|
1323
|
+
case "xai.mcp":
|
|
1324
|
+
return {
|
|
1325
|
+
tools: xaiTools2,
|
|
1326
|
+
toolChoice: { type: "mcp" },
|
|
1327
|
+
toolWarnings
|
|
1328
|
+
};
|
|
1329
|
+
default:
|
|
1330
|
+
toolWarnings.push({ type: "unsupported-tool", tool: selectedTool });
|
|
1331
|
+
return { tools: xaiTools2, toolChoice: void 0, toolWarnings };
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
return {
|
|
1335
|
+
tools: xaiTools2,
|
|
1336
|
+
toolChoice: { type: "function", name: selectedTool.name },
|
|
1337
|
+
toolWarnings
|
|
1338
|
+
};
|
|
1339
|
+
}
|
|
1340
|
+
default: {
|
|
1341
|
+
const _exhaustiveCheck = type;
|
|
1342
|
+
throw new UnsupportedFunctionalityError3({
|
|
1343
|
+
functionality: `tool choice type: ${_exhaustiveCheck}`
|
|
1344
|
+
});
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
// src/responses/xai-responses-language-model.ts
|
|
1350
|
+
var XaiResponsesLanguageModel = class {
|
|
1351
|
+
constructor(modelId, config) {
|
|
1352
|
+
this.specificationVersion = "v2";
|
|
1353
|
+
this.supportedUrls = {
|
|
1354
|
+
"image/*": [/^https?:\/\/.*$/]
|
|
1355
|
+
};
|
|
1356
|
+
this.modelId = modelId;
|
|
1357
|
+
this.config = config;
|
|
1358
|
+
}
|
|
1359
|
+
get provider() {
|
|
1360
|
+
return this.config.provider;
|
|
1361
|
+
}
|
|
1362
|
+
async getArgs({
|
|
1363
|
+
prompt,
|
|
1364
|
+
maxOutputTokens,
|
|
1365
|
+
temperature,
|
|
1366
|
+
topP,
|
|
1367
|
+
stopSequences,
|
|
1368
|
+
seed,
|
|
1369
|
+
providerOptions,
|
|
1370
|
+
tools,
|
|
1371
|
+
toolChoice
|
|
1372
|
+
}) {
|
|
1373
|
+
var _a, _b, _c, _d;
|
|
1374
|
+
const warnings = [];
|
|
1375
|
+
const options = (_a = await parseProviderOptions2({
|
|
1376
|
+
provider: "xai",
|
|
1377
|
+
providerOptions,
|
|
1378
|
+
schema: xaiResponsesProviderOptions
|
|
1379
|
+
})) != null ? _a : {};
|
|
1380
|
+
if (stopSequences != null) {
|
|
1381
|
+
warnings.push({
|
|
1382
|
+
type: "unsupported-setting",
|
|
1383
|
+
setting: "stopSequences"
|
|
1384
|
+
});
|
|
1385
|
+
}
|
|
1386
|
+
const webSearchToolName = (_b = tools == null ? void 0 : tools.find(
|
|
1387
|
+
(tool) => tool.type === "provider-defined" && tool.id === "xai.web_search"
|
|
1388
|
+
)) == null ? void 0 : _b.name;
|
|
1389
|
+
const xSearchToolName = (_c = tools == null ? void 0 : tools.find(
|
|
1390
|
+
(tool) => tool.type === "provider-defined" && tool.id === "xai.x_search"
|
|
1391
|
+
)) == null ? void 0 : _c.name;
|
|
1392
|
+
const codeExecutionToolName = (_d = tools == null ? void 0 : tools.find(
|
|
1393
|
+
(tool) => tool.type === "provider-defined" && tool.id === "xai.code_execution"
|
|
1394
|
+
)) == null ? void 0 : _d.name;
|
|
1395
|
+
const { input, inputWarnings } = await convertToXaiResponsesInput({
|
|
1396
|
+
prompt,
|
|
1397
|
+
store: true
|
|
1398
|
+
});
|
|
1399
|
+
warnings.push(...inputWarnings);
|
|
1400
|
+
const {
|
|
1401
|
+
tools: xaiTools2,
|
|
1402
|
+
toolChoice: xaiToolChoice,
|
|
1403
|
+
toolWarnings
|
|
1404
|
+
} = await prepareResponsesTools({
|
|
1405
|
+
tools,
|
|
1406
|
+
toolChoice
|
|
1407
|
+
});
|
|
1408
|
+
warnings.push(...toolWarnings);
|
|
1409
|
+
const baseArgs = {
|
|
1410
|
+
model: this.modelId,
|
|
1411
|
+
input,
|
|
1412
|
+
max_tokens: maxOutputTokens,
|
|
1413
|
+
temperature,
|
|
1414
|
+
top_p: topP,
|
|
1415
|
+
seed,
|
|
1416
|
+
reasoning_effort: options.reasoningEffort
|
|
1417
|
+
};
|
|
1418
|
+
if (xaiTools2 && xaiTools2.length > 0) {
|
|
1419
|
+
baseArgs.tools = xaiTools2;
|
|
1420
|
+
}
|
|
1421
|
+
if (xaiToolChoice != null) {
|
|
1422
|
+
baseArgs.tool_choice = xaiToolChoice;
|
|
1423
|
+
}
|
|
1424
|
+
return {
|
|
1425
|
+
args: baseArgs,
|
|
1426
|
+
warnings,
|
|
1427
|
+
webSearchToolName,
|
|
1428
|
+
xSearchToolName,
|
|
1429
|
+
codeExecutionToolName
|
|
1430
|
+
};
|
|
1431
|
+
}
|
|
1432
|
+
async doGenerate(options) {
|
|
1433
|
+
var _a, _b, _c;
|
|
1434
|
+
const {
|
|
1435
|
+
args: body,
|
|
1436
|
+
warnings,
|
|
1437
|
+
webSearchToolName,
|
|
1438
|
+
xSearchToolName,
|
|
1439
|
+
codeExecutionToolName
|
|
1440
|
+
} = await this.getArgs(options);
|
|
1441
|
+
const {
|
|
1442
|
+
responseHeaders,
|
|
1443
|
+
value: response,
|
|
1444
|
+
rawValue: rawResponse
|
|
1445
|
+
} = await postJsonToApi2({
|
|
1446
|
+
url: `${(_a = this.config.baseURL) != null ? _a : "https://api.x.ai/v1"}/responses`,
|
|
1447
|
+
headers: combineHeaders2(this.config.headers(), options.headers),
|
|
1448
|
+
body,
|
|
1449
|
+
failedResponseHandler: xaiFailedResponseHandler,
|
|
1450
|
+
successfulResponseHandler: createJsonResponseHandler2(
|
|
1451
|
+
xaiResponsesResponseSchema
|
|
1452
|
+
),
|
|
1453
|
+
abortSignal: options.abortSignal,
|
|
1454
|
+
fetch: this.config.fetch
|
|
1455
|
+
});
|
|
1456
|
+
const content = [];
|
|
1457
|
+
const webSearchSubTools = [
|
|
1458
|
+
"web_search",
|
|
1459
|
+
"web_search_with_snippets",
|
|
1460
|
+
"browse_page"
|
|
1461
|
+
];
|
|
1462
|
+
const xSearchSubTools = [
|
|
1463
|
+
"x_user_search",
|
|
1464
|
+
"x_keyword_search",
|
|
1465
|
+
"x_semantic_search",
|
|
1466
|
+
"x_thread_fetch"
|
|
1467
|
+
];
|
|
1468
|
+
for (const part of response.output) {
|
|
1469
|
+
if (part.type === "web_search_call" || part.type === "x_search_call" || part.type === "code_interpreter_call" || part.type === "code_execution_call" || part.type === "view_image_call" || part.type === "view_x_video_call") {
|
|
1470
|
+
let toolName = part.name;
|
|
1471
|
+
if (webSearchSubTools.includes(part.name)) {
|
|
1472
|
+
toolName = webSearchToolName != null ? webSearchToolName : "web_search";
|
|
1473
|
+
} else if (xSearchSubTools.includes(part.name)) {
|
|
1474
|
+
toolName = xSearchToolName != null ? xSearchToolName : "x_search";
|
|
1475
|
+
} else if (part.name === "code_execution") {
|
|
1476
|
+
toolName = codeExecutionToolName != null ? codeExecutionToolName : "code_execution";
|
|
1477
|
+
}
|
|
1478
|
+
content.push({
|
|
1479
|
+
type: "tool-call",
|
|
1480
|
+
toolCallId: part.id,
|
|
1481
|
+
toolName,
|
|
1482
|
+
input: part.arguments,
|
|
1483
|
+
providerExecuted: true
|
|
1484
|
+
});
|
|
1485
|
+
continue;
|
|
1486
|
+
}
|
|
1487
|
+
switch (part.type) {
|
|
1488
|
+
case "message": {
|
|
1489
|
+
for (const contentPart of part.content) {
|
|
1490
|
+
if (contentPart.text) {
|
|
1491
|
+
content.push({
|
|
1492
|
+
type: "text",
|
|
1493
|
+
text: contentPart.text
|
|
1494
|
+
});
|
|
1495
|
+
}
|
|
1496
|
+
if (contentPart.annotations) {
|
|
1497
|
+
for (const annotation of contentPart.annotations) {
|
|
1498
|
+
if (annotation.type === "url_citation" && "url" in annotation) {
|
|
1499
|
+
content.push({
|
|
1500
|
+
type: "source",
|
|
1501
|
+
sourceType: "url",
|
|
1502
|
+
id: this.config.generateId(),
|
|
1503
|
+
url: annotation.url,
|
|
1504
|
+
title: (_b = annotation.title) != null ? _b : annotation.url
|
|
1505
|
+
});
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
break;
|
|
1511
|
+
}
|
|
1512
|
+
case "function_call": {
|
|
1513
|
+
content.push({
|
|
1514
|
+
type: "tool-call",
|
|
1515
|
+
toolCallId: part.call_id,
|
|
1516
|
+
toolName: part.name,
|
|
1517
|
+
input: part.arguments
|
|
1518
|
+
});
|
|
1519
|
+
break;
|
|
1520
|
+
}
|
|
1521
|
+
default: {
|
|
1522
|
+
break;
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
return {
|
|
1527
|
+
content,
|
|
1528
|
+
finishReason: mapXaiResponsesFinishReason(response.status),
|
|
1529
|
+
usage: {
|
|
1530
|
+
inputTokens: response.usage.input_tokens,
|
|
1531
|
+
outputTokens: response.usage.output_tokens,
|
|
1532
|
+
totalTokens: response.usage.total_tokens,
|
|
1533
|
+
reasoningTokens: (_c = response.usage.output_tokens_details) == null ? void 0 : _c.reasoning_tokens
|
|
1534
|
+
},
|
|
1535
|
+
request: { body },
|
|
1536
|
+
response: {
|
|
1537
|
+
...getResponseMetadata(response),
|
|
1538
|
+
headers: responseHeaders,
|
|
1539
|
+
body: rawResponse
|
|
1540
|
+
},
|
|
1541
|
+
warnings
|
|
1542
|
+
};
|
|
1543
|
+
}
|
|
1544
|
+
async doStream(options) {
|
|
1545
|
+
var _a;
|
|
1546
|
+
const {
|
|
1547
|
+
args,
|
|
1548
|
+
warnings,
|
|
1549
|
+
webSearchToolName,
|
|
1550
|
+
xSearchToolName,
|
|
1551
|
+
codeExecutionToolName
|
|
1552
|
+
} = await this.getArgs(options);
|
|
1553
|
+
const body = {
|
|
1554
|
+
...args,
|
|
1555
|
+
stream: true
|
|
1556
|
+
};
|
|
1557
|
+
const { responseHeaders, value: response } = await postJsonToApi2({
|
|
1558
|
+
url: `${(_a = this.config.baseURL) != null ? _a : "https://api.x.ai/v1"}/responses`,
|
|
1559
|
+
headers: combineHeaders2(this.config.headers(), options.headers),
|
|
1560
|
+
body,
|
|
1561
|
+
failedResponseHandler: xaiFailedResponseHandler,
|
|
1562
|
+
successfulResponseHandler: createEventSourceResponseHandler2(
|
|
1563
|
+
xaiResponsesChunkSchema
|
|
1564
|
+
),
|
|
1565
|
+
abortSignal: options.abortSignal,
|
|
1566
|
+
fetch: this.config.fetch
|
|
1567
|
+
});
|
|
1568
|
+
let finishReason = "unknown";
|
|
1569
|
+
const usage = {
|
|
1570
|
+
inputTokens: void 0,
|
|
1571
|
+
outputTokens: void 0,
|
|
1572
|
+
totalTokens: void 0
|
|
1573
|
+
};
|
|
1574
|
+
let isFirstChunk = true;
|
|
1575
|
+
const contentBlocks = {};
|
|
1576
|
+
const seenToolCalls = /* @__PURE__ */ new Set();
|
|
1577
|
+
const self = this;
|
|
1578
|
+
return {
|
|
1579
|
+
stream: response.pipeThrough(
|
|
1580
|
+
new TransformStream({
|
|
1581
|
+
start(controller) {
|
|
1582
|
+
controller.enqueue({ type: "stream-start", warnings });
|
|
1583
|
+
},
|
|
1584
|
+
transform(chunk, controller) {
|
|
1585
|
+
var _a2, _b, _c, _d;
|
|
1586
|
+
if (options.includeRawChunks) {
|
|
1587
|
+
controller.enqueue({ type: "raw", rawValue: chunk.rawValue });
|
|
1588
|
+
}
|
|
1589
|
+
if (!chunk.success) {
|
|
1590
|
+
controller.enqueue({ type: "error", error: chunk.error });
|
|
1591
|
+
return;
|
|
1592
|
+
}
|
|
1593
|
+
const event = chunk.value;
|
|
1594
|
+
if (event.type === "response.created" || event.type === "response.in_progress") {
|
|
1595
|
+
if (isFirstChunk) {
|
|
1596
|
+
controller.enqueue({
|
|
1597
|
+
type: "response-metadata",
|
|
1598
|
+
...getResponseMetadata(event.response)
|
|
1599
|
+
});
|
|
1600
|
+
isFirstChunk = false;
|
|
1601
|
+
}
|
|
1602
|
+
return;
|
|
1603
|
+
}
|
|
1604
|
+
if (event.type === "response.output_text.delta") {
|
|
1605
|
+
const blockId = `text-${event.item_id}`;
|
|
1606
|
+
if (contentBlocks[blockId] == null) {
|
|
1607
|
+
contentBlocks[blockId] = { type: "text" };
|
|
1608
|
+
controller.enqueue({
|
|
1609
|
+
type: "text-start",
|
|
1610
|
+
id: blockId
|
|
1611
|
+
});
|
|
1612
|
+
}
|
|
1613
|
+
controller.enqueue({
|
|
1614
|
+
type: "text-delta",
|
|
1615
|
+
id: blockId,
|
|
1616
|
+
delta: event.delta
|
|
1617
|
+
});
|
|
1618
|
+
return;
|
|
1619
|
+
}
|
|
1620
|
+
if (event.type === "response.output_text.done") {
|
|
1621
|
+
if (event.annotations) {
|
|
1622
|
+
for (const annotation of event.annotations) {
|
|
1623
|
+
if (annotation.type === "url_citation" && "url" in annotation) {
|
|
1624
|
+
controller.enqueue({
|
|
1625
|
+
type: "source",
|
|
1626
|
+
sourceType: "url",
|
|
1627
|
+
id: self.config.generateId(),
|
|
1628
|
+
url: annotation.url,
|
|
1629
|
+
title: (_a2 = annotation.title) != null ? _a2 : annotation.url
|
|
1630
|
+
});
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
return;
|
|
1635
|
+
}
|
|
1636
|
+
if (event.type === "response.output_text.annotation.added") {
|
|
1637
|
+
const annotation = event.annotation;
|
|
1638
|
+
if (annotation.type === "url_citation" && "url" in annotation) {
|
|
1639
|
+
controller.enqueue({
|
|
1640
|
+
type: "source",
|
|
1641
|
+
sourceType: "url",
|
|
1642
|
+
id: self.config.generateId(),
|
|
1643
|
+
url: annotation.url,
|
|
1644
|
+
title: (_b = annotation.title) != null ? _b : annotation.url
|
|
1645
|
+
});
|
|
1646
|
+
}
|
|
1647
|
+
return;
|
|
1648
|
+
}
|
|
1649
|
+
if (event.type === "response.done" || event.type === "response.completed") {
|
|
1650
|
+
const response2 = event.response;
|
|
1651
|
+
if (response2.usage) {
|
|
1652
|
+
usage.inputTokens = response2.usage.input_tokens;
|
|
1653
|
+
usage.outputTokens = response2.usage.output_tokens;
|
|
1654
|
+
usage.totalTokens = response2.usage.total_tokens;
|
|
1655
|
+
usage.reasoningTokens = (_c = response2.usage.output_tokens_details) == null ? void 0 : _c.reasoning_tokens;
|
|
1656
|
+
}
|
|
1657
|
+
if (response2.status) {
|
|
1658
|
+
finishReason = mapXaiResponsesFinishReason(response2.status);
|
|
1659
|
+
}
|
|
1660
|
+
return;
|
|
1661
|
+
}
|
|
1662
|
+
if (event.type === "response.output_item.added" || event.type === "response.output_item.done") {
|
|
1663
|
+
const part = event.item;
|
|
1664
|
+
if (part.type === "web_search_call" || part.type === "x_search_call" || part.type === "code_interpreter_call" || part.type === "code_execution_call" || part.type === "view_image_call" || part.type === "view_x_video_call") {
|
|
1665
|
+
if (!seenToolCalls.has(part.id)) {
|
|
1666
|
+
seenToolCalls.add(part.id);
|
|
1667
|
+
const webSearchSubTools = [
|
|
1668
|
+
"web_search",
|
|
1669
|
+
"web_search_with_snippets",
|
|
1670
|
+
"browse_page"
|
|
1671
|
+
];
|
|
1672
|
+
const xSearchSubTools = [
|
|
1673
|
+
"x_user_search",
|
|
1674
|
+
"x_keyword_search",
|
|
1675
|
+
"x_semantic_search",
|
|
1676
|
+
"x_thread_fetch"
|
|
1677
|
+
];
|
|
1678
|
+
let toolName = part.name;
|
|
1679
|
+
if (webSearchSubTools.includes(part.name)) {
|
|
1680
|
+
toolName = webSearchToolName != null ? webSearchToolName : "web_search";
|
|
1681
|
+
} else if (xSearchSubTools.includes(part.name)) {
|
|
1682
|
+
toolName = xSearchToolName != null ? xSearchToolName : "x_search";
|
|
1683
|
+
} else if (part.name === "code_execution") {
|
|
1684
|
+
toolName = codeExecutionToolName != null ? codeExecutionToolName : "code_execution";
|
|
1685
|
+
}
|
|
1686
|
+
controller.enqueue({
|
|
1687
|
+
type: "tool-input-start",
|
|
1688
|
+
id: part.id,
|
|
1689
|
+
toolName
|
|
1690
|
+
});
|
|
1691
|
+
controller.enqueue({
|
|
1692
|
+
type: "tool-input-delta",
|
|
1693
|
+
id: part.id,
|
|
1694
|
+
delta: part.arguments
|
|
1695
|
+
});
|
|
1696
|
+
controller.enqueue({
|
|
1697
|
+
type: "tool-input-end",
|
|
1698
|
+
id: part.id
|
|
1699
|
+
});
|
|
1700
|
+
controller.enqueue({
|
|
1701
|
+
type: "tool-call",
|
|
1702
|
+
toolCallId: part.id,
|
|
1703
|
+
toolName,
|
|
1704
|
+
input: part.arguments,
|
|
1705
|
+
providerExecuted: true
|
|
1706
|
+
});
|
|
1707
|
+
}
|
|
1708
|
+
return;
|
|
1709
|
+
}
|
|
1710
|
+
if (part.type === "message") {
|
|
1711
|
+
for (const contentPart of part.content) {
|
|
1712
|
+
if (contentPart.text && contentPart.text.length > 0) {
|
|
1713
|
+
const blockId = `text-${part.id}`;
|
|
1714
|
+
if (contentBlocks[blockId] == null) {
|
|
1715
|
+
contentBlocks[blockId] = { type: "text" };
|
|
1716
|
+
controller.enqueue({
|
|
1717
|
+
type: "text-start",
|
|
1718
|
+
id: blockId
|
|
1719
|
+
});
|
|
1720
|
+
}
|
|
1721
|
+
controller.enqueue({
|
|
1722
|
+
type: "text-delta",
|
|
1723
|
+
id: blockId,
|
|
1724
|
+
delta: contentPart.text
|
|
1725
|
+
});
|
|
1726
|
+
}
|
|
1727
|
+
if (contentPart.annotations) {
|
|
1728
|
+
for (const annotation of contentPart.annotations) {
|
|
1729
|
+
if (annotation.type === "url_citation" && "url" in annotation) {
|
|
1730
|
+
controller.enqueue({
|
|
1731
|
+
type: "source",
|
|
1732
|
+
sourceType: "url",
|
|
1733
|
+
id: self.config.generateId(),
|
|
1734
|
+
url: annotation.url,
|
|
1735
|
+
title: (_d = annotation.title) != null ? _d : annotation.url
|
|
1736
|
+
});
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
} else if (part.type === "function_call") {
|
|
1742
|
+
if (!seenToolCalls.has(part.call_id)) {
|
|
1743
|
+
seenToolCalls.add(part.call_id);
|
|
1744
|
+
controller.enqueue({
|
|
1745
|
+
type: "tool-input-start",
|
|
1746
|
+
id: part.call_id,
|
|
1747
|
+
toolName: part.name
|
|
1748
|
+
});
|
|
1749
|
+
controller.enqueue({
|
|
1750
|
+
type: "tool-input-delta",
|
|
1751
|
+
id: part.call_id,
|
|
1752
|
+
delta: part.arguments
|
|
1753
|
+
});
|
|
1754
|
+
controller.enqueue({
|
|
1755
|
+
type: "tool-input-end",
|
|
1756
|
+
id: part.call_id
|
|
1757
|
+
});
|
|
1758
|
+
controller.enqueue({
|
|
1759
|
+
type: "tool-call",
|
|
1760
|
+
toolCallId: part.call_id,
|
|
1761
|
+
toolName: part.name,
|
|
1762
|
+
input: part.arguments
|
|
1763
|
+
});
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
},
|
|
1768
|
+
flush(controller) {
|
|
1769
|
+
for (const [blockId, block] of Object.entries(contentBlocks)) {
|
|
1770
|
+
if (block.type === "text") {
|
|
1771
|
+
controller.enqueue({
|
|
1772
|
+
type: "text-end",
|
|
1773
|
+
id: blockId
|
|
1774
|
+
});
|
|
1775
|
+
}
|
|
1776
|
+
}
|
|
1777
|
+
controller.enqueue({ type: "finish", finishReason, usage });
|
|
1778
|
+
}
|
|
1779
|
+
})
|
|
1780
|
+
),
|
|
1781
|
+
request: { body },
|
|
1782
|
+
response: { headers: responseHeaders }
|
|
1783
|
+
};
|
|
1784
|
+
}
|
|
1785
|
+
};
|
|
1786
|
+
|
|
1787
|
+
// src/tool/code-execution.ts
|
|
1788
|
+
import { createProviderDefinedToolFactoryWithOutputSchema as createProviderDefinedToolFactoryWithOutputSchema3 } from "@ai-sdk/provider-utils";
|
|
1789
|
+
import { z as z8 } from "zod/v4";
|
|
1790
|
+
var codeExecutionOutputSchema = z8.object({
|
|
1791
|
+
output: z8.string().describe("the output of the code execution"),
|
|
1792
|
+
error: z8.string().optional().describe("any error that occurred")
|
|
1793
|
+
});
|
|
1794
|
+
var codeExecutionToolFactory = createProviderDefinedToolFactoryWithOutputSchema3({
|
|
1795
|
+
id: "xai.code_execution",
|
|
1796
|
+
name: "code_execution",
|
|
1797
|
+
inputSchema: z8.object({}).describe("no input parameters"),
|
|
1798
|
+
outputSchema: codeExecutionOutputSchema
|
|
1799
|
+
});
|
|
1800
|
+
var codeExecution = (args = {}) => codeExecutionToolFactory(args);
|
|
1801
|
+
|
|
1802
|
+
// src/tool/view-image.ts
|
|
1803
|
+
import { createProviderDefinedToolFactoryWithOutputSchema as createProviderDefinedToolFactoryWithOutputSchema4 } from "@ai-sdk/provider-utils";
|
|
1804
|
+
import { z as z9 } from "zod/v4";
|
|
1805
|
+
var viewImageOutputSchema = z9.object({
|
|
1806
|
+
description: z9.string().describe("description of the image"),
|
|
1807
|
+
objects: z9.array(z9.string()).optional().describe("objects detected in the image")
|
|
1808
|
+
});
|
|
1809
|
+
var viewImageToolFactory = createProviderDefinedToolFactoryWithOutputSchema4({
|
|
1810
|
+
id: "xai.view_image",
|
|
1811
|
+
name: "view_image",
|
|
1812
|
+
inputSchema: z9.object({}).describe("no input parameters"),
|
|
1813
|
+
outputSchema: viewImageOutputSchema
|
|
1814
|
+
});
|
|
1815
|
+
var viewImage = (args = {}) => viewImageToolFactory(args);
|
|
1816
|
+
|
|
1817
|
+
// src/tool/view-x-video.ts
|
|
1818
|
+
import { createProviderDefinedToolFactoryWithOutputSchema as createProviderDefinedToolFactoryWithOutputSchema5 } from "@ai-sdk/provider-utils";
|
|
1819
|
+
import { z as z10 } from "zod/v4";
|
|
1820
|
+
var viewXVideoOutputSchema = z10.object({
|
|
1821
|
+
transcript: z10.string().optional().describe("transcript of the video"),
|
|
1822
|
+
description: z10.string().describe("description of the video content"),
|
|
1823
|
+
duration: z10.number().optional().describe("duration in seconds")
|
|
1824
|
+
});
|
|
1825
|
+
var viewXVideoToolFactory = createProviderDefinedToolFactoryWithOutputSchema5({
|
|
1826
|
+
id: "xai.view_x_video",
|
|
1827
|
+
name: "view_x_video",
|
|
1828
|
+
inputSchema: z10.object({}).describe("no input parameters"),
|
|
1829
|
+
outputSchema: viewXVideoOutputSchema
|
|
1830
|
+
});
|
|
1831
|
+
var viewXVideo = (args = {}) => viewXVideoToolFactory(args);
|
|
1832
|
+
|
|
1833
|
+
// src/tool/index.ts
|
|
1834
|
+
var xaiTools = {
|
|
1835
|
+
codeExecution,
|
|
1836
|
+
viewImage,
|
|
1837
|
+
viewXVideo,
|
|
1838
|
+
webSearch,
|
|
1839
|
+
xSearch
|
|
1840
|
+
};
|
|
1841
|
+
|
|
747
1842
|
// src/version.ts
|
|
748
|
-
var VERSION = true ? "2.0.
|
|
1843
|
+
var VERSION = true ? "2.0.35" : "0.0.0-test";
|
|
749
1844
|
|
|
750
1845
|
// src/xai-provider.ts
|
|
751
1846
|
var xaiErrorStructure = {
|
|
@@ -768,7 +1863,7 @@ function createXai(options = {}) {
|
|
|
768
1863
|
},
|
|
769
1864
|
`ai-sdk/xai/${VERSION}`
|
|
770
1865
|
);
|
|
771
|
-
const
|
|
1866
|
+
const createChatLanguageModel = (modelId) => {
|
|
772
1867
|
return new XaiChatLanguageModel(modelId, {
|
|
773
1868
|
provider: "xai.chat",
|
|
774
1869
|
baseURL,
|
|
@@ -777,6 +1872,15 @@ function createXai(options = {}) {
|
|
|
777
1872
|
fetch: options.fetch
|
|
778
1873
|
});
|
|
779
1874
|
};
|
|
1875
|
+
const createResponsesLanguageModel = (modelId) => {
|
|
1876
|
+
return new XaiResponsesLanguageModel(modelId, {
|
|
1877
|
+
provider: "xai.responses",
|
|
1878
|
+
baseURL,
|
|
1879
|
+
headers: getHeaders,
|
|
1880
|
+
generateId,
|
|
1881
|
+
fetch: options.fetch
|
|
1882
|
+
});
|
|
1883
|
+
};
|
|
780
1884
|
const createImageModel = (modelId) => {
|
|
781
1885
|
return new OpenAICompatibleImageModel(modelId, {
|
|
782
1886
|
provider: "xai.image",
|
|
@@ -786,20 +1890,29 @@ function createXai(options = {}) {
|
|
|
786
1890
|
errorStructure: xaiErrorStructure
|
|
787
1891
|
});
|
|
788
1892
|
};
|
|
789
|
-
const provider = (modelId) =>
|
|
790
|
-
provider.
|
|
791
|
-
provider.
|
|
1893
|
+
const provider = (modelId) => createChatLanguageModel(modelId);
|
|
1894
|
+
provider.specificationVersion = "v2";
|
|
1895
|
+
provider.languageModel = createChatLanguageModel;
|
|
1896
|
+
provider.chat = createChatLanguageModel;
|
|
1897
|
+
provider.responses = createResponsesLanguageModel;
|
|
792
1898
|
provider.textEmbeddingModel = (modelId) => {
|
|
793
1899
|
throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
|
|
794
1900
|
};
|
|
795
1901
|
provider.imageModel = createImageModel;
|
|
796
1902
|
provider.image = createImageModel;
|
|
1903
|
+
provider.tools = xaiTools;
|
|
797
1904
|
return provider;
|
|
798
1905
|
}
|
|
799
1906
|
var xai = createXai();
|
|
800
1907
|
export {
|
|
801
1908
|
VERSION,
|
|
1909
|
+
codeExecution,
|
|
802
1910
|
createXai,
|
|
803
|
-
|
|
1911
|
+
viewImage,
|
|
1912
|
+
viewXVideo,
|
|
1913
|
+
webSearch,
|
|
1914
|
+
xSearch,
|
|
1915
|
+
xai,
|
|
1916
|
+
xaiTools
|
|
804
1917
|
};
|
|
805
1918
|
//# sourceMappingURL=index.mjs.map
|