@ai-sdk/amazon-bedrock 4.0.127 → 4.0.128

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.
@@ -35,7 +35,7 @@ var import_provider_utils = require("@ai-sdk/provider-utils");
35
35
  var import_aws4fetch = require("aws4fetch");
36
36
 
37
37
  // src/version.ts
38
- var VERSION = true ? "4.0.127" : "0.0.0-test";
38
+ var VERSION = true ? "4.0.128" : "0.0.0-test";
39
39
 
40
40
  // src/bedrock-sigv4-fetch.ts
41
41
  function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
@@ -23,7 +23,7 @@ import {
23
23
  import { AwsV4Signer } from "aws4fetch";
24
24
 
25
25
  // src/version.ts
26
- var VERSION = true ? "4.0.127" : "0.0.0-test";
26
+ var VERSION = true ? "4.0.128" : "0.0.0-test";
27
27
 
28
28
  // src/bedrock-sigv4-fetch.ts
29
29
  function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/amazon-bedrock",
3
- "version": "4.0.127",
3
+ "version": "4.0.128",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -44,10 +44,10 @@
44
44
  "@smithy/eventstream-codec": "^4.0.1",
45
45
  "@smithy/util-utf8": "^4.0.0",
46
46
  "aws4fetch": "^1.0.20",
47
- "@ai-sdk/anthropic": "3.0.92",
48
- "@ai-sdk/openai": "3.0.80",
49
47
  "@ai-sdk/provider": "3.0.13",
50
- "@ai-sdk/provider-utils": "4.0.35"
48
+ "@ai-sdk/anthropic": "3.0.92",
49
+ "@ai-sdk/provider-utils": "4.0.35",
50
+ "@ai-sdk/openai": "3.0.80"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "20.17.24",
@@ -30,9 +30,12 @@ type DoEmbedResponse = Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>;
30
30
  export class BedrockEmbeddingModel implements EmbeddingModelV3 {
31
31
  readonly specificationVersion = 'v3';
32
32
  readonly provider = 'amazon-bedrock';
33
- readonly maxEmbeddingsPerCall = 1;
34
33
  readonly supportsParallelCalls = true;
35
34
 
35
+ get maxEmbeddingsPerCall() {
36
+ return isCohereEmbeddingModel(this.modelId) ? 96 : 1;
37
+ }
38
+
36
39
  constructor(
37
40
  readonly modelId: BedrockEmbeddingModelId,
38
41
  private readonly config: BedrockEmbeddingConfig,
@@ -71,11 +74,8 @@ export class BedrockEmbeddingModel implements EmbeddingModelV3 {
71
74
  // Note: Different embedding model families expect different request/response
72
75
  // payloads (e.g. Titan vs Cohere vs Nova). We keep the public interface stable and
73
76
  // adapt here based on the modelId.
74
- const isNovaModel =
75
- this.modelId.startsWith('amazon.nova-') && this.modelId.includes('embed');
76
- // Use `includes` so cross-region inference profile ids (e.g.
77
- // `us.cohere.embed-v4:0`, `global.cohere.embed-v4:0`) are detected too.
78
- const isCohereModel = this.modelId.includes('cohere.embed-');
77
+ const isNovaModel = isNovaEmbeddingModel(this.modelId);
78
+ const isCohereModel = isCohereEmbeddingModel(this.modelId);
79
79
 
80
80
  const args = isNovaModel
81
81
  ? {
@@ -95,7 +95,7 @@ export class BedrockEmbeddingModel implements EmbeddingModelV3 {
95
95
  // Cohere embedding models on Bedrock require `input_type`.
96
96
  // Without it, the service attempts other schema branches and rejects the request.
97
97
  input_type: bedrockOptions.inputType ?? 'search_query',
98
- texts: [values[0]],
98
+ texts: values,
99
99
  truncate: bedrockOptions.truncate,
100
100
  output_dimension: bedrockOptions.outputDimension,
101
101
  }
@@ -123,11 +123,11 @@ export class BedrockEmbeddingModel implements EmbeddingModelV3 {
123
123
  abortSignal,
124
124
  });
125
125
 
126
- // Extract embedding based on response format
127
- let embedding: number[];
126
+ // Extract embeddings based on response format
127
+ let embeddings: number[][];
128
128
  if ('embedding' in response) {
129
129
  // Titan response
130
- embedding = response.embedding;
130
+ embeddings = [response.embedding];
131
131
  } else if (Array.isArray(response.embeddings)) {
132
132
  const firstEmbedding = response.embeddings[0];
133
133
  if (
@@ -136,14 +136,14 @@ export class BedrockEmbeddingModel implements EmbeddingModelV3 {
136
136
  'embeddingType' in firstEmbedding
137
137
  ) {
138
138
  // Nova response
139
- embedding = firstEmbedding.embedding;
139
+ embeddings = [firstEmbedding.embedding];
140
140
  } else {
141
141
  // Cohere v3 response
142
- embedding = firstEmbedding as number[];
142
+ embeddings = response.embeddings as number[][];
143
143
  }
144
144
  } else {
145
145
  // Cohere v4 response
146
- embedding = response.embeddings.float[0];
146
+ embeddings = response.embeddings.float;
147
147
  }
148
148
 
149
149
  // Extract token count based on response format
@@ -158,13 +158,23 @@ export class BedrockEmbeddingModel implements EmbeddingModelV3 {
158
158
  : headerTokenCount;
159
159
 
160
160
  return {
161
- embeddings: [embedding],
161
+ embeddings,
162
162
  usage: { tokens },
163
163
  warnings: [],
164
164
  };
165
165
  }
166
166
  }
167
167
 
168
+ function isCohereEmbeddingModel(modelId: string) {
169
+ // Use `includes` so cross-region inference profile ids (e.g.
170
+ // `us.cohere.embed-v4:0`, `global.cohere.embed-v4:0`) are detected too.
171
+ return modelId.includes('cohere.embed-');
172
+ }
173
+
174
+ function isNovaEmbeddingModel(modelId: string) {
175
+ return modelId.startsWith('amazon.nova-') && modelId.includes('embed');
176
+ }
177
+
168
178
  const BedrockEmbeddingResponseSchema = z.union([
169
179
  // Titan-style response
170
180
  z.object({