@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.
- package/CHANGELOG.md +21 -0
- package/README.md +99 -9
- package/dist/AmazonBedrockClient.d.ts +2 -2
- package/dist/AmazonBedrockClient.d.ts.map +1 -1
- package/dist/AmazonBedrockLanguageModel.d.ts +188 -25
- package/dist/AmazonBedrockLanguageModel.d.ts.map +1 -1
- package/dist/AmazonBedrockLanguageModel.js +223 -25
- package/dist/AmazonBedrockLanguageModel.js.map +1 -1
- package/dist/AmazonBedrockSchema.d.ts +216 -4
- package/dist/AmazonBedrockSchema.d.ts.map +1 -1
- package/dist/AmazonBedrockSchema.js +175 -9
- package/dist/AmazonBedrockSchema.js.map +1 -1
- package/dist/internal/errors.d.ts.map +1 -1
- package/dist/internal/errors.js +27 -18
- package/dist/internal/errors.js.map +1 -1
- package/dist/internal/guardrails.d.ts +15 -0
- package/dist/internal/guardrails.d.ts.map +1 -0
- package/dist/internal/guardrails.js +77 -0
- package/dist/internal/guardrails.js.map +1 -0
- package/package.json +1 -1
- package/src/AmazonBedrockClient.ts +2 -2
- package/src/AmazonBedrockLanguageModel.ts +409 -46
- package/src/AmazonBedrockSchema.ts +193 -9
- package/src/internal/errors.ts +35 -19
- package/src/internal/guardrails.ts +91 -0
package/dist/internal/errors.js
CHANGED
|
@@ -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
|
-
|
|
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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
|
|
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
|
@@ -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
|
|
65
|
+
readonly payload: typeof ConverseStreamRequest.Encoded
|
|
66
66
|
}) => Stream.Stream<ConverseResponseStreamEvent, AiError.AiError>
|
|
67
67
|
}
|
|
68
68
|
|