Skip to content

Commit b293971

Browse files
authored
feat(client-bedrock-runtime): use WebSocketHandler in browser (#7175)
1 parent ca426fe commit b293971

File tree

7 files changed

+30
-10
lines changed

7 files changed

+30
-10
lines changed

clients/client-bedrock-runtime/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"@aws-sdk/middleware-logger": "*",
2929
"@aws-sdk/middleware-recursion-detection": "*",
3030
"@aws-sdk/middleware-user-agent": "*",
31+
"@aws-sdk/middleware-websocket": "*",
3132
"@aws-sdk/region-config-resolver": "*",
3233
"@aws-sdk/token-providers": "*",
3334
"@aws-sdk/types": "*",

clients/client-bedrock-runtime/src/BedrockRuntimeClient.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
UserAgentInputConfig,
1919
UserAgentResolvedConfig,
2020
} from "@aws-sdk/middleware-user-agent";
21+
import { resolveWebSocketConfig, WebSocketInputConfig, WebSocketResolvedConfig } from "@aws-sdk/middleware-websocket";
2122
import { EventStreamPayloadHandlerProvider as __EventStreamPayloadHandlerProvider } from "@aws-sdk/types";
2223
import { RegionInputConfig, RegionResolvedConfig, resolveRegionConfig } from "@smithy/config-resolver";
2324
import {
@@ -294,6 +295,7 @@ export type BedrockRuntimeClientConfigType = Partial<__SmithyConfiguration<__Htt
294295
EventStreamSerdeInputConfig &
295296
HttpAuthSchemeInputConfig &
296297
EventStreamInputConfig &
298+
WebSocketInputConfig &
297299
ClientInputEndpointParameters;
298300
/**
299301
* @public
@@ -316,6 +318,7 @@ export type BedrockRuntimeClientResolvedConfigType = __SmithyResolvedConfigurati
316318
EventStreamSerdeResolvedConfig &
317319
HttpAuthSchemeResolvedConfig &
318320
EventStreamResolvedConfig &
321+
WebSocketResolvedConfig &
319322
ClientResolvedEndpointParameters;
320323
/**
321324
* @public
@@ -352,8 +355,9 @@ export class BedrockRuntimeClient extends __Client<
352355
const _config_7 = resolveEventStreamSerdeConfig(_config_6);
353356
const _config_8 = resolveHttpAuthSchemeConfig(_config_7);
354357
const _config_9 = resolveEventStreamConfig(_config_8);
355-
const _config_10 = resolveRuntimeExtensions(_config_9, configuration?.extensions || []);
356-
this.config = _config_10;
358+
const _config_10 = resolveWebSocketConfig(_config_9);
359+
const _config_11 = resolveRuntimeExtensions(_config_10, configuration?.extensions || []);
360+
this.config = _config_11;
357361
this.middlewareStack.use(getUserAgentPlugin(this.config));
358362
this.middlewareStack.use(getRetryPlugin(this.config));
359363
this.middlewareStack.use(getContentLengthPlugin(this.config));

clients/client-bedrock-runtime/src/commands/InvokeModelWithBidirectionalStreamCommand.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// smithy-typescript generated code
22
import { getEventStreamPlugin } from "@aws-sdk/middleware-eventstream";
3+
import { getWebSocketPlugin } from "@aws-sdk/middleware-websocket";
34
import { getEndpointPlugin } from "@smithy/middleware-endpoint";
45
import { getSerdePlugin } from "@smithy/middleware-serde";
56
import { Command as $Command } from "@smithy/smithy-client";
@@ -145,6 +146,9 @@ export class InvokeModelWithBidirectionalStreamCommand extends $Command
145146
getSerdePlugin(config, this.serialize, this.deserialize),
146147
getEndpointPlugin(config, Command.getEndpointParameterInstructions()),
147148
getEventStreamPlugin(config),
149+
getWebSocketPlugin(config, {
150+
headerPrefix: "x-amz-bedrock-",
151+
}),
148152
];
149153
})
150154
.s("AmazonBedrockFrontendService", "InvokeModelWithBidirectionalStream", {

clients/client-bedrock-runtime/src/models/models_0.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// smithy-typescript generated code
22
import { ExceptionOptionType as __ExceptionOptionType, SENSITIVE_STRING } from "@smithy/smithy-client";
3-
43
import { DocumentType as __DocumentType } from "@smithy/types";
54

65
import { BedrockRuntimeServiceException as __BaseException } from "./BedrockRuntimeServiceException";

clients/client-bedrock-runtime/src/runtimeConfig.browser.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,16 @@
33
import packageInfo from "../package.json"; // eslint-disable-line
44

55
import { Sha256 } from "@aws-crypto/sha256-browser";
6+
import {
7+
WebSocketFetchHandlerOptions,
8+
WebSocketFetchHandler as WebSocketRequestHandler,
9+
eventStreamPayloadHandlerProvider,
10+
} from "@aws-sdk/middleware-websocket";
611
import { createDefaultUserAgentProvider } from "@aws-sdk/util-user-agent-browser";
712
import { DEFAULT_USE_DUALSTACK_ENDPOINT, DEFAULT_USE_FIPS_ENDPOINT } from "@smithy/config-resolver";
813
import { eventStreamSerdeProvider } from "@smithy/eventstream-serde-browser";
9-
import { FetchHttpHandler as RequestHandler, streamCollector } from "@smithy/fetch-http-handler";
10-
import { invalidFunction, invalidProvider } from "@smithy/invalid-dependency";
14+
import { FetchHttpHandler as HttpRequestHandler, streamCollector } from "@smithy/fetch-http-handler";
15+
import { invalidProvider } from "@smithy/invalid-dependency";
1116
import { calculateBodyLength } from "@smithy/util-body-length-browser";
1217
import { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE } from "@smithy/util-retry";
1318
import { BedrockRuntimeClientConfig } from "./BedrockRuntimeClient";
@@ -33,13 +38,17 @@ export const getRuntimeConfig = (config: BedrockRuntimeClientConfig) => {
3338
defaultUserAgentProvider:
3439
config?.defaultUserAgentProvider ??
3540
createDefaultUserAgentProvider({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),
36-
eventStreamPayloadHandlerProvider:
37-
config?.eventStreamPayloadHandlerProvider ??
38-
(() => ({ handle: invalidFunction("event stream request is not supported in browser.") })),
41+
eventStreamPayloadHandlerProvider: config?.eventStreamPayloadHandlerProvider ?? eventStreamPayloadHandlerProvider,
3942
eventStreamSerdeProvider: config?.eventStreamSerdeProvider ?? eventStreamSerdeProvider,
4043
maxAttempts: config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,
4144
region: config?.region ?? invalidProvider("Region is missing"),
42-
requestHandler: RequestHandler.create(config?.requestHandler ?? defaultConfigProvider),
45+
requestHandler: WebSocketRequestHandler.create(
46+
(config?.requestHandler as
47+
| WebSocketRequestHandler
48+
| WebSocketFetchHandlerOptions
49+
| (() => Promise<WebSocketFetchHandlerOptions>)) ?? defaultConfigProvider,
50+
HttpRequestHandler.create(defaultConfigProvider)
51+
),
4352
retryMode: config?.retryMode ?? (async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE),
4453
sha256: config?.sha256 ?? Sha256,
4554
streamCollector: config?.streamCollector ?? streamCollector,

codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AddWebsocketPlugin.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public Map<String, Consumer<TypeScriptWriter>> getRuntimeConfigWriters(
126126
}
127127

128128
private static boolean isWebsocketSupported(ServiceShape service) {
129-
Set<String> websocketServices = SetUtils.of("Transcribe Streaming", "RekognitionStreaming");
129+
Set<String> websocketServices = SetUtils.of("Transcribe Streaming", "RekognitionStreaming", "Bedrock Runtime");
130130
String serviceId = service.getTrait(ServiceTrait.class).map(ServiceTrait::getSdkId).orElse("");
131131
return websocketServices.contains(serviceId);
132132
}
@@ -141,6 +141,8 @@ private static Map<String, Object> getPluginFunctionParams(
141141
return MapUtils.of("headerPrefix", "x-amzn-transcribe-");
142142
} else if (serviceId.equals("RekognitionStreaming")) {
143143
return MapUtils.of("headerPrefix", "x-amz-rekognition-streaming-liveness-");
144+
} else if (serviceId.equals("Bedrock Runtime")) {
145+
return MapUtils.of("headerPrefix", "x-amz-bedrock-");
144146
} else {
145147
throw new CodegenException("Missing endpoint prefix for Websocket plugin of service " + serviceId);
146148
}

yarn.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3705,6 +3705,7 @@ __metadata:
37053705
"@aws-sdk/middleware-logger": "npm:*"
37063706
"@aws-sdk/middleware-recursion-detection": "npm:*"
37073707
"@aws-sdk/middleware-user-agent": "npm:*"
3708+
"@aws-sdk/middleware-websocket": "npm:*"
37083709
"@aws-sdk/region-config-resolver": "npm:*"
37093710
"@aws-sdk/token-providers": "npm:*"
37103711
"@aws-sdk/types": "npm:*"

0 commit comments

Comments
 (0)