@ai-sdk/alibaba 1.0.25 → 1.0.26
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 +6 -0
- package/README.md +20 -1
- package/dist/index.d.mts +43 -2
- package/dist/index.d.ts +43 -2
- package/dist/index.js +216 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +212 -55
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/alibaba-embedding-model.ts +161 -0
- package/src/alibaba-embedding-options.ts +33 -0
- package/src/alibaba-provider.ts +50 -4
- package/src/index.ts +4 -0
package/dist/index.mjs
CHANGED
|
@@ -700,75 +700,224 @@ var alibabaChatChunkSchema = z3.object({
|
|
|
700
700
|
// Usage only appears in final chunk
|
|
701
701
|
});
|
|
702
702
|
|
|
703
|
-
// src/alibaba-
|
|
703
|
+
// src/alibaba-embedding-model.ts
|
|
704
704
|
import {
|
|
705
|
-
|
|
705
|
+
TooManyEmbeddingValuesForCallError,
|
|
706
|
+
UnsupportedFunctionalityError as UnsupportedFunctionalityError2
|
|
706
707
|
} from "@ai-sdk/provider";
|
|
707
708
|
import {
|
|
708
709
|
combineHeaders as combineHeaders2,
|
|
709
|
-
convertUint8ArrayToBase64,
|
|
710
710
|
createJsonErrorResponseHandler as createJsonErrorResponseHandler2,
|
|
711
711
|
createJsonResponseHandler as createJsonResponseHandler2,
|
|
712
|
+
parseProviderOptions as parseProviderOptions2,
|
|
713
|
+
postJsonToApi as postJsonToApi2
|
|
714
|
+
} from "@ai-sdk/provider-utils";
|
|
715
|
+
import { z as z5 } from "zod/v4";
|
|
716
|
+
|
|
717
|
+
// src/alibaba-embedding-options.ts
|
|
718
|
+
import { z as z4 } from "zod/v4";
|
|
719
|
+
var alibabaEmbeddingModelOptions = z4.object({
|
|
720
|
+
/**
|
|
721
|
+
* Differentiates query text from document text for asymmetric retrieval tasks.
|
|
722
|
+
* Defaults to `document`.
|
|
723
|
+
*/
|
|
724
|
+
textType: z4.enum(["query", "document"]).optional(),
|
|
725
|
+
/**
|
|
726
|
+
* The dimension of the output embedding vectors. Defaults to 1024.
|
|
727
|
+
*
|
|
728
|
+
* `text-embedding-v4` also supports 1536 and 2048 dimensions.
|
|
729
|
+
*/
|
|
730
|
+
dimension: z4.number().optional(),
|
|
731
|
+
/**
|
|
732
|
+
* The output vector type. Defaults to `dense`.
|
|
733
|
+
*
|
|
734
|
+
* Sparse-only output is not supported by the AI SDK embedding interface,
|
|
735
|
+
* which requires dense number arrays.
|
|
736
|
+
*/
|
|
737
|
+
outputType: z4.enum(["dense", "sparse", "dense&sparse"]).optional()
|
|
738
|
+
});
|
|
739
|
+
|
|
740
|
+
// src/alibaba-embedding-model.ts
|
|
741
|
+
var alibabaEmbeddingFailedResponseHandler = createJsonErrorResponseHandler2({
|
|
742
|
+
errorSchema: z5.object({
|
|
743
|
+
code: z5.string().nullish(),
|
|
744
|
+
message: z5.string(),
|
|
745
|
+
request_id: z5.string().nullish()
|
|
746
|
+
}),
|
|
747
|
+
errorToMessage: (data) => data.message
|
|
748
|
+
});
|
|
749
|
+
var AlibabaEmbeddingModel = class {
|
|
750
|
+
constructor(modelId, config) {
|
|
751
|
+
this.specificationVersion = "v3";
|
|
752
|
+
this.maxEmbeddingsPerCall = 10;
|
|
753
|
+
this.supportsParallelCalls = false;
|
|
754
|
+
this.modelId = modelId;
|
|
755
|
+
this.config = config;
|
|
756
|
+
}
|
|
757
|
+
get provider() {
|
|
758
|
+
return this.config.provider;
|
|
759
|
+
}
|
|
760
|
+
async doEmbed({
|
|
761
|
+
values,
|
|
762
|
+
headers,
|
|
763
|
+
abortSignal,
|
|
764
|
+
providerOptions
|
|
765
|
+
}) {
|
|
766
|
+
if (values.length > this.maxEmbeddingsPerCall) {
|
|
767
|
+
throw new TooManyEmbeddingValuesForCallError({
|
|
768
|
+
provider: this.provider,
|
|
769
|
+
modelId: this.modelId,
|
|
770
|
+
maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,
|
|
771
|
+
values
|
|
772
|
+
});
|
|
773
|
+
}
|
|
774
|
+
const alibabaOptions = await parseProviderOptions2({
|
|
775
|
+
provider: "alibaba",
|
|
776
|
+
providerOptions,
|
|
777
|
+
schema: alibabaEmbeddingModelOptions
|
|
778
|
+
});
|
|
779
|
+
if ((alibabaOptions == null ? void 0 : alibabaOptions.outputType) === "sparse") {
|
|
780
|
+
throw new UnsupportedFunctionalityError2({
|
|
781
|
+
functionality: "Alibaba embedding outputType 'sparse'",
|
|
782
|
+
message: "Alibaba embedding outputType 'sparse' is not supported because AI SDK embeddings require dense number arrays. Use 'dense' or 'dense&sparse' instead."
|
|
783
|
+
});
|
|
784
|
+
}
|
|
785
|
+
const {
|
|
786
|
+
responseHeaders,
|
|
787
|
+
value: response,
|
|
788
|
+
rawValue
|
|
789
|
+
} = await postJsonToApi2({
|
|
790
|
+
url: `${this.config.baseURL}/services/embeddings/text-embedding/text-embedding`,
|
|
791
|
+
headers: combineHeaders2(this.config.headers(), headers),
|
|
792
|
+
body: {
|
|
793
|
+
model: this.modelId,
|
|
794
|
+
input: {
|
|
795
|
+
texts: values
|
|
796
|
+
},
|
|
797
|
+
parameters: {
|
|
798
|
+
text_type: alibabaOptions == null ? void 0 : alibabaOptions.textType,
|
|
799
|
+
dimension: alibabaOptions == null ? void 0 : alibabaOptions.dimension,
|
|
800
|
+
output_type: alibabaOptions == null ? void 0 : alibabaOptions.outputType
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
failedResponseHandler: alibabaEmbeddingFailedResponseHandler,
|
|
804
|
+
successfulResponseHandler: createJsonResponseHandler2(
|
|
805
|
+
alibabaTextEmbeddingResponseSchema
|
|
806
|
+
),
|
|
807
|
+
abortSignal,
|
|
808
|
+
fetch: this.config.fetch
|
|
809
|
+
});
|
|
810
|
+
const sortedEmbeddings = response.output.embeddings.sort(
|
|
811
|
+
(a, b) => a.text_index - b.text_index
|
|
812
|
+
);
|
|
813
|
+
const sparseEmbeddings = sortedEmbeddings.map(
|
|
814
|
+
(item) => item.sparse_embedding == null ? void 0 : {
|
|
815
|
+
textIndex: item.text_index,
|
|
816
|
+
sparseEmbedding: item.sparse_embedding
|
|
817
|
+
}
|
|
818
|
+
).filter((item) => item != null);
|
|
819
|
+
return {
|
|
820
|
+
warnings: [],
|
|
821
|
+
embeddings: sortedEmbeddings.map((item) => item.embedding),
|
|
822
|
+
usage: response.usage ? { tokens: response.usage.total_tokens } : void 0,
|
|
823
|
+
providerMetadata: sparseEmbeddings.length > 0 ? {
|
|
824
|
+
alibaba: {
|
|
825
|
+
sparseEmbeddings
|
|
826
|
+
}
|
|
827
|
+
} : void 0,
|
|
828
|
+
response: { headers: responseHeaders, body: rawValue }
|
|
829
|
+
};
|
|
830
|
+
}
|
|
831
|
+
};
|
|
832
|
+
var alibabaTextEmbeddingSparseEmbeddingSchema = z5.object({
|
|
833
|
+
index: z5.number(),
|
|
834
|
+
value: z5.number(),
|
|
835
|
+
token: z5.string().nullish()
|
|
836
|
+
});
|
|
837
|
+
var alibabaTextEmbeddingResponseSchema = z5.object({
|
|
838
|
+
output: z5.object({
|
|
839
|
+
embeddings: z5.array(
|
|
840
|
+
z5.object({
|
|
841
|
+
embedding: z5.array(z5.number()),
|
|
842
|
+
text_index: z5.number(),
|
|
843
|
+
sparse_embedding: z5.array(alibabaTextEmbeddingSparseEmbeddingSchema).nullish()
|
|
844
|
+
})
|
|
845
|
+
)
|
|
846
|
+
}),
|
|
847
|
+
usage: z5.object({
|
|
848
|
+
total_tokens: z5.number()
|
|
849
|
+
}).nullish()
|
|
850
|
+
});
|
|
851
|
+
|
|
852
|
+
// src/alibaba-video-model.ts
|
|
853
|
+
import {
|
|
854
|
+
AISDKError
|
|
855
|
+
} from "@ai-sdk/provider";
|
|
856
|
+
import {
|
|
857
|
+
combineHeaders as combineHeaders3,
|
|
858
|
+
convertUint8ArrayToBase64,
|
|
859
|
+
createJsonErrorResponseHandler as createJsonErrorResponseHandler3,
|
|
860
|
+
createJsonResponseHandler as createJsonResponseHandler3,
|
|
712
861
|
delay,
|
|
713
862
|
getFromApi,
|
|
714
863
|
lazySchema,
|
|
715
|
-
parseProviderOptions as
|
|
716
|
-
postJsonToApi as
|
|
864
|
+
parseProviderOptions as parseProviderOptions3,
|
|
865
|
+
postJsonToApi as postJsonToApi3,
|
|
717
866
|
resolve,
|
|
718
867
|
zodSchema
|
|
719
868
|
} from "@ai-sdk/provider-utils";
|
|
720
|
-
import { z as
|
|
869
|
+
import { z as z6 } from "zod/v4";
|
|
721
870
|
var alibabaVideoModelOptionsSchema = lazySchema(
|
|
722
871
|
() => zodSchema(
|
|
723
|
-
|
|
724
|
-
negativePrompt:
|
|
725
|
-
audioUrl:
|
|
726
|
-
promptExtend:
|
|
727
|
-
shotType:
|
|
728
|
-
watermark:
|
|
729
|
-
audio:
|
|
730
|
-
referenceUrls:
|
|
731
|
-
pollIntervalMs:
|
|
732
|
-
pollTimeoutMs:
|
|
872
|
+
z6.object({
|
|
873
|
+
negativePrompt: z6.string().nullish(),
|
|
874
|
+
audioUrl: z6.string().nullish(),
|
|
875
|
+
promptExtend: z6.boolean().nullish(),
|
|
876
|
+
shotType: z6.enum(["single", "multi"]).nullish(),
|
|
877
|
+
watermark: z6.boolean().nullish(),
|
|
878
|
+
audio: z6.boolean().nullish(),
|
|
879
|
+
referenceUrls: z6.array(z6.string()).nullish(),
|
|
880
|
+
pollIntervalMs: z6.number().positive().nullish(),
|
|
881
|
+
pollTimeoutMs: z6.number().positive().nullish()
|
|
733
882
|
}).passthrough()
|
|
734
883
|
)
|
|
735
884
|
);
|
|
736
|
-
var alibabaVideoErrorSchema =
|
|
737
|
-
code:
|
|
738
|
-
message:
|
|
739
|
-
request_id:
|
|
885
|
+
var alibabaVideoErrorSchema = z6.object({
|
|
886
|
+
code: z6.string().nullish(),
|
|
887
|
+
message: z6.string(),
|
|
888
|
+
request_id: z6.string().nullish()
|
|
740
889
|
});
|
|
741
|
-
var alibabaVideoFailedResponseHandler =
|
|
890
|
+
var alibabaVideoFailedResponseHandler = createJsonErrorResponseHandler3({
|
|
742
891
|
errorSchema: alibabaVideoErrorSchema,
|
|
743
892
|
errorToMessage: (data) => data.message
|
|
744
893
|
});
|
|
745
|
-
var alibabaVideoCreateTaskSchema =
|
|
746
|
-
output:
|
|
747
|
-
task_status:
|
|
748
|
-
task_id:
|
|
894
|
+
var alibabaVideoCreateTaskSchema = z6.object({
|
|
895
|
+
output: z6.object({
|
|
896
|
+
task_status: z6.string(),
|
|
897
|
+
task_id: z6.string()
|
|
749
898
|
}).nullish(),
|
|
750
|
-
request_id:
|
|
899
|
+
request_id: z6.string().nullish()
|
|
751
900
|
});
|
|
752
|
-
var alibabaVideoTaskStatusSchema =
|
|
753
|
-
output:
|
|
754
|
-
task_id:
|
|
755
|
-
task_status:
|
|
756
|
-
video_url:
|
|
757
|
-
submit_time:
|
|
758
|
-
scheduled_time:
|
|
759
|
-
end_time:
|
|
760
|
-
orig_prompt:
|
|
761
|
-
actual_prompt:
|
|
762
|
-
code:
|
|
763
|
-
message:
|
|
901
|
+
var alibabaVideoTaskStatusSchema = z6.object({
|
|
902
|
+
output: z6.object({
|
|
903
|
+
task_id: z6.string(),
|
|
904
|
+
task_status: z6.string(),
|
|
905
|
+
video_url: z6.string().nullish(),
|
|
906
|
+
submit_time: z6.string().nullish(),
|
|
907
|
+
scheduled_time: z6.string().nullish(),
|
|
908
|
+
end_time: z6.string().nullish(),
|
|
909
|
+
orig_prompt: z6.string().nullish(),
|
|
910
|
+
actual_prompt: z6.string().nullish(),
|
|
911
|
+
code: z6.string().nullish(),
|
|
912
|
+
message: z6.string().nullish()
|
|
764
913
|
}).nullish(),
|
|
765
|
-
usage:
|
|
766
|
-
duration:
|
|
767
|
-
output_video_duration:
|
|
768
|
-
SR:
|
|
769
|
-
size:
|
|
914
|
+
usage: z6.object({
|
|
915
|
+
duration: z6.number().nullish(),
|
|
916
|
+
output_video_duration: z6.number().nullish(),
|
|
917
|
+
SR: z6.number().nullish(),
|
|
918
|
+
size: z6.string().nullish()
|
|
770
919
|
}).nullish(),
|
|
771
|
-
request_id:
|
|
920
|
+
request_id: z6.string().nullish()
|
|
772
921
|
});
|
|
773
922
|
function detectMode(modelId) {
|
|
774
923
|
if (modelId.includes("-i2v")) return "i2v";
|
|
@@ -790,7 +939,7 @@ var AlibabaVideoModel = class {
|
|
|
790
939
|
const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
|
|
791
940
|
const warnings = [];
|
|
792
941
|
const mode = detectMode(this.modelId);
|
|
793
|
-
const alibabaOptions = await
|
|
942
|
+
const alibabaOptions = await parseProviderOptions3({
|
|
794
943
|
provider: "alibaba",
|
|
795
944
|
providerOptions: options.providerOptions,
|
|
796
945
|
schema: alibabaVideoModelOptionsSchema
|
|
@@ -878,9 +1027,9 @@ var AlibabaVideoModel = class {
|
|
|
878
1027
|
details: "Alibaba video models only support generating 1 video per call."
|
|
879
1028
|
});
|
|
880
1029
|
}
|
|
881
|
-
const { value: createResponse } = await
|
|
1030
|
+
const { value: createResponse } = await postJsonToApi3({
|
|
882
1031
|
url: `${this.config.baseURL}/api/v1/services/aigc/video-generation/video-synthesis`,
|
|
883
|
-
headers:
|
|
1032
|
+
headers: combineHeaders3(
|
|
884
1033
|
await resolve(this.config.headers),
|
|
885
1034
|
options.headers,
|
|
886
1035
|
{
|
|
@@ -892,7 +1041,7 @@ var AlibabaVideoModel = class {
|
|
|
892
1041
|
input,
|
|
893
1042
|
parameters
|
|
894
1043
|
},
|
|
895
|
-
successfulResponseHandler:
|
|
1044
|
+
successfulResponseHandler: createJsonResponseHandler3(
|
|
896
1045
|
alibabaVideoCreateTaskSchema
|
|
897
1046
|
),
|
|
898
1047
|
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
@@ -921,11 +1070,11 @@ var AlibabaVideoModel = class {
|
|
|
921
1070
|
}
|
|
922
1071
|
const { value: statusResponse, responseHeaders: pollHeaders } = await getFromApi({
|
|
923
1072
|
url: `${this.config.baseURL}/api/v1/tasks/${taskId}`,
|
|
924
|
-
headers:
|
|
1073
|
+
headers: combineHeaders3(
|
|
925
1074
|
await resolve(this.config.headers),
|
|
926
1075
|
options.headers
|
|
927
1076
|
),
|
|
928
|
-
successfulResponseHandler:
|
|
1077
|
+
successfulResponseHandler: createJsonResponseHandler3(
|
|
929
1078
|
alibabaVideoTaskStatusSchema
|
|
930
1079
|
),
|
|
931
1080
|
failedResponseHandler: alibabaVideoFailedResponseHandler,
|
|
@@ -986,13 +1135,14 @@ var AlibabaVideoModel = class {
|
|
|
986
1135
|
};
|
|
987
1136
|
|
|
988
1137
|
// src/version.ts
|
|
989
|
-
var VERSION = true ? "1.0.
|
|
1138
|
+
var VERSION = true ? "1.0.26" : "0.0.0-test";
|
|
990
1139
|
|
|
991
1140
|
// src/alibaba-provider.ts
|
|
992
1141
|
function createAlibaba(options = {}) {
|
|
993
|
-
var _a, _b;
|
|
1142
|
+
var _a, _b, _c;
|
|
994
1143
|
const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
|
|
995
1144
|
const videoBaseURL = (_b = withoutTrailingSlash(options.videoBaseURL)) != null ? _b : "https://dashscope-intl.aliyuncs.com";
|
|
1145
|
+
const embeddingBaseURL = (_c = withoutTrailingSlash(options.embeddingBaseURL)) != null ? _c : "https://dashscope-intl.aliyuncs.com/api/v1";
|
|
996
1146
|
const getHeaders = () => withUserAgentSuffix(
|
|
997
1147
|
{
|
|
998
1148
|
Authorization: `Bearer ${loadApiKey({
|
|
@@ -1014,6 +1164,12 @@ function createAlibaba(options = {}) {
|
|
|
1014
1164
|
includeUsage: (_a2 = options.includeUsage) != null ? _a2 : true
|
|
1015
1165
|
});
|
|
1016
1166
|
};
|
|
1167
|
+
const createEmbeddingModel = (modelId) => new AlibabaEmbeddingModel(modelId, {
|
|
1168
|
+
provider: "alibaba.embedding",
|
|
1169
|
+
baseURL: embeddingBaseURL,
|
|
1170
|
+
headers: getHeaders,
|
|
1171
|
+
fetch: options.fetch
|
|
1172
|
+
});
|
|
1017
1173
|
const createVideoModel = (modelId) => new AlibabaVideoModel(modelId, {
|
|
1018
1174
|
provider: "alibaba.video",
|
|
1019
1175
|
baseURL: videoBaseURL,
|
|
@@ -1031,14 +1187,15 @@ function createAlibaba(options = {}) {
|
|
|
1031
1187
|
provider.specificationVersion = "v3";
|
|
1032
1188
|
provider.languageModel = createLanguageModel;
|
|
1033
1189
|
provider.chatModel = createLanguageModel;
|
|
1190
|
+
provider.embedding = createEmbeddingModel;
|
|
1191
|
+
provider.embeddingModel = createEmbeddingModel;
|
|
1192
|
+
provider.textEmbedding = createEmbeddingModel;
|
|
1193
|
+
provider.textEmbeddingModel = createEmbeddingModel;
|
|
1034
1194
|
provider.video = createVideoModel;
|
|
1035
1195
|
provider.videoModel = createVideoModel;
|
|
1036
1196
|
provider.imageModel = (modelId) => {
|
|
1037
1197
|
throw new NoSuchModelError({ modelId, modelType: "imageModel" });
|
|
1038
1198
|
};
|
|
1039
|
-
provider.embeddingModel = (modelId) => {
|
|
1040
|
-
throw new NoSuchModelError({ modelId, modelType: "embeddingModel" });
|
|
1041
|
-
};
|
|
1042
1199
|
return provider;
|
|
1043
1200
|
}
|
|
1044
1201
|
var alibaba = createAlibaba();
|