@wmaurer/effect-ai-amazon-bedrock 0.3.0 → 0.4.1

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.
@@ -98,10 +98,10 @@ export const mapCredentialProviderError = method => error => AiError.isAiError(e
98
98
  // with the exception type carried in the `x-amzn-errortype` header — NOT
99
99
  // Anthropic's nested `{ error: { type, message } }`. Schema-guarded so a
100
100
  // non-conforming body safely yields `undefined`.
101
- const BedrockErrorBody = /*#__PURE__*/Schema.Struct({
101
+ const BedrockErrorBody = /*#__PURE__*/Schema.fromJsonString(/*#__PURE__*/Schema.Struct({
102
102
  message: /*#__PURE__*/Schema.optional(Schema.String),
103
103
  Message: /*#__PURE__*/Schema.optional(Schema.String)
104
- });
104
+ }));
105
105
  /** @internal */
106
106
  const mapStatusCodeError = /*#__PURE__*/Effect.fnUntraced(function* (error, method) {
107
107
  const {
@@ -119,16 +119,7 @@ const mapStatusCodeError = /*#__PURE__*/Effect.fnUntraced(function* (error, meth
119
119
  }
120
120
  // Promote the provider's error message to the structured reason (else 5xx
121
121
  // shows "Server error" and 4xx shows a bare "HTTP <status>").
122
- let json = undefined;
123
- // @effect-diagnostics effect/tryCatchInEffectGen:off
124
- if (Predicate.isNotUndefined(body)) {
125
- try {
126
- json = JSON.parse(body);
127
- } catch {
128
- json = undefined;
129
- }
130
- }
131
- const decoded = Schema.decodeUnknownOption(BedrockErrorBody)(json);
122
+ const decoded = Schema.decodeUnknownOption(BedrockErrorBody)(body);
132
123
  const message = Option.isSome(decoded) ? decoded.value.message ?? decoded.value.Message : undefined;
133
124
  const reason = mapStatusCodeToReason({
134
125
  status,
@@ -181,8 +172,16 @@ const buildInvalidRequestDescription = params => {
181
172
  const truncated = params.body.length > 200 ? params.body.slice(0, 200) + "..." : params.body;
182
173
  parts.push(`Response: ${truncated}`);
183
174
  }
175
+ if (params.message && dataRetentionRejection.test(params.message)) {
176
+ parts.push(dataRetentionHint);
177
+ }
184
178
  return parts.join(" ");
185
179
  };
180
+ // Converse has no request field for the data retention mode, so the AWS message
181
+ // alone leaves the reader looking for one. Only an account-level setting in each
182
+ // region, which the control plane sets, makes such a model callable.
183
+ const dataRetentionRejection = /data retention mode '[^']*' is not available for this model/;
184
+ const dataRetentionHint = "The account's data retention mode in this region does not allow this model." + " Claude Fable 5 and 5.1 need `aws_review`." + " Set the mode with the Bedrock PutAccountDataRetention operation:" + " https://docs.aws.amazon.com/bedrock/latest/userguide/data-retention.html";
186
185
  /**
187
186
  * AWS sends the exception shape as `Name:http://internal.amazon.com/coral/...`.
188
187
  * Only the part before the colon identifies it.
@@ -211,6 +210,16 @@ export const mapStatusCodeToReason = ({
211
210
  message,
212
211
  status
213
212
  }) => {
213
+ // AWS sends this with a 400, but the request is well formed. The account has
214
+ // used up a quota, which a short retry delay will not restore.
215
+ if (errorType === "ServiceQuotaExceededException") {
216
+ return new AiError.QuotaExhaustedError({
217
+ http
218
+ });
219
+ }
220
+ // The exception shape is often the only clue to the cause, as when a 400
221
+ // arrives with the body `{}`.
222
+ const describe = text => Predicate.isUndefined(errorType) ? text : Predicate.isUndefined(text) ? errorType : `${errorType}: ${text}`;
214
223
  const invalidRequestDescription = buildInvalidRequestDescription({
215
224
  status,
216
225
  message,
@@ -223,7 +232,7 @@ export const mapStatusCodeToReason = ({
223
232
  case 404:
224
233
  case 422:
225
234
  return new AiError.InvalidRequestError({
226
- description: invalidRequestDescription,
235
+ description: describe(invalidRequestDescription),
227
236
  http
228
237
  });
229
238
  case 401:
@@ -232,19 +241,19 @@ export const mapStatusCodeToReason = ({
232
241
  kind: (Predicate.isNotUndefined(errorType) ? authenticationKinds[errorType] : undefined
233
242
  // No header, or a shape we do not know: fall back to what the status implies.
234
243
  ) ?? (status === 401 ? "InvalidKey" : "InsufficientPermissions"),
235
- description: message,
244
+ description: describe(message),
236
245
  http
237
246
  });
238
247
  case 408:
239
248
  // ModelTimeoutException: the request took too long to process.
240
249
  return new AiError.InternalProviderError({
241
- description: message ?? "Model timeout",
250
+ description: describe(message) ?? "Model timeout",
242
251
  http
243
252
  });
244
253
  case 424:
245
254
  // ModelErrorException: the model returned an error response.
246
255
  return new AiError.InternalProviderError({
247
- description: message ?? "Model error",
256
+ description: describe(message) ?? "Model error",
248
257
  http
249
258
  });
250
259
  case 429:
@@ -254,12 +263,12 @@ export const mapStatusCodeToReason = ({
254
263
  default:
255
264
  if (status >= 500) {
256
265
  return new AiError.InternalProviderError({
257
- description: message ?? "Server error",
266
+ description: describe(message) ?? "Server error",
258
267
  http
259
268
  });
260
269
  }
261
270
  return new AiError.UnknownError({
262
- description: message,
271
+ description: describe(message),
263
272
  http
264
273
  });
265
274
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","names":[],"sources":["../../src/internal/errors.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../../src/internal/errors.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import type * as Schema from "effect/Schema";
2
+ import type { FinishMetadata, GuardrailOutcome } from "../AmazonBedrockLanguageModel.ts";
3
+ /** @internal */
4
+ export declare const guardrailOutcome: (trace: Schema.MutableJson | undefined) => GuardrailOutcome | null;
5
+ /** @internal */
6
+ export declare const finishMetadata: (stopReason: string | null, trace: Schema.MutableJson | undefined) => FinishMetadata;
7
+ /**
8
+ * Bedrock stops with `guardrail_intervened` both when a guardrail blocks,
9
+ * replacing the text with the guardrail's blocked message, and when it masks,
10
+ * leaving the object JSON.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare const blocksObject: (stopReason: string, text: string) => boolean;
15
+ //# sourceMappingURL=guardrails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/internal/guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAmB,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AA8CzG,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,UAAW,MAAM,CAAC,WAAW,GAAG,SAAS,KAAG,gBAAgB,GAAG,IAgB3F,CAAA;AAED,gBAAgB;AAChB,eAAO,MAAM,cAAc,eAAgB,MAAM,GAAG,IAAI,SAAS,MAAM,CAAC,WAAW,GAAG,SAAS,KAAG,cAIhG,CAAA;AAWF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,eAAgB,MAAM,QAAQ,MAAM,KAAG,OACR,CAAA"}
@@ -0,0 +1,77 @@
1
+ const strength = {
2
+ none: 0,
3
+ masked: 1,
4
+ blocked: 2
5
+ };
6
+ const stronger = (a, b) => strength[b] > strength[a] ? b : a;
7
+ const isObject = value => typeof value === "object" && value !== null && !Array.isArray(value);
8
+ const actionOf = value => value === "BLOCKED" ? "blocked" : value === "ANONYMIZED" ? "masked" : "none";
9
+ const strongestAction = value => {
10
+ let action = "none";
11
+ if (Array.isArray(value)) {
12
+ for (const item of value) {
13
+ action = stronger(action, strongestAction(item));
14
+ }
15
+ } else if (isObject(value)) {
16
+ for (const [key, member] of Object.entries(value)) {
17
+ action = stronger(action, key === "action" && typeof member === "string" ? actionOf(member) : strongestAction(member));
18
+ }
19
+ }
20
+ return action;
21
+ };
22
+ const assessSide = (assessments, policies) => {
23
+ let side = "none";
24
+ for (const assessment of assessments) {
25
+ if (!isObject(assessment)) {
26
+ continue;
27
+ }
28
+ for (const [policy, member] of Object.entries(assessment)) {
29
+ const action = strongestAction(member);
30
+ if (action !== "none" && !policies.includes(policy)) {
31
+ policies.push(policy);
32
+ }
33
+ side = stronger(side, action);
34
+ }
35
+ }
36
+ return side;
37
+ };
38
+ /** @internal */
39
+ export const guardrailOutcome = trace => {
40
+ const guardrail = isObject(trace) ? trace.guardrail : undefined;
41
+ if (!isObject(guardrail)) {
42
+ return null;
43
+ }
44
+ const inputAssessment = guardrail.inputAssessment;
45
+ const outputAssessments = guardrail.outputAssessments;
46
+ const policies = [];
47
+ const input = assessSide(isObject(inputAssessment) ? Object.values(inputAssessment) : [], policies);
48
+ const output = assessSide(isObject(outputAssessments) ? Object.values(outputAssessments).flatMap(chunks => Array.isArray(chunks) ? chunks : []) : [], policies);
49
+ return {
50
+ input,
51
+ output,
52
+ policies
53
+ };
54
+ };
55
+ /** @internal */
56
+ export const finishMetadata = (stopReason, trace) => ({
57
+ stopReason,
58
+ guardrail: guardrailOutcome(trace),
59
+ trace: trace ?? null
60
+ });
61
+ const isJson = text => {
62
+ try {
63
+ JSON.parse(text);
64
+ return true;
65
+ } catch {
66
+ return false;
67
+ }
68
+ };
69
+ /**
70
+ * Bedrock stops with `guardrail_intervened` both when a guardrail blocks,
71
+ * replacing the text with the guardrail's blocked message, and when it masks,
72
+ * leaving the object JSON.
73
+ *
74
+ * @internal
75
+ */
76
+ export const blocksObject = (stopReason, text) => stopReason === "guardrail_intervened" && !isJson(text);
77
+ //# sourceMappingURL=guardrails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.js","names":[],"sources":["../../src/internal/guardrails.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wmaurer/effect-ai-amazon-bedrock",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "author": "Wayne Maurer",
@@ -31,7 +31,7 @@ import type * as Redacted from "effect/Redacted"
31
31
  import * as Stream from "effect/Stream"
32
32
  import { AmazonBedrockConfig } from "./AmazonBedrockConfig.ts"
33
33
  import * as EventStream from "./AmazonBedrockEventStream.ts"
34
- import type { ConverseRequest } from "./AmazonBedrockSchema.ts"
34
+ import type { ConverseRequest, ConverseStreamRequest } from "./AmazonBedrockSchema.ts"
35
35
  import { ConverseResponse, ConverseResponseStreamEvent } from "./AmazonBedrockSchema.ts"
36
36
  import * as Authentication from "./internal/credentials.ts"
37
37
  import * as Errors from "./internal/errors.ts"
@@ -62,7 +62,7 @@ export interface Service {
62
62
  * all errors to the unified `AiError` type.
63
63
  */
64
64
  readonly converseStream: (options: {
65
- readonly payload: typeof ConverseRequest.Encoded
65
+ readonly payload: typeof ConverseStreamRequest.Encoded
66
66
  }) => Stream.Stream<ConverseResponseStreamEvent, AiError.AiError>
67
67
  }
68
68