Skip to content

Commit b6804f0

Browse files
committed
Building bedrock example.
1 parent f87f30d commit b6804f0

File tree

4 files changed

+38
-36
lines changed

4 files changed

+38
-36
lines changed

packages/sdk/ai/examples/bedrock/src/index.ts

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
/* eslint-disable no-console */
2-
import {
3-
BedrockRuntimeClient,
4-
ConversationRole,
5-
ConverseCommand,
6-
Message,
7-
} from '@aws-sdk/client-bedrock-runtime';
2+
import { BedrockRuntimeClient, ConverseCommand, Message } from '@aws-sdk/client-bedrock-runtime';
83

94
import { initAi, LDAIConfig } from '@launchdarkly/ai';
105
import { init } from '@launchdarkly/node-server-sdk';
@@ -29,9 +24,12 @@ const context = {
2924

3025
console.log('*** SDK successfully initialized');
3126

32-
function mapPromptToConversation(prompt: { role: ConversationRole; content: string }[]): Message[] {
27+
function mapPromptToConversation(
28+
prompt: { role: 'user' | 'assistant' | 'system'; content: string }[],
29+
): Message[] {
3330
return prompt.map((item) => ({
34-
role: item.role,
31+
// Bedrock doesn't support systems in the converse command.
32+
role: item.role !== 'system' ? item.role : 'user',
3533
content: [{ text: item.content }],
3634
}));
3735
}
@@ -44,31 +42,35 @@ async function main() {
4442
await ldClient.waitForInitialization({ timeout: 10 });
4543
const aiClient = initAi(ldClient);
4644

47-
configValue = await aiClient.modelConfig(aiConfigKey, context, false, {
48-
myVariable: 'My User Defined Variable',
49-
});
50-
if (configValue === false) {
51-
console.log('got default value for config');
52-
process.exit(1);
53-
} else {
54-
tracker = configValue.tracker;
55-
}
45+
configValue = await aiClient.modelConfig(
46+
aiConfigKey,
47+
context,
48+
{
49+
model: {
50+
modelId: 'my-default-model',
51+
},
52+
},
53+
{
54+
myVariable: 'My User Defined Variable',
55+
},
56+
);
57+
tracker = configValue.tracker;
5658
} catch (error) {
5759
console.log(`*** SDK failed to initialize: ${error}`);
5860
process.exit(1);
5961
}
6062

6163
if (tracker) {
62-
const completion = await tracker.trackBedrockConverse(
64+
const completion = tracker.trackBedrockConverse(
6365
await awsClient.send(
6466
new ConverseCommand({
65-
modelId: configValue.config?.model?.modelId ?? 'default model',
66-
messages: mapPromptToConversation(modelConfig?.prompt ?? 'default prompt'),
67+
modelId: configValue.config?.model?.modelId ?? 'no-model',
68+
messages: mapPromptToConversation(configValue.config?.prompt ?? []),
6769
}),
6870
),
6971
);
7072

71-
console.log('AI Response:', completion.output.message.content[0].text);
73+
console.log('AI Response:', completion.output?.message?.content?.[0]?.text ?? 'no-response');
7274
console.log('Success.');
7375
}
7476
}

packages/sdk/ai/src/LDAIConfigTrackerImpl.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,21 @@ export class LDAIConfigTrackerImpl implements LDAIConfigTracker {
6060

6161
trackBedrockConverse<
6262
TRes extends {
63-
$metadata?: { httpStatusCode: number };
64-
metrics?: { latencyMs: number };
63+
$metadata: { httpStatusCode?: number };
64+
metrics?: { latencyMs?: number };
6565
usage?: {
66-
inputTokens: number;
67-
outputTokens: number;
68-
totalTokens: number;
66+
inputTokens?: number;
67+
outputTokens?: number;
68+
totalTokens?: number;
6969
};
7070
},
7171
>(res: TRes): TRes {
7272
if (res.$metadata?.httpStatusCode === 200) {
7373
this.trackSuccess();
7474
} else if (res.$metadata?.httpStatusCode && res.$metadata.httpStatusCode >= 400) {
75-
// this.trackError(res.$metadata.httpStatusCode);
75+
// Potentially add error tracking in the future.
7676
}
77-
if (res.metrics) {
77+
if (res.metrics && res.metrics.latencyMs) {
7878
this.trackDuration(res.metrics.latencyMs);
7979
}
8080
if (res.usage) {

packages/sdk/ai/src/api/config/LDAIConfigTracker.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ export interface LDAIConfigTracker {
5757
*/
5858
trackBedrockConverse<
5959
TRes extends {
60-
$metadata?: { httpStatusCode: number };
61-
metrics?: { latencyMs: number };
60+
$metadata: { httpStatusCode?: number };
61+
metrics?: { latencyMs?: number };
6262
usage?: {
63-
inputTokens: number;
64-
outputTokens: number;
65-
totalTokens: number;
63+
inputTokens?: number;
64+
outputTokens?: number;
65+
totalTokens?: number;
6666
};
6767
},
6868
>(

packages/sdk/ai/src/api/metrics/BedrockTokenUsage.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { LDTokenUsage } from './LDTokenUsage';
22

33
export function createBedrockTokenUsage(data: {
4-
totalTokens: number;
5-
inputTokens: number;
6-
outputTokens: number;
4+
totalTokens?: number;
5+
inputTokens?: number;
6+
outputTokens?: number;
77
}): LDTokenUsage {
88
return {
99
total: data.totalTokens || 0,

0 commit comments

Comments
 (0)