@matthewdunbar/amazon-bedrock-mantle 0.0.13 → 0.0.15
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.
Potentially problematic release.
This version of @matthewdunbar/amazon-bedrock-mantle might be problematic. Click here for more details.
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -159,12 +159,15 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
159
159
|
if (!line.startsWith("data:")) {
|
|
160
160
|
return line;
|
|
161
161
|
}
|
|
162
|
-
const rawData = line.slice(5).
|
|
162
|
+
const rawData = line.slice(5).trim();
|
|
163
163
|
if (rawData === "[DONE]") {
|
|
164
164
|
return line;
|
|
165
165
|
}
|
|
166
166
|
const parsed = await (0, import_provider_utils.safeParseJSON)({ text: rawData });
|
|
167
167
|
if (!parsed.success || typeof parsed.value !== "object" || parsed.value == null) {
|
|
168
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
169
|
+
console.error("[bedrock-mantle] could not parse data line", line);
|
|
170
|
+
}
|
|
168
171
|
return line;
|
|
169
172
|
}
|
|
170
173
|
const data = parsed.value;
|
|
@@ -189,8 +192,22 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
189
192
|
return `data: ${JSON.stringify(data)}`;
|
|
190
193
|
};
|
|
191
194
|
return async (input, init) => {
|
|
195
|
+
var _a;
|
|
196
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
197
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
198
|
+
console.error("[bedrock-mantle] fetch start", {
|
|
199
|
+
url,
|
|
200
|
+
method: (_a = init == null ? void 0 : init.method) != null ? _a : "POST"
|
|
201
|
+
});
|
|
202
|
+
}
|
|
192
203
|
const response = await fetchImpl(input, init);
|
|
193
204
|
const contentType = response.headers.get("content-type");
|
|
205
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
206
|
+
console.error("[bedrock-mantle] fetch response", {
|
|
207
|
+
status: response.status,
|
|
208
|
+
contentType
|
|
209
|
+
});
|
|
210
|
+
}
|
|
194
211
|
if (contentType == null ? void 0 : contentType.includes("application/json")) {
|
|
195
212
|
try {
|
|
196
213
|
const text = await response.text();
|
|
@@ -235,11 +252,11 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
235
252
|
}
|
|
236
253
|
const transformStream = new TransformStream({
|
|
237
254
|
async transform(chunk, controller) {
|
|
238
|
-
var
|
|
255
|
+
var _a2;
|
|
239
256
|
const text = textDecoder.decode(chunk, { stream: true });
|
|
240
257
|
bufferedText += text;
|
|
241
258
|
const lines = bufferedText.split("\n");
|
|
242
|
-
bufferedText = (
|
|
259
|
+
bufferedText = (_a2 = lines.pop()) != null ? _a2 : "";
|
|
243
260
|
const outputLines = [];
|
|
244
261
|
for (const line of lines) {
|
|
245
262
|
outputLines.push(await normalizeDataLine(line));
|
|
@@ -370,7 +387,7 @@ function createAmazonBedrockMantle(options = {}) {
|
|
|
370
387
|
var bedrockMantle = createAmazonBedrockMantle();
|
|
371
388
|
|
|
372
389
|
// src/version.ts
|
|
373
|
-
var VERSION = true ? "0.0.
|
|
390
|
+
var VERSION = true ? "0.0.15" : "0.0.0-test";
|
|
374
391
|
// Annotate the CommonJS export names for ESM import in node:
|
|
375
392
|
0 && (module.exports = {
|
|
376
393
|
VERSION,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["export {\n bedrockMantle,\n createAmazonBedrockMantle,\n} from './bedrock-mantle-provider';\nexport type {\n AmazonBedrockMantleProvider,\n AmazonBedrockMantleProviderSettings,\n BedrockMantleChatModelId,\n} from './bedrock-mantle-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n safeParseJSON,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { fromNodeProviderChain } from '@aws-sdk/credential-providers';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This uses the AWS credential provider chain to support SSO, IAM roles, etc.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Transform streaming SSE responses to filter out problematic fields\n */\nfunction createResponseTransformFetch(fetchImpl: FetchFunction): FetchFunction {\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n let bufferedText = '';\n\n const toStringOrNull = (value: unknown): string | null | undefined => {\n if (value === undefined || value === null) {\n return value as undefined | null;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'text' in value &&\n typeof (value as { text?: unknown }).text === 'string'\n ) {\n return (value as { text: string }).text;\n }\n\n return JSON.stringify(value);\n };\n\n const normalizeChoice = (choice: Record<string, unknown>) => {\n const finishReason = toStringOrNull(choice.finish_reason);\n if (finishReason !== undefined) {\n choice.finish_reason = finishReason;\n }\n\n const reason = toStringOrNull(choice.reason);\n if (reason !== undefined) {\n choice.reason = reason;\n }\n\n if (\n typeof choice.delta === 'object' &&\n choice.delta !== null &&\n !Array.isArray(choice.delta)\n ) {\n const delta = choice.delta as Record<string, unknown>;\n const deltaReasoning = toStringOrNull(delta.reasoning);\n const deltaReasoningContent = toStringOrNull(delta.reasoning_content);\n const deltaReason = toStringOrNull(delta.reason);\n\n if (deltaReasoning !== undefined) {\n delta.reasoning = deltaReasoning;\n }\n\n if (deltaReasoningContent !== undefined) {\n delta.reasoning_content = deltaReasoningContent;\n }\n\n if (deltaReason !== undefined) {\n delta.reason = deltaReason;\n }\n }\n\n if (\n typeof choice.message === 'object' &&\n choice.message !== null &&\n !Array.isArray(choice.message)\n ) {\n const message = choice.message as Record<string, unknown>;\n const messageReasoning = toStringOrNull(message.reasoning);\n const messageReasoningContent = toStringOrNull(message.reasoning_content);\n const messageReason = toStringOrNull(message.reason);\n\n if (messageReasoning !== undefined) {\n message.reasoning = messageReasoning;\n }\n\n if (messageReasoningContent !== undefined) {\n message.reasoning_content = messageReasoningContent;\n }\n\n if (messageReason !== undefined) {\n message.reason = messageReason;\n }\n }\n\n delete choice.obfuscation;\n };\n\n const normalizeKnownStringFieldsInPlace = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n normalizeKnownStringFieldsInPlace(item);\n }\n return;\n }\n\n if (typeof value !== 'object' || value === null) {\n return;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content'\n ) {\n const normalized = toStringOrNull(nested);\n if (normalized !== undefined) {\n record[key] = normalized;\n }\n }\n\n normalizeKnownStringFieldsInPlace(record[key]);\n }\n };\n\n const findNonStringReasonPaths = (\n value: unknown,\n path = '$',\n result: string[] = [],\n ): string[] => {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n findNonStringReasonPaths(value[i], `${path}[${i}]`, result);\n }\n return result;\n }\n\n if (typeof value !== 'object' || value === null) {\n return result;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n (key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content') &&\n nested !== null &&\n nested !== undefined &&\n typeof nested !== 'string'\n ) {\n result.push(`${path}.${key}`);\n }\n\n findNonStringReasonPaths(nested, `${path}.${key}`, result);\n }\n\n return result;\n };\n\n const normalizeDataLine = async (line: string): Promise<string> => {\n if (!line.startsWith('data:')) {\n return line;\n }\n\n const rawData = line.slice(5).trimStart();\n if (rawData === '[DONE]') {\n return line;\n }\n\n const parsed = await safeParseJSON({ text: rawData });\n if (\n !parsed.success ||\n typeof parsed.value !== 'object' ||\n parsed.value == null\n ) {\n return line;\n }\n\n const data = parsed.value as Record<string, unknown>;\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return `data: ${JSON.stringify(data)}`;\n };\n\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const response = await fetchImpl(input, init);\n\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const text = await response.text();\n const parsed = await safeParseJSON({ text });\n\n if (\n parsed.success &&\n typeof parsed.value === 'object' &&\n parsed.value !== null\n ) {\n const data = parsed.value as Record<string, unknown>;\n\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return new Response(JSON.stringify(data), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n return new Response(text, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } catch {\n return response;\n }\n }\n\n if (!contentType?.includes('text/event-stream')) {\n return response;\n }\n\n // Create a transform stream to process SSE data\n const transformStream = new TransformStream<Uint8Array, Uint8Array>({\n async transform(chunk, controller) {\n const text = textDecoder.decode(chunk, { stream: true });\n bufferedText += text;\n\n const lines = bufferedText.split('\\n');\n bufferedText = lines.pop() ?? '';\n\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(`${outputLines.join('\\n')}\\n`));\n }\n },\n async flush(controller) {\n const remaining = bufferedText + textDecoder.decode();\n if (remaining.length === 0) {\n return;\n }\n\n const lines = remaining.split('\\n');\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(outputLines.join('\\n')));\n }\n },\n });\n\n // Pipe the response body through our transform\n if (response.body) {\n response.body.pipeTo(transformStream.writable).catch(() => {\n // Ignore pipe errors\n });\n }\n\n // Return a new response with the transformed stream\n return new Response(transformStream.readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Use AWS credential provider chain with profile\n const credentialProvider = fromNodeProviderChain({\n profile: options.profile,\n });\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n // If no static credentials, use the default credential provider chain\n if (!accessKeyId || !secretAccessKey) {\n const credentialProvider = fromNodeProviderChain();\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n }\n\n // Wrap with response transform to filter problematic fields\n const transformFetch = createResponseTransformFetch(fetchFunction);\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: transformFetch,\n headers: options.headers,\n includeUsage: false,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["export {\n bedrockMantle,\n createAmazonBedrockMantle,\n} from './bedrock-mantle-provider';\nexport type {\n AmazonBedrockMantleProvider,\n AmazonBedrockMantleProviderSettings,\n BedrockMantleChatModelId,\n} from './bedrock-mantle-provider';\nexport { VERSION } from './version';\n","import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n safeParseJSON,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { fromNodeProviderChain } from '@aws-sdk/credential-providers';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This uses the AWS credential provider chain to support SSO, IAM roles, etc.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Transform streaming SSE responses to filter out problematic fields\n */\nfunction createResponseTransformFetch(fetchImpl: FetchFunction): FetchFunction {\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n let bufferedText = '';\n\n const toStringOrNull = (value: unknown): string | null | undefined => {\n if (value === undefined || value === null) {\n return value as undefined | null;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'text' in value &&\n typeof (value as { text?: unknown }).text === 'string'\n ) {\n return (value as { text: string }).text;\n }\n\n return JSON.stringify(value);\n };\n\n const normalizeChoice = (choice: Record<string, unknown>) => {\n const finishReason = toStringOrNull(choice.finish_reason);\n if (finishReason !== undefined) {\n choice.finish_reason = finishReason;\n }\n\n const reason = toStringOrNull(choice.reason);\n if (reason !== undefined) {\n choice.reason = reason;\n }\n\n if (\n typeof choice.delta === 'object' &&\n choice.delta !== null &&\n !Array.isArray(choice.delta)\n ) {\n const delta = choice.delta as Record<string, unknown>;\n const deltaReasoning = toStringOrNull(delta.reasoning);\n const deltaReasoningContent = toStringOrNull(delta.reasoning_content);\n const deltaReason = toStringOrNull(delta.reason);\n\n if (deltaReasoning !== undefined) {\n delta.reasoning = deltaReasoning;\n }\n\n if (deltaReasoningContent !== undefined) {\n delta.reasoning_content = deltaReasoningContent;\n }\n\n if (deltaReason !== undefined) {\n delta.reason = deltaReason;\n }\n }\n\n if (\n typeof choice.message === 'object' &&\n choice.message !== null &&\n !Array.isArray(choice.message)\n ) {\n const message = choice.message as Record<string, unknown>;\n const messageReasoning = toStringOrNull(message.reasoning);\n const messageReasoningContent = toStringOrNull(message.reasoning_content);\n const messageReason = toStringOrNull(message.reason);\n\n if (messageReasoning !== undefined) {\n message.reasoning = messageReasoning;\n }\n\n if (messageReasoningContent !== undefined) {\n message.reasoning_content = messageReasoningContent;\n }\n\n if (messageReason !== undefined) {\n message.reason = messageReason;\n }\n }\n\n delete choice.obfuscation;\n };\n\n const normalizeKnownStringFieldsInPlace = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n normalizeKnownStringFieldsInPlace(item);\n }\n return;\n }\n\n if (typeof value !== 'object' || value === null) {\n return;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content'\n ) {\n const normalized = toStringOrNull(nested);\n if (normalized !== undefined) {\n record[key] = normalized;\n }\n }\n\n normalizeKnownStringFieldsInPlace(record[key]);\n }\n };\n\n const findNonStringReasonPaths = (\n value: unknown,\n path = '$',\n result: string[] = [],\n ): string[] => {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n findNonStringReasonPaths(value[i], `${path}[${i}]`, result);\n }\n return result;\n }\n\n if (typeof value !== 'object' || value === null) {\n return result;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n (key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content') &&\n nested !== null &&\n nested !== undefined &&\n typeof nested !== 'string'\n ) {\n result.push(`${path}.${key}`);\n }\n\n findNonStringReasonPaths(nested, `${path}.${key}`, result);\n }\n\n return result;\n };\n\n const normalizeDataLine = async (line: string): Promise<string> => {\n if (!line.startsWith('data:')) {\n return line;\n }\n\n const rawData = line.slice(5).trim();\n if (rawData === '[DONE]') {\n return line;\n }\n\n const parsed = await safeParseJSON({ text: rawData });\n if (\n !parsed.success ||\n typeof parsed.value !== 'object' ||\n parsed.value == null\n ) {\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n console.error('[bedrock-mantle] could not parse data line', line);\n }\n return line;\n }\n\n const data = parsed.value as Record<string, unknown>;\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return `data: ${JSON.stringify(data)}`;\n };\n\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n console.error('[bedrock-mantle] fetch start', {\n url,\n method: init?.method ?? 'POST',\n });\n }\n\n const response = await fetchImpl(input, init);\n\n const contentType = response.headers.get('content-type');\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n console.error('[bedrock-mantle] fetch response', {\n status: response.status,\n contentType,\n });\n }\n if (contentType?.includes('application/json')) {\n try {\n const text = await response.text();\n const parsed = await safeParseJSON({ text });\n\n if (\n parsed.success &&\n typeof parsed.value === 'object' &&\n parsed.value !== null\n ) {\n const data = parsed.value as Record<string, unknown>;\n\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return new Response(JSON.stringify(data), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n return new Response(text, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } catch {\n return response;\n }\n }\n\n if (!contentType?.includes('text/event-stream')) {\n return response;\n }\n\n // Create a transform stream to process SSE data\n const transformStream = new TransformStream<Uint8Array, Uint8Array>({\n async transform(chunk, controller) {\n const text = textDecoder.decode(chunk, { stream: true });\n bufferedText += text;\n\n const lines = bufferedText.split('\\n');\n bufferedText = lines.pop() ?? '';\n\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(`${outputLines.join('\\n')}\\n`));\n }\n },\n async flush(controller) {\n const remaining = bufferedText + textDecoder.decode();\n if (remaining.length === 0) {\n return;\n }\n\n const lines = remaining.split('\\n');\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(outputLines.join('\\n')));\n }\n },\n });\n\n // Pipe the response body through our transform\n if (response.body) {\n response.body.pipeTo(transformStream.writable).catch(() => {\n // Ignore pipe errors\n });\n }\n\n // Return a new response with the transformed stream\n return new Response(transformStream.readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Use AWS credential provider chain with profile\n const credentialProvider = fromNodeProviderChain({\n profile: options.profile,\n });\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n // If no static credentials, use the default credential provider chain\n if (!accessKeyId || !secretAccessKey) {\n const credentialProvider = fromNodeProviderChain();\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n }\n\n // Wrap with response transform to filter problematic fields\n const transformFetch = createResponseTransformFetch(fetchFunction);\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: transformFetch,\n headers: options.headers,\n includeUsage: false,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["_a"]}
|
package/dist/index.mjs
CHANGED
|
@@ -137,12 +137,15 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
137
137
|
if (!line.startsWith("data:")) {
|
|
138
138
|
return line;
|
|
139
139
|
}
|
|
140
|
-
const rawData = line.slice(5).
|
|
140
|
+
const rawData = line.slice(5).trim();
|
|
141
141
|
if (rawData === "[DONE]") {
|
|
142
142
|
return line;
|
|
143
143
|
}
|
|
144
144
|
const parsed = await safeParseJSON({ text: rawData });
|
|
145
145
|
if (!parsed.success || typeof parsed.value !== "object" || parsed.value == null) {
|
|
146
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
147
|
+
console.error("[bedrock-mantle] could not parse data line", line);
|
|
148
|
+
}
|
|
146
149
|
return line;
|
|
147
150
|
}
|
|
148
151
|
const data = parsed.value;
|
|
@@ -167,8 +170,22 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
167
170
|
return `data: ${JSON.stringify(data)}`;
|
|
168
171
|
};
|
|
169
172
|
return async (input, init) => {
|
|
173
|
+
var _a;
|
|
174
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
175
|
+
const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
176
|
+
console.error("[bedrock-mantle] fetch start", {
|
|
177
|
+
url,
|
|
178
|
+
method: (_a = init == null ? void 0 : init.method) != null ? _a : "POST"
|
|
179
|
+
});
|
|
180
|
+
}
|
|
170
181
|
const response = await fetchImpl(input, init);
|
|
171
182
|
const contentType = response.headers.get("content-type");
|
|
183
|
+
if (process.env.BEDROCK_MANTLE_DEBUG_REASON === "1") {
|
|
184
|
+
console.error("[bedrock-mantle] fetch response", {
|
|
185
|
+
status: response.status,
|
|
186
|
+
contentType
|
|
187
|
+
});
|
|
188
|
+
}
|
|
172
189
|
if (contentType == null ? void 0 : contentType.includes("application/json")) {
|
|
173
190
|
try {
|
|
174
191
|
const text = await response.text();
|
|
@@ -213,11 +230,11 @@ function createResponseTransformFetch(fetchImpl) {
|
|
|
213
230
|
}
|
|
214
231
|
const transformStream = new TransformStream({
|
|
215
232
|
async transform(chunk, controller) {
|
|
216
|
-
var
|
|
233
|
+
var _a2;
|
|
217
234
|
const text = textDecoder.decode(chunk, { stream: true });
|
|
218
235
|
bufferedText += text;
|
|
219
236
|
const lines = bufferedText.split("\n");
|
|
220
|
-
bufferedText = (
|
|
237
|
+
bufferedText = (_a2 = lines.pop()) != null ? _a2 : "";
|
|
221
238
|
const outputLines = [];
|
|
222
239
|
for (const line of lines) {
|
|
223
240
|
outputLines.push(await normalizeDataLine(line));
|
|
@@ -348,7 +365,7 @@ function createAmazonBedrockMantle(options = {}) {
|
|
|
348
365
|
var bedrockMantle = createAmazonBedrockMantle();
|
|
349
366
|
|
|
350
367
|
// src/version.ts
|
|
351
|
-
var VERSION = true ? "0.0.
|
|
368
|
+
var VERSION = true ? "0.0.15" : "0.0.0-test";
|
|
352
369
|
export {
|
|
353
370
|
VERSION,
|
|
354
371
|
bedrockMantle,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n safeParseJSON,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { fromNodeProviderChain } from '@aws-sdk/credential-providers';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This uses the AWS credential provider chain to support SSO, IAM roles, etc.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Transform streaming SSE responses to filter out problematic fields\n */\nfunction createResponseTransformFetch(fetchImpl: FetchFunction): FetchFunction {\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n let bufferedText = '';\n\n const toStringOrNull = (value: unknown): string | null | undefined => {\n if (value === undefined || value === null) {\n return value as undefined | null;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'text' in value &&\n typeof (value as { text?: unknown }).text === 'string'\n ) {\n return (value as { text: string }).text;\n }\n\n return JSON.stringify(value);\n };\n\n const normalizeChoice = (choice: Record<string, unknown>) => {\n const finishReason = toStringOrNull(choice.finish_reason);\n if (finishReason !== undefined) {\n choice.finish_reason = finishReason;\n }\n\n const reason = toStringOrNull(choice.reason);\n if (reason !== undefined) {\n choice.reason = reason;\n }\n\n if (\n typeof choice.delta === 'object' &&\n choice.delta !== null &&\n !Array.isArray(choice.delta)\n ) {\n const delta = choice.delta as Record<string, unknown>;\n const deltaReasoning = toStringOrNull(delta.reasoning);\n const deltaReasoningContent = toStringOrNull(delta.reasoning_content);\n const deltaReason = toStringOrNull(delta.reason);\n\n if (deltaReasoning !== undefined) {\n delta.reasoning = deltaReasoning;\n }\n\n if (deltaReasoningContent !== undefined) {\n delta.reasoning_content = deltaReasoningContent;\n }\n\n if (deltaReason !== undefined) {\n delta.reason = deltaReason;\n }\n }\n\n if (\n typeof choice.message === 'object' &&\n choice.message !== null &&\n !Array.isArray(choice.message)\n ) {\n const message = choice.message as Record<string, unknown>;\n const messageReasoning = toStringOrNull(message.reasoning);\n const messageReasoningContent = toStringOrNull(message.reasoning_content);\n const messageReason = toStringOrNull(message.reason);\n\n if (messageReasoning !== undefined) {\n message.reasoning = messageReasoning;\n }\n\n if (messageReasoningContent !== undefined) {\n message.reasoning_content = messageReasoningContent;\n }\n\n if (messageReason !== undefined) {\n message.reason = messageReason;\n }\n }\n\n delete choice.obfuscation;\n };\n\n const normalizeKnownStringFieldsInPlace = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n normalizeKnownStringFieldsInPlace(item);\n }\n return;\n }\n\n if (typeof value !== 'object' || value === null) {\n return;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content'\n ) {\n const normalized = toStringOrNull(nested);\n if (normalized !== undefined) {\n record[key] = normalized;\n }\n }\n\n normalizeKnownStringFieldsInPlace(record[key]);\n }\n };\n\n const findNonStringReasonPaths = (\n value: unknown,\n path = '$',\n result: string[] = [],\n ): string[] => {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n findNonStringReasonPaths(value[i], `${path}[${i}]`, result);\n }\n return result;\n }\n\n if (typeof value !== 'object' || value === null) {\n return result;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n (key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content') &&\n nested !== null &&\n nested !== undefined &&\n typeof nested !== 'string'\n ) {\n result.push(`${path}.${key}`);\n }\n\n findNonStringReasonPaths(nested, `${path}.${key}`, result);\n }\n\n return result;\n };\n\n const normalizeDataLine = async (line: string): Promise<string> => {\n if (!line.startsWith('data:')) {\n return line;\n }\n\n const rawData = line.slice(5).trimStart();\n if (rawData === '[DONE]') {\n return line;\n }\n\n const parsed = await safeParseJSON({ text: rawData });\n if (\n !parsed.success ||\n typeof parsed.value !== 'object' ||\n parsed.value == null\n ) {\n return line;\n }\n\n const data = parsed.value as Record<string, unknown>;\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return `data: ${JSON.stringify(data)}`;\n };\n\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const response = await fetchImpl(input, init);\n\n const contentType = response.headers.get('content-type');\n if (contentType?.includes('application/json')) {\n try {\n const text = await response.text();\n const parsed = await safeParseJSON({ text });\n\n if (\n parsed.success &&\n typeof parsed.value === 'object' &&\n parsed.value !== null\n ) {\n const data = parsed.value as Record<string, unknown>;\n\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return new Response(JSON.stringify(data), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n return new Response(text, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } catch {\n return response;\n }\n }\n\n if (!contentType?.includes('text/event-stream')) {\n return response;\n }\n\n // Create a transform stream to process SSE data\n const transformStream = new TransformStream<Uint8Array, Uint8Array>({\n async transform(chunk, controller) {\n const text = textDecoder.decode(chunk, { stream: true });\n bufferedText += text;\n\n const lines = bufferedText.split('\\n');\n bufferedText = lines.pop() ?? '';\n\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(`${outputLines.join('\\n')}\\n`));\n }\n },\n async flush(controller) {\n const remaining = bufferedText + textDecoder.decode();\n if (remaining.length === 0) {\n return;\n }\n\n const lines = remaining.split('\\n');\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(outputLines.join('\\n')));\n }\n },\n });\n\n // Pipe the response body through our transform\n if (response.body) {\n response.body.pipeTo(transformStream.writable).catch(() => {\n // Ignore pipe errors\n });\n }\n\n // Return a new response with the transformed stream\n return new Response(transformStream.readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Use AWS credential provider chain with profile\n const credentialProvider = fromNodeProviderChain({\n profile: options.profile,\n });\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n // If no static credentials, use the default credential provider chain\n if (!accessKeyId || !secretAccessKey) {\n const credentialProvider = fromNodeProviderChain();\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n }\n\n // Wrap with response transform to filter problematic fields\n const transformFetch = createResponseTransformFetch(fetchFunction);\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: transformFetch,\n headers: options.headers,\n includeUsage: false,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/bedrock-mantle-provider.ts","../src/version.ts"],"sourcesContent":["import {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadOptionalSetting,\n safeParseJSON,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport {\n createOpenAICompatible,\n OpenAICompatibleProvider,\n} from '@ai-sdk/openai-compatible';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { fromNodeProviderChain } from '@aws-sdk/credential-providers';\n\nexport interface AmazonBedrockMantleProviderSettings {\n /**\n * The AWS region to use for the Bedrock Mantle provider. Defaults to 'us-east-1'.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n *\n * Note: When `apiKey` is provided, it takes precedence over AWS SigV4 authentication.\n * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,\n * the provider will fall back to AWS SigV4 authentication using AWS credentials.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock Mantle provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * The AWS profile to use for loading credentials from the AWS CLI configuration.\n * When specified, credentials will be loaded from ~/.aws/credentials for the given profile.\n * This uses the AWS credential provider chain to support SSO, IAM roles, etc.\n * This takes precedence over static credentials but is overridden by `apiKey`.\n */\n profile?: string;\n\n /**\n * Base URL for the Bedrock Mantle API calls. Defaults to the bedrock-mantle endpoint.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock Mantle provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<{\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n }>;\n}\n\nexport type BedrockMantleChatModelId = string;\nexport type BedrockMantleEmbeddingModelId = string;\nexport type BedrockMantleImageModelId = string;\n\nexport interface AmazonBedrockMantleProvider extends ProviderV3 {\n (modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n languageModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n chatModel(modelId: BedrockMantleChatModelId): LanguageModelV3;\n\n embeddingModel(modelId: BedrockMantleEmbeddingModelId): EmbeddingModelV3;\n\n imageModel(modelId: BedrockMantleImageModelId): ImageModelV3;\n}\n\ninterface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing for bedrock-mantle service.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetchImpl - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nfunction createMantleSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetchImpl: FetchFunction = globalThis.fetch,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body =\n typeof init?.body === 'string'\n ? init.body\n : init?.body\n ? JSON.stringify(init.body)\n : undefined;\n\n const headers = init?.headers ?? {};\n const headerEntries =\n headers instanceof Headers\n ? Array.from(headers.entries())\n : Array.isArray(headers)\n ? headers\n : Object.entries(headers);\n\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: init?.method ?? 'POST',\n headers: headerEntries,\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock-mantle',\n });\n\n const signed = await signer.sign();\n return fetchImpl(input, {\n ...init,\n body,\n headers: Object.fromEntries(signed.headers.entries()),\n });\n };\n}\n\n/**\n * Transform streaming SSE responses to filter out problematic fields\n */\nfunction createResponseTransformFetch(fetchImpl: FetchFunction): FetchFunction {\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n let bufferedText = '';\n\n const toStringOrNull = (value: unknown): string | null | undefined => {\n if (value === undefined || value === null) {\n return value as undefined | null;\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (\n typeof value === 'object' &&\n value !== null &&\n 'text' in value &&\n typeof (value as { text?: unknown }).text === 'string'\n ) {\n return (value as { text: string }).text;\n }\n\n return JSON.stringify(value);\n };\n\n const normalizeChoice = (choice: Record<string, unknown>) => {\n const finishReason = toStringOrNull(choice.finish_reason);\n if (finishReason !== undefined) {\n choice.finish_reason = finishReason;\n }\n\n const reason = toStringOrNull(choice.reason);\n if (reason !== undefined) {\n choice.reason = reason;\n }\n\n if (\n typeof choice.delta === 'object' &&\n choice.delta !== null &&\n !Array.isArray(choice.delta)\n ) {\n const delta = choice.delta as Record<string, unknown>;\n const deltaReasoning = toStringOrNull(delta.reasoning);\n const deltaReasoningContent = toStringOrNull(delta.reasoning_content);\n const deltaReason = toStringOrNull(delta.reason);\n\n if (deltaReasoning !== undefined) {\n delta.reasoning = deltaReasoning;\n }\n\n if (deltaReasoningContent !== undefined) {\n delta.reasoning_content = deltaReasoningContent;\n }\n\n if (deltaReason !== undefined) {\n delta.reason = deltaReason;\n }\n }\n\n if (\n typeof choice.message === 'object' &&\n choice.message !== null &&\n !Array.isArray(choice.message)\n ) {\n const message = choice.message as Record<string, unknown>;\n const messageReasoning = toStringOrNull(message.reasoning);\n const messageReasoningContent = toStringOrNull(message.reasoning_content);\n const messageReason = toStringOrNull(message.reason);\n\n if (messageReasoning !== undefined) {\n message.reasoning = messageReasoning;\n }\n\n if (messageReasoningContent !== undefined) {\n message.reasoning_content = messageReasoningContent;\n }\n\n if (messageReason !== undefined) {\n message.reason = messageReason;\n }\n }\n\n delete choice.obfuscation;\n };\n\n const normalizeKnownStringFieldsInPlace = (value: unknown): void => {\n if (Array.isArray(value)) {\n for (const item of value) {\n normalizeKnownStringFieldsInPlace(item);\n }\n return;\n }\n\n if (typeof value !== 'object' || value === null) {\n return;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content'\n ) {\n const normalized = toStringOrNull(nested);\n if (normalized !== undefined) {\n record[key] = normalized;\n }\n }\n\n normalizeKnownStringFieldsInPlace(record[key]);\n }\n };\n\n const findNonStringReasonPaths = (\n value: unknown,\n path = '$',\n result: string[] = [],\n ): string[] => {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n findNonStringReasonPaths(value[i], `${path}[${i}]`, result);\n }\n return result;\n }\n\n if (typeof value !== 'object' || value === null) {\n return result;\n }\n\n const record = value as Record<string, unknown>;\n for (const [key, nested] of Object.entries(record)) {\n if (\n (key === 'reason' ||\n key === 'finish_reason' ||\n key === 'reasoning' ||\n key === 'reasoning_content') &&\n nested !== null &&\n nested !== undefined &&\n typeof nested !== 'string'\n ) {\n result.push(`${path}.${key}`);\n }\n\n findNonStringReasonPaths(nested, `${path}.${key}`, result);\n }\n\n return result;\n };\n\n const normalizeDataLine = async (line: string): Promise<string> => {\n if (!line.startsWith('data:')) {\n return line;\n }\n\n const rawData = line.slice(5).trim();\n if (rawData === '[DONE]') {\n return line;\n }\n\n const parsed = await safeParseJSON({ text: rawData });\n if (\n !parsed.success ||\n typeof parsed.value !== 'object' ||\n parsed.value == null\n ) {\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n console.error('[bedrock-mantle] could not parse data line', line);\n }\n return line;\n }\n\n const data = parsed.value as Record<string, unknown>;\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return `data: ${JSON.stringify(data)}`;\n };\n\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n console.error('[bedrock-mantle] fetch start', {\n url,\n method: init?.method ?? 'POST',\n });\n }\n\n const response = await fetchImpl(input, init);\n\n const contentType = response.headers.get('content-type');\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n console.error('[bedrock-mantle] fetch response', {\n status: response.status,\n contentType,\n });\n }\n if (contentType?.includes('application/json')) {\n try {\n const text = await response.text();\n const parsed = await safeParseJSON({ text });\n\n if (\n parsed.success &&\n typeof parsed.value === 'object' &&\n parsed.value !== null\n ) {\n const data = parsed.value as Record<string, unknown>;\n\n if (Array.isArray(data.choices)) {\n for (const choice of data.choices) {\n if (\n typeof choice === 'object' &&\n choice !== null &&\n !Array.isArray(choice)\n ) {\n normalizeChoice(choice as Record<string, unknown>);\n }\n }\n }\n\n normalizeKnownStringFieldsInPlace(data);\n\n if (process.env.BEDROCK_MANTLE_DEBUG_REASON === '1') {\n const nonStringPaths = findNonStringReasonPaths(data);\n if (nonStringPaths.length > 0) {\n console.error(\n '[bedrock-mantle] non-string reason-like fields after normalization:',\n nonStringPaths,\n JSON.stringify(data),\n );\n }\n }\n\n return new Response(JSON.stringify(data), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n return new Response(text, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n } catch {\n return response;\n }\n }\n\n if (!contentType?.includes('text/event-stream')) {\n return response;\n }\n\n // Create a transform stream to process SSE data\n const transformStream = new TransformStream<Uint8Array, Uint8Array>({\n async transform(chunk, controller) {\n const text = textDecoder.decode(chunk, { stream: true });\n bufferedText += text;\n\n const lines = bufferedText.split('\\n');\n bufferedText = lines.pop() ?? '';\n\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(`${outputLines.join('\\n')}\\n`));\n }\n },\n async flush(controller) {\n const remaining = bufferedText + textDecoder.decode();\n if (remaining.length === 0) {\n return;\n }\n\n const lines = remaining.split('\\n');\n const outputLines: string[] = [];\n for (const line of lines) {\n outputLines.push(await normalizeDataLine(line));\n }\n\n if (outputLines.length > 0) {\n controller.enqueue(textEncoder.encode(outputLines.join('\\n')));\n }\n },\n });\n\n // Pipe the response body through our transform\n if (response.body) {\n response.body.pipeTo(transformStream.writable).catch(() => {\n // Ignore pipe errors\n });\n }\n\n // Return a new response with the transformed stream\n return new Response(transformStream.readable, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n };\n}\n\n/**\n * Create an Amazon Bedrock Mantle provider instance.\n * Bedrock Mantle is AWS Bedrock's OpenAI-compatible endpoint that routes all requests\n * through bedrock-mantle.<region>.api.aws/v1 using OpenAI API format.\n */\nexport function createAmazonBedrockMantle(\n options: AmazonBedrockMantleProviderSettings = {},\n): AmazonBedrockMantleProvider {\n // Get region - use option first, then environment variable, then default to us-east-1\n const region =\n options.region ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_REGION',\n }) ??\n 'us-east-1';\n\n // Check for API key authentication\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n let fetchFunction: FetchFunction;\n if (apiKey) {\n fetchFunction = options.fetch ?? globalThis.fetch;\n } else if (options.profile) {\n // Use AWS credential provider chain with profile\n const credentialProvider = fromNodeProviderChain({\n profile: options.profile,\n });\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else if (options.credentialProvider) {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n ...(await options.credentialProvider!()),\n region,\n };\n }, options.fetch);\n } else {\n // For static credentials, load from options or environment variables\n const accessKeyId =\n options.accessKeyId ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n });\n\n const secretAccessKey =\n options.secretAccessKey ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n });\n\n const sessionToken =\n options.sessionToken ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n });\n\n // If no static credentials, use the default credential provider chain\n if (!accessKeyId || !secretAccessKey) {\n const credentialProvider = fromNodeProviderChain();\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n const creds = await credentialProvider();\n return {\n ...creds,\n region,\n };\n }, options.fetch);\n } else {\n fetchFunction = createMantleSigV4FetchFunction(async () => {\n return {\n region,\n accessKeyId: accessKeyId!,\n secretAccessKey: secretAccessKey!,\n sessionToken,\n };\n }, options.fetch);\n }\n }\n\n // Wrap with response transform to filter problematic fields\n const transformFetch = createResponseTransformFetch(fetchFunction);\n\n const baseURL =\n withoutTrailingSlash(\n options.baseURL ?? `https://bedrock-mantle.${region}.api.aws/v1`,\n ) ?? `https://bedrock-mantle.us-east-1.api.aws/v1`;\n\n // Create the OpenAI-compatible provider\n const mantleProvider: OpenAICompatibleProvider<\n string,\n string,\n string,\n string\n > = createOpenAICompatible({\n baseURL,\n name: 'amazon-bedrock-mantle',\n apiKey: apiKey ?? 'dummy-key-for-sigv4',\n fetch: transformFetch,\n headers: options.headers,\n includeUsage: false,\n });\n\n const provider = function (modelId: BedrockMantleChatModelId) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock Mantle model function cannot be called with the new keyword.',\n );\n }\n return mantleProvider.languageModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = mantleProvider.languageModel;\n provider.chatModel = mantleProvider.languageModel;\n provider.embeddingModel = mantleProvider.embeddingModel;\n provider.imageModel = mantleProvider.imageModel;\n\n return provider as AmazonBedrockMantleProvider;\n}\n\n/**\n * Default Bedrock Mantle provider instance.\n */\nexport const bedrockMantle = createAmazonBedrockMantle();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["_a"]}
|