diff --git a/packages/typescript/ai-bedrock/CHANGELOG.md b/packages/typescript/ai-bedrock/CHANGELOG.md
new file mode 100644
index 00000000..e7de9d85
--- /dev/null
+++ b/packages/typescript/ai-bedrock/CHANGELOG.md
@@ -0,0 +1 @@
+# @tanstack/ai-bedrock
diff --git a/packages/typescript/ai-bedrock/README.md b/packages/typescript/ai-bedrock/README.md
new file mode 100644
index 00000000..77acf865
--- /dev/null
+++ b/packages/typescript/ai-bedrock/README.md
@@ -0,0 +1,131 @@
+
+

+
+
+
+
+
+
+
+
+
+
+### [Become a Sponsor!](https://github.com/sponsors/tannerlinsley/)
+
+
+# TanStack AI
+
+A powerful, type-safe AI SDK for building AI-powered applications.
+
+- Provider-agnostic adapters (OpenAI, Anthropic, Gemini, Ollama, etc.)
+- **Multimodal content support** - Send images, audio, video, and documents
+- Chat completion, streaming, and agent loop strategies
+- Headless chat state management with adapters (SSE, HTTP stream, custom)
+- Isomorphic type-safe tools with server/client execution
+- **Enhanced integration with TanStack Start** - Share implementations between AI tools and server functions
+
+### Read the docs →
+
+## Bonus: TanStack Start Integration
+
+TanStack AI works with **any** framework (Next.js, Express, Remix, etc.).
+
+**With TanStack Start**, you get a bonus: share implementations between AI tools and server functions with `createServerFnTool`:
+
+```typescript
+import { createServerFnTool } from '@tanstack/ai-react'
+
+// Define once, get AI tool AND server function (TanStack Start only)
+const getProducts = createServerFnTool({
+ name: 'getProducts',
+ inputSchema: z.object({ query: z.string() }),
+ execute: async ({ query }) => db.products.search(query),
+})
+
+// Use in AI chat
+chat({ tools: [getProducts.server] })
+
+// Call directly from components (no API endpoint needed!)
+const products = await getProducts.serverFn({ query: 'laptop' })
+```
+
+No duplicate logic, full type safety, automatic validation. The `serverFn` feature requires TanStack Start. See [docs](https://tanstack.com/ai) for details.
+
+## Get Involved
+
+- We welcome issues and pull requests!
+- Participate in [GitHub discussions](https://github.com/TanStack/ai/discussions)
+- Chat with the community on [Discord](https://discord.com/invite/WrRKjPJ)
+- See [CONTRIBUTING.md](./CONTRIBUTING.md) for setup instructions
+
+## Partners
+
+
+
+
+

+
+We're looking for TanStack AI Partners to join our mission! Partner with us to push the boundaries of TanStack AI and build amazing things together.
+
+
LET'S CHAT
+
+
+## Explore the TanStack Ecosystem
+
+- TanStack Config – Tooling for JS/TS packages
+- TanStack DB – Reactive sync client store
+- TanStack Devtools – Unified devtools panel
+- TanStack Form – Type‑safe form state
+- TanStack Pacer – Debouncing, throttling, batching
+- TanStack Query – Async state & caching
+- TanStack Ranger – Range & slider primitives
+- TanStack Router – Type‑safe routing, caching & URL state
+- TanStack Start – Full‑stack SSR & streaming
+- TanStack Store – Reactive data store
+- TanStack Table – Headless datagrids
+- TanStack Virtual – Virtualized rendering
+
+… and more at TanStack.com »
+
+
diff --git a/packages/typescript/ai-bedrock/package.json b/packages/typescript/ai-bedrock/package.json
new file mode 100644
index 00000000..55805368
--- /dev/null
+++ b/packages/typescript/ai-bedrock/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "@tanstack/ai-bedrock",
+ "version": "0.0.1",
+ "description": "AWS Bedrock adapter for TanStack AI",
+ "author": "",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/TanStack/ai.git",
+ "directory": "packages/typescript/ai-bedrock"
+ },
+ "type": "module",
+ "module": "./dist/esm/index.js",
+ "types": "./dist/esm/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/esm/index.d.ts",
+ "import": "./dist/esm/index.js"
+ }
+ },
+ "files": [
+ "dist",
+ "src"
+ ],
+ "scripts": {
+ "build": "vite build",
+ "clean": "premove ./build ./dist",
+ "lint:fix": "eslint ./src --fix",
+ "test:build": "publint --strict",
+ "test:eslint": "eslint ./src",
+ "test:lib": "vitest --passWithNoTests",
+ "test:lib:dev": "pnpm test:lib --watch",
+ "test:types": "tsc"
+ },
+ "keywords": [
+ "ai",
+ "aws",
+ "bedrock",
+ "tanstack",
+ "adapter"
+ ],
+ "dependencies": {
+ "@smithy/eventstream-codec": "^4.2.5",
+ "@smithy/util-utf8": "^4.2.0",
+ "@tanstack/ai": "workspace:*",
+ "aws4fetch": "^1.0.20"
+ },
+ "devDependencies": {
+ "@aws-sdk/client-bedrock": "^3.947.0",
+ "@aws-sdk/client-bedrock-runtime": "^3.947.0",
+ "@vitest/coverage-v8": "4.0.14",
+ "vite": "^7.2.4"
+ },
+ "peerDependencies": {
+ "@tanstack/ai": "workspace:*"
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/bedrock-adapter.ts b/packages/typescript/ai-bedrock/src/bedrock-adapter.ts
new file mode 100644
index 00000000..991a3192
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/bedrock-adapter.ts
@@ -0,0 +1,1200 @@
+import { AwsV4Signer } from 'aws4fetch'
+import { EventStreamCodec } from '@smithy/eventstream-codec'
+import { fromUtf8, toUtf8 } from '@smithy/util-utf8'
+import { BaseAdapter } from '@tanstack/ai'
+import {
+ BEDROCK_EMBEDDING_MODELS,
+ BEDROCK_MODELS,
+ BEDROCK_MODEL_META,
+} from './model-meta'
+import { convertToolsToProviderFormat } from './tools/tool-converter'
+import { getProfileGeography } from './bedrock-regions'
+import type { InferenceProfileGeography } from './bedrock-regions'
+import type {
+ ContentBlock,
+ ConverseRequest,
+ ConverseResponse,
+ ConverseStreamOutput,
+ ConverseStreamRequest,
+ DocumentFormat,
+ ImageFormat,
+ InferenceConfiguration,
+ Message,
+ StopReason,
+ SystemContentBlock,
+ TokenUsage,
+ ToolConfiguration,
+ VideoFormat,
+} from '@aws-sdk/client-bedrock-runtime'
+import type {
+ AwsCredentialIdentity,
+ AwsCredentialIdentityProvider,
+ DocumentType,
+} from '@smithy/types'
+import type {
+ ChatOptions,
+ ContentPart,
+ EmbeddingOptions,
+ EmbeddingResult,
+ ModelMessage,
+ StreamChunk,
+ SummarizationOptions,
+ SummarizationResult,
+} from '@tanstack/ai'
+import type {
+ BedrockChatModelProviderOptionsByName,
+ BedrockModelInputModalitiesByName,
+} from './model-meta'
+import type { BedrockProviderOptions } from './text/text-provider-options'
+import type {
+ BedrockDocumentMetadata,
+ BedrockImageMetadata,
+ BedrockMessageMetadataByModality,
+ BedrockVideoMetadata,
+} from './message-types'
+
+type BedrockMessage = Message
+type BedrockContentBlock = ContentBlock
+type BedrockConversePayload = Omit
+type BedrockConverseStreamPayload = Omit
+type BedrockStreamEvent = ConverseStreamOutput
+
+function mapTokenUsage(usage: TokenUsage | undefined) {
+ if (!usage) return undefined
+ return {
+ promptTokens: usage.inputTokens ?? 0,
+ completionTokens: usage.outputTokens ?? 0,
+ totalTokens: usage.totalTokens ?? 0,
+ }
+}
+
+/**
+ * AWS credentials returned by a credential provider
+ */
+export type BedrockCredentials = AwsCredentialIdentity
+
+/**
+ * Configuration options for the Bedrock adapter.
+ *
+ * Supports two authentication methods:
+ * 1. **API Key (Bearer Token)** - Recommended for simplicity
+ * 2. **AWS SigV4** - Traditional AWS authentication with access keys
+ *
+ * Authentication priority:
+ * 1. `apiKey` (or `AWS_BEARER_TOKEN_BEDROCK` env var)
+ * 2. `credentialProvider` function
+ * 3. `accessKeyId`/`secretAccessKey` (or env vars)
+ *
+ * @example API Key Authentication
+ * ```typescript
+ * const bedrock = createBedrock({
+ * apiKey: 'your-bedrock-api-key',
+ * region: 'us-east-1'
+ * });
+ * ```
+ *
+ * @example SigV4 Authentication
+ * ```typescript
+ * const bedrock = createBedrock({
+ * accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
+ * secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
+ * region: 'us-east-1'
+ * });
+ * ```
+ *
+ * @example Credential Provider (for IAM roles, STS)
+ * ```typescript
+ * const bedrock = createBedrock({
+ * credentialProvider: async () => ({
+ * accessKeyId: 'temp-access-key',
+ * secretAccessKey: 'temp-secret-key',
+ * sessionToken: 'session-token'
+ * }),
+ * region: 'us-east-1'
+ * });
+ * ```
+ */
+export interface BedrockConfig {
+ /**
+ * AWS region for Bedrock service.
+ * Used to construct the endpoint URL.
+ *
+ * If not provided, defaults to:
+ * 1. `AWS_REGION` environment variable
+ * 2. `AWS_DEFAULT_REGION` environment variable
+ * 3. `'us-east-1'` as final fallback
+ */
+ region?: string
+
+ /**
+ * Amazon Bedrock API key for Bearer token authentication.
+ * This is the recommended authentication method for simplicity.
+ *
+ * If not provided, checks `AWS_BEARER_TOKEN_BEDROCK` environment variable.
+ *
+ * Note: API keys cannot be used with:
+ * - Agents for Amazon Bedrock APIs
+ * - Data Automation APIs
+ * - Bidirectional streaming (Nova Sonic)
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/api-keys.html
+ */
+ apiKey?: string
+
+ /**
+ * AWS Access Key ID for SigV4 authentication.
+ * Must be provided together with `secretAccessKey`.
+ *
+ * If not provided, checks `AWS_ACCESS_KEY_ID` environment variable.
+ */
+ accessKeyId?: string
+
+ /**
+ * AWS Secret Access Key for SigV4 authentication.
+ * Must be provided together with `accessKeyId`.
+ *
+ * If not provided, checks `AWS_SECRET_ACCESS_KEY` environment variable.
+ */
+ secretAccessKey?: string
+
+ /**
+ * AWS Session Token for temporary credentials (SigV4).
+ * Optional, used with temporary credentials from STS.
+ *
+ * If not provided, checks `AWS_SESSION_TOKEN` environment variable.
+ */
+ sessionToken?: string
+
+ /**
+ * Async function that returns AWS credentials dynamically.
+ * Useful for IAM roles, EC2 instance profiles, or STS assume role.
+ *
+ * Takes precedence over static `accessKeyId`/`secretAccessKey` if provided.
+ *
+ * @example
+ * ```typescript
+ * credentialProvider: async () => {
+ * const sts = new STSClient({});
+ * const { Credentials } = await sts.send(new AssumeRoleCommand({...}));
+ * return {
+ * accessKeyId: Credentials.AccessKeyId,
+ * secretAccessKey: Credentials.SecretAccessKey,
+ * sessionToken: Credentials.SessionToken
+ * };
+ * }
+ * ```
+ */
+ credentialProvider?: AwsCredentialIdentityProvider
+
+ /**
+ * Custom base URL for Bedrock API.
+ * If not provided, constructed from region: `https://bedrock-runtime.{region}.amazonaws.com`
+ *
+ * Useful for:
+ * - Custom endpoints
+ * - VPC endpoints
+ * - Local development/testing
+ */
+ baseURL?: string
+
+ /**
+ * Explicit geography for cross-region inference profiles.
+ * Overrides automatic detection from AWS region.
+ *
+ * Use this for:
+ * - Data residency requirements (e.g., force 'eu' for GDPR)
+ * - Using 'global' profiles for maximum throughput
+ *
+ * If not set, geography is inferred from `region`:
+ * - us-* → 'us'
+ * - eu-*, me-*, af-*, il-* → 'eu'
+ * - ap-* → 'apac'
+ */
+ inferenceProfileRegion?: InferenceProfileGeography
+}
+
+export class Bedrock extends BaseAdapter<
+ typeof BEDROCK_MODELS,
+ typeof BEDROCK_EMBEDDING_MODELS,
+ BedrockProviderOptions,
+ Record,
+ BedrockChatModelProviderOptionsByName,
+ BedrockModelInputModalitiesByName,
+ BedrockMessageMetadataByModality
+> {
+ name = 'bedrock' as const
+ models = BEDROCK_MODELS
+ embeddingModels = BEDROCK_EMBEDDING_MODELS
+
+ declare _modelProviderOptionsByName: BedrockChatModelProviderOptionsByName
+ declare _modelInputModalitiesByName: BedrockModelInputModalitiesByName
+ declare _messageMetadataByModality: BedrockMessageMetadataByModality
+
+ private bedrockConfig: BedrockConfig
+ private _resolvedRegion: string
+ private _resolvedBaseURL: string
+
+ constructor(config: BedrockConfig = {}) {
+ super({})
+ this.bedrockConfig = config
+ this._resolvedRegion = this.resolveRegion()
+ this._resolvedBaseURL = this.resolveBaseURL()
+ this.validateAuthConfig()
+ }
+
+ async *chatStream(
+ options: ChatOptions,
+ ): AsyncIterable {
+ const converseInput = this.mapCommonOptionsToBedrock(options)
+ const resolvedModelId = this.resolveModelId(options.model)
+ const modelId = encodeURIComponent(resolvedModelId)
+ const url = `${this._resolvedBaseURL}/model/${modelId}/converse-stream`
+
+ try {
+ const response = await this.fetchWithAuth(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ ...options.request?.headers,
+ },
+ body: JSON.stringify(converseInput),
+ signal: options.request?.signal,
+ })
+
+ if (!response.ok) {
+ const errorText = await response.text()
+ console.error('[Bedrock Adapter] API error:', {
+ status: response.status,
+ statusText: response.statusText,
+ error: errorText,
+ })
+ yield {
+ type: 'error',
+ id: this.generateId(),
+ model: options.model,
+ timestamp: Date.now(),
+ error: {
+ message: `Bedrock API error (${response.status}): ${errorText}`,
+ code: String(response.status),
+ },
+ }
+ return
+ }
+
+ yield* this.processBedrockStream(response, options.model)
+ } catch (error) {
+ console.error('[Bedrock Adapter] Error in chatStream:', {
+ message: error instanceof Error ? error.message : String(error),
+ error,
+ })
+ yield {
+ type: 'error',
+ id: this.generateId(),
+ model: options.model,
+ timestamp: Date.now(),
+ error: {
+ message:
+ error instanceof Error
+ ? error.message
+ : 'An unknown error occurred during chat stream',
+ },
+ }
+ }
+ }
+
+ async summarize(options: SummarizationOptions): Promise {
+ const prompt = this.buildSummarizationPrompt(options)
+ const resolvedModelId = this.resolveModelId(options.model)
+ const modelId = encodeURIComponent(resolvedModelId)
+ const url = `${this._resolvedBaseURL}/model/${modelId}/converse`
+
+ const converseInput: BedrockConversePayload = {
+ messages: [
+ {
+ role: 'user',
+ content: [{ text: options.text }],
+ },
+ ],
+ system: [{ text: prompt }],
+ inferenceConfig: {
+ maxTokens: options.maxLength || 500,
+ },
+ }
+
+ const response = await this.fetchWithAuth(url, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(converseInput),
+ })
+
+ if (!response.ok) {
+ const errorText = await response.text()
+ throw new Error(`Bedrock API error (${response.status}): ${errorText}`)
+ }
+
+ const result = (await response.json()) as ConverseResponse
+ const outputMessage = result.output?.message
+ const summary = outputMessage?.content?.map((block) => block.text || '').join('') ?? ''
+ const usage = mapTokenUsage(result.usage)
+
+ return {
+ id: this.generateId(),
+ model: options.model,
+ summary,
+ usage: usage ?? {
+ promptTokens: 0,
+ completionTokens: 0,
+ totalTokens: 0,
+ },
+ }
+ }
+
+ async createEmbeddings(options: EmbeddingOptions): Promise {
+ const inputs = Array.isArray(options.input)
+ ? options.input
+ : [options.input]
+ const embeddings: Array> = []
+ let totalInputTokens = 0
+
+ const resolvedModelId = this.resolveModelId(options.model)
+ const modelId = encodeURIComponent(resolvedModelId)
+
+ for (const inputText of inputs) {
+ const url = `${this._resolvedBaseURL}/model/${modelId}/invoke`
+
+ const body = {
+ inputText,
+ dimensions: options.dimensions,
+ normalize: true,
+ }
+
+ const response = await this.fetchWithAuth(url, {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify(body),
+ })
+
+ if (!response.ok) {
+ const errorText = await response.text()
+ throw new Error(`Bedrock embedding error (${response.status}): ${errorText}`)
+ }
+
+ const result = (await response.json()) as {
+ embedding: Array
+ inputTextTokenCount: number
+ }
+
+ embeddings.push(result.embedding)
+ totalInputTokens += result.inputTextTokenCount
+ }
+
+ return {
+ id: this.generateId(),
+ model: options.model,
+ embeddings,
+ usage: {
+ promptTokens: totalInputTokens,
+ totalTokens: totalInputTokens,
+ },
+ }
+ }
+
+ private getEnv(): Record | undefined {
+ if (typeof globalThis !== 'undefined') {
+ const win = (globalThis as Record).window as
+ | { env?: Record }
+ | undefined
+ if (win?.env) {
+ return win.env
+ }
+ }
+ if (typeof process !== 'undefined') {
+ return process.env
+ }
+ return undefined
+ }
+
+ private resolveRegion(): string {
+ if (this.bedrockConfig.region) {
+ return this.bedrockConfig.region
+ }
+ const env = this.getEnv()
+ return env?.AWS_REGION || env?.AWS_DEFAULT_REGION || 'us-east-1'
+ }
+
+ private resolveBaseURL(): string {
+ if (this.bedrockConfig.baseURL) {
+ return this.bedrockConfig.baseURL
+ }
+ return `https://bedrock-runtime.${this._resolvedRegion}.amazonaws.com`
+ }
+
+ private resolveModelId(modelId: string): string {
+ const isAlreadyPrefixed =
+ /^(us|eu|apac|global)\./.test(modelId) || modelId.startsWith('arn:')
+ if (isAlreadyPrefixed) {
+ return modelId
+ }
+
+ const profile = BEDROCK_MODEL_META[modelId]?.inferenceProfile
+ if (!profile) {
+ return modelId
+ }
+
+ const geography = this.resolveProfileGeography(profile.regions)
+ if (geography) {
+ return `${geography}.${modelId}`
+ }
+
+ if (!profile.required) {
+ return modelId
+ }
+
+ if (profile.regions.includes('global')) {
+ return `global.${modelId}`
+ }
+
+ const configured = this.bedrockConfig.inferenceProfileRegion
+ const inferred = getProfileGeography(this._resolvedRegion)
+ const context = configured
+ ? ` (configured: '${configured}', not supported)`
+ : inferred
+ ? ` (inferred: '${inferred}', not supported)`
+ : ''
+
+ throw new Error(
+ `Model "${modelId}" requires a cross-region inference profile.\n\n` +
+ `Your region: ${this._resolvedRegion}${context}\n` +
+ `Supported: ${profile.regions.join(', ')}\n\n` +
+ `Fix options:\n` +
+ ` • Set inferenceProfileRegion: '${profile.regions[0]}' in config\n` +
+ ` • Use full profile ID: "${profile.regions[0]}.${modelId}"`,
+ )
+ }
+
+ private resolveProfileGeography(
+ supportedRegions: Array,
+ ): InferenceProfileGeography | null {
+ const preferred = this.bedrockConfig.inferenceProfileRegion
+ if (preferred && supportedRegions.includes(preferred)) {
+ return preferred
+ }
+
+ const inferred = getProfileGeography(this._resolvedRegion)
+ if (inferred && supportedRegions.includes(inferred)) {
+ return inferred
+ }
+
+ return null
+ }
+
+ private validateAuthConfig(): void {
+ const env = this.getEnv()
+
+ const hasApiKey =
+ this.bedrockConfig.apiKey || env?.AWS_BEARER_TOKEN_BEDROCK
+ const hasCredentialProvider = !!this.bedrockConfig.credentialProvider
+ const hasAccessKey =
+ this.bedrockConfig.accessKeyId ?? env?.AWS_ACCESS_KEY_ID
+ const hasSecretKey =
+ this.bedrockConfig.secretAccessKey ?? env?.AWS_SECRET_ACCESS_KEY
+ const hasSigV4Credentials = hasAccessKey && hasSecretKey
+
+ if (hasApiKey) {
+ const apiKey = this.bedrockConfig.apiKey ?? env?.AWS_BEARER_TOKEN_BEDROCK
+ if (apiKey && apiKey.trim() === '') {
+ throw new Error(
+ 'Bedrock: Invalid API key. API key cannot be empty or whitespace.\n' +
+ 'Provide a valid API key via:\n' +
+ ' - config.apiKey\n' +
+ ' - AWS_BEARER_TOKEN_BEDROCK environment variable'
+ )
+ }
+ return
+ }
+
+ if (!hasCredentialProvider && !hasSigV4Credentials) {
+ throw new Error(
+ 'Bedrock: No authentication credentials provided.\n' +
+ 'Provide authentication via one of:\n' +
+ ' 1. config.apiKey or AWS_BEARER_TOKEN_BEDROCK (API key)\n' +
+ ' 2. config.credentialProvider (dynamic credentials)\n' +
+ ' 3. config.accessKeyId + config.secretAccessKey (static credentials)\n' +
+ ' 4. AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (environment variables)\n' +
+ ' 5. Mix of config and environment variables (e.g., config.accessKeyId + AWS_SECRET_ACCESS_KEY)'
+ )
+ }
+ }
+
+ private async fetchWithAuth(
+ url: string,
+ init: RequestInit,
+ ): Promise {
+ const env = this.getEnv()
+ const apiKey = this.bedrockConfig.apiKey ?? env?.AWS_BEARER_TOKEN_BEDROCK
+
+ if (apiKey) {
+ const headers = new Headers(init.headers)
+ headers.set('Authorization', `Bearer ${apiKey}`)
+ return fetch(url, { ...init, headers })
+ }
+
+ const credentials = this.bedrockConfig.credentialProvider
+ ? await this.bedrockConfig.credentialProvider()
+ : {
+ accessKeyId:
+ this.bedrockConfig.accessKeyId ?? env?.AWS_ACCESS_KEY_ID ?? '',
+ secretAccessKey:
+ this.bedrockConfig.secretAccessKey ??
+ env?.AWS_SECRET_ACCESS_KEY ??
+ '',
+ sessionToken:
+ this.bedrockConfig.sessionToken ?? env?.AWS_SESSION_TOKEN,
+ }
+
+ const signedRequest = await this.signRequest(url, init, credentials)
+ return fetch(url, signedRequest)
+ }
+
+ private async signRequest(
+ url: string,
+ init: RequestInit,
+ credentials: BedrockCredentials,
+ ): Promise {
+ const headers = new Headers(init.headers)
+ headers.set('host', new URL(url).host)
+
+ const body =
+ typeof init.body === 'string' ? init.body : JSON.stringify(init.body)
+
+ const signer = new AwsV4Signer({
+ url,
+ method: 'POST',
+ headers: Object.entries(Object.fromEntries(headers.entries())),
+ body,
+ region: this._resolvedRegion,
+ accessKeyId: credentials.accessKeyId,
+ secretAccessKey: credentials.secretAccessKey,
+ sessionToken: credentials.sessionToken,
+ service: 'bedrock',
+ })
+
+ const signed = await signer.sign()
+ return { ...init, headers: signed.headers, body }
+ }
+
+ private mapCommonOptionsToBedrock(
+ options: ChatOptions,
+ ): BedrockConverseStreamPayload {
+ const { messages } = this.formatMessages(options.messages)
+ const providerOptions = options.providerOptions
+
+ const inferenceConfig: Partial = {}
+ const additionalModelRequestFields: Record = {
+ ...(providerOptions?.additionalModelRequestFields ?? {}),
+ }
+ if (options.options?.maxTokens != null) {
+ inferenceConfig.maxTokens = options.options.maxTokens
+ }
+ if (options.options?.temperature != null) {
+ inferenceConfig.temperature = Math.min(
+ 1,
+ Math.max(0, options.options.temperature),
+ )
+ }
+ if (options.options?.topP != null) {
+ inferenceConfig.topP = options.options.topP
+ }
+ if (providerOptions?.topK != null) {
+ additionalModelRequestFields.topK = providerOptions.topK
+ }
+ if (providerOptions?.stopSequences != null) {
+ inferenceConfig.stopSequences = providerOptions.stopSequences
+ }
+
+ const systemMessages: Array = []
+ if (options.systemPrompts?.length) {
+ systemMessages.push({ text: options.systemPrompts.join('\n') })
+ }
+
+ const converseInput: BedrockConverseStreamPayload = {
+ messages,
+ ...(systemMessages.length > 0 && { system: systemMessages }),
+ ...(Object.keys(inferenceConfig).length > 0 && { inferenceConfig }),
+ }
+
+ if (options.tools?.length) {
+ const bedrockTools = convertToolsToProviderFormat(
+ options.tools,
+ options.model,
+ )
+
+ const toolConfig: ToolConfiguration = {
+ tools: bedrockTools,
+ }
+
+ if (providerOptions?.toolChoice) {
+ toolConfig.toolChoice = providerOptions.toolChoice
+ }
+
+ converseInput.toolConfig = toolConfig
+ }
+
+ if (providerOptions?.reasoningConfig) {
+ const reasoningConfig = providerOptions.reasoningConfig
+ additionalModelRequestFields.thinking = {
+ type: reasoningConfig.type,
+ ...(reasoningConfig.budgetTokens != null && {
+ budget_tokens: reasoningConfig.budgetTokens,
+ }),
+ }
+ }
+
+ if (Object.keys(additionalModelRequestFields).length > 0) {
+ converseInput.additionalModelRequestFields = additionalModelRequestFields
+ }
+
+ if (providerOptions?.performanceConfig) {
+ converseInput.performanceConfig = providerOptions.performanceConfig
+ }
+
+ if (providerOptions?.serviceTier) {
+ converseInput.serviceTier = providerOptions.serviceTier
+ }
+
+ if (providerOptions?.requestMetadata) {
+ converseInput.requestMetadata = providerOptions.requestMetadata
+ }
+
+ return converseInput
+ }
+
+ private formatMessages(messages: Array): {
+ messages: Array
+ } {
+ const bedrockMessages: Array = []
+
+ for (const message of messages) {
+ if (message.role === 'tool' && message.toolCallId) {
+ const lastMessage = bedrockMessages[bedrockMessages.length - 1]
+ const toolResultBlock: BedrockContentBlock = {
+ toolResult: {
+ toolUseId: message.toolCallId,
+ content: [
+ {
+ text:
+ typeof message.content === 'string'
+ ? message.content
+ : JSON.stringify(message.content),
+ },
+ ],
+ },
+ }
+
+ if (lastMessage?.role === 'user' && lastMessage.content) {
+ lastMessage.content.push(toolResultBlock)
+ } else {
+ bedrockMessages.push({
+ role: 'user',
+ content: [toolResultBlock],
+ })
+ }
+ continue
+ }
+
+ const bedrockContent: Array = []
+
+ if (Array.isArray(message.content)) {
+ for (const part of message.content) {
+ bedrockContent.push(this.convertContentPartToBedrock(part))
+ }
+ } else if (message.content) {
+ bedrockContent.push({ text: message.content })
+ }
+
+ if (message.role === 'assistant' && message.toolCalls?.length) {
+ for (const toolCall of message.toolCalls) {
+ const parsedInput = this.parseToolArguments(
+ toolCall.function.arguments,
+ )
+ bedrockContent.push({
+ toolUse: {
+ toolUseId: toolCall.id,
+ name: toolCall.function.name,
+ input: parsedInput,
+ },
+ })
+ }
+ }
+
+ if (bedrockContent.length > 0) {
+ bedrockMessages.push({
+ role: message.role === 'assistant' ? 'assistant' : 'user',
+ content: bedrockContent,
+ })
+ }
+ }
+
+ return { messages: bedrockMessages }
+ }
+
+ private convertContentPartToBedrock(part: ContentPart): BedrockContentBlock {
+ const DEFAULT_IMAGE_FORMAT: ImageFormat = 'jpeg'
+ const DEFAULT_VIDEO_FORMAT: VideoFormat = 'mp4'
+ const DEFAULT_DOCUMENT_FORMAT: DocumentFormat = 'pdf'
+
+ switch (part.type) {
+ case 'text':
+ return { text: part.content }
+ case 'image': {
+ const metadata = part.metadata as BedrockImageMetadata | undefined
+ const format = metadata?.format ?? DEFAULT_IMAGE_FORMAT
+
+ if (metadata?.s3Location) {
+ return {
+ image: {
+ format,
+ source: { s3Location: metadata.s3Location },
+ },
+ }
+ }
+
+ if (part.source.type === 'data') {
+ return {
+ image: {
+ format,
+ source: { bytes: base64ToBytes(part.source.value) },
+ },
+ }
+ }
+
+ throw new Error('Bedrock only supports image sources as inline base64 data or S3 locations')
+ }
+ case 'video': {
+ const metadata = part.metadata as BedrockVideoMetadata | undefined
+ const format = metadata?.format ?? DEFAULT_VIDEO_FORMAT
+
+ if (metadata?.s3Location) {
+ return {
+ video: {
+ format,
+ source: { s3Location: metadata.s3Location },
+ },
+ }
+ }
+
+ if (part.source.type === 'data') {
+ return {
+ video: {
+ format,
+ source: { bytes: base64ToBytes(part.source.value) },
+ },
+ }
+ }
+
+ throw new Error('Bedrock only supports video sources as inline base64 data or S3 locations')
+ }
+ case 'document': {
+ const metadata = part.metadata as BedrockDocumentMetadata | undefined
+ const format = metadata?.format ?? DEFAULT_DOCUMENT_FORMAT
+ const name = metadata?.name ?? `document-${Date.now()}`
+
+ if (metadata?.s3Location) {
+ return {
+ document: {
+ format,
+ name,
+ source: { s3Location: metadata.s3Location },
+ },
+ }
+ }
+
+ if (part.source.type === 'data') {
+ return {
+ document: {
+ format,
+ name,
+ source: { bytes: base64ToBytes(part.source.value) },
+ },
+ }
+ }
+
+ return {
+ document: {
+ format,
+ name,
+ source: { text: part.source.value },
+ },
+ }
+ }
+ case 'audio':
+ throw new Error(
+ 'Bedrock Converse API does not support audio input. Use Bedrock Data Automation for audio processing.',
+ )
+ default: {
+ const _exhaustiveCheck: never = part
+ throw new Error(
+ `Unsupported content part type: ${(_exhaustiveCheck as ContentPart).type}`,
+ )
+ }
+ }
+ }
+
+ private parseToolArguments(args?: string): DocumentType {
+ if (!args) return {} as DocumentType
+
+ try {
+ return JSON.parse(args) as DocumentType
+ } catch {
+ return {} as DocumentType
+ }
+ }
+
+ private async *processBedrockStream(
+ response: Response,
+ model: string,
+ ): AsyncIterable {
+ const timestamp = Date.now()
+ let accumulatedContent = ''
+ let accumulatedThinking = ''
+ const toolCallMap = new Map<
+ number,
+ { id: string; name: string; input: string }
+ >()
+ let currentBlockIndex = -1
+ let pendingFinishReason: 'stop' | 'tool_calls' | 'length' | 'content_filter' | null = null
+
+ const reader = response.body?.getReader()
+ if (!reader) {
+ yield {
+ type: 'error',
+ id: this.generateId(),
+ model,
+ timestamp,
+ error: { message: 'No response body' },
+ }
+ return
+ }
+
+ const codec = new EventStreamCodec(toUtf8, fromUtf8)
+ let buffer = new Uint8Array(0)
+ const textDecoder = new TextDecoder()
+
+ try {
+ for (;;) {
+ const { done, value } = await reader.read()
+ if (done) break
+
+ const newBuffer = new Uint8Array(buffer.length + value.length)
+ newBuffer.set(buffer)
+ newBuffer.set(value, buffer.length)
+ buffer = newBuffer
+
+ while (buffer.length >= 4) {
+ const totalLength = new DataView(
+ buffer.buffer,
+ buffer.byteOffset,
+ buffer.byteLength,
+ ).getUint32(0, false)
+
+ if (buffer.length < totalLength) break
+
+ try {
+ const subView = buffer.subarray(0, totalLength)
+ const decoded = codec.decode(subView)
+ buffer = buffer.slice(totalLength)
+
+ if (decoded.headers[':message-type']?.value === 'event') {
+ const eventType = decoded.headers[':event-type']?.value as string
+ const data = JSON.parse(textDecoder.decode(decoded.body))
+ delete data.p
+
+ const event = { [eventType]: data } as BedrockStreamEvent
+
+ if (event.messageStart) {
+ continue
+ }
+
+ if (event.contentBlockStart) {
+ currentBlockIndex = event.contentBlockStart.contentBlockIndex ?? 0
+
+ const toolUseStart = event.contentBlockStart.start?.toolUse
+ if (toolUseStart) {
+ toolCallMap.set(currentBlockIndex, {
+ id: toolUseStart.toolUseId || this.generateId(),
+ name: toolUseStart.name || '',
+ input: '',
+ })
+ }
+ }
+
+ if (event.contentBlockDelta?.delta) {
+ const delta = event.contentBlockDelta.delta
+
+ if (delta.text) {
+ accumulatedContent += delta.text
+ yield {
+ type: 'content',
+ id: this.generateId(),
+ model,
+ timestamp,
+ delta: delta.text,
+ content: accumulatedContent,
+ role: 'assistant',
+ }
+ }
+
+ if (delta.reasoningContent?.text) {
+ accumulatedThinking += delta.reasoningContent.text
+ yield {
+ type: 'thinking',
+ id: this.generateId(),
+ model,
+ timestamp,
+ delta: delta.reasoningContent.text,
+ content: accumulatedThinking,
+ }
+ }
+
+ if (delta.toolUse?.input) {
+ const existing = toolCallMap.get(currentBlockIndex)
+ if (existing) {
+ existing.input += delta.toolUse.input
+ }
+ }
+ }
+
+ if (event.contentBlockStop) {
+ const blockIndex = event.contentBlockStop.contentBlockIndex ?? currentBlockIndex
+ const toolData = toolCallMap.get(blockIndex)
+ if (toolData) {
+ yield {
+ type: 'tool_call',
+ id: this.generateId(),
+ model,
+ timestamp,
+ toolCall: {
+ id: toolData.id,
+ type: 'function',
+ function: {
+ name: toolData.name,
+ arguments: toolData.input || '{}',
+ },
+ },
+ index: blockIndex,
+ }
+ }
+ }
+
+ if (event.messageStop) {
+ const stopReason: StopReason | undefined = event.messageStop.stopReason
+ const hasToolCalls = toolCallMap.size > 0
+ if (hasToolCalls || stopReason === 'tool_use') {
+ pendingFinishReason = 'tool_calls'
+ } else if (stopReason === 'max_tokens' || stopReason === 'model_context_window_exceeded') {
+ pendingFinishReason = 'length'
+ } else if (stopReason === 'content_filtered' || stopReason === 'guardrail_intervened') {
+ pendingFinishReason = 'content_filter'
+ } else {
+ pendingFinishReason = 'stop'
+ }
+ }
+
+ if (event.metadata) {
+ const finishReason = pendingFinishReason ?? 'stop'
+ const usage = mapTokenUsage(event.metadata.usage)
+
+ yield {
+ type: 'done',
+ id: this.generateId(),
+ model,
+ timestamp,
+ finishReason,
+ usage,
+ }
+ pendingFinishReason = null
+ }
+
+ if (
+ event.internalServerException ||
+ event.modelStreamErrorException ||
+ event.throttlingException ||
+ event.validationException
+ ) {
+ const errorObj =
+ event.internalServerException ||
+ event.modelStreamErrorException ||
+ event.throttlingException ||
+ event.validationException
+ yield {
+ type: 'error',
+ id: this.generateId(),
+ model,
+ timestamp,
+ error: {
+ message: errorObj.message || 'Bedrock stream error',
+ },
+ }
+ }
+ }
+ } catch {
+ break
+ }
+ }
+ }
+
+ if (pendingFinishReason !== null) {
+ yield {
+ type: 'done',
+ id: this.generateId(),
+ model,
+ timestamp,
+ finishReason: pendingFinishReason,
+ }
+ }
+ } finally {
+ reader.releaseLock()
+ }
+ }
+
+ private buildSummarizationPrompt(options: SummarizationOptions): string {
+ let prompt = 'You are a professional summarizer. '
+
+ switch (options.style) {
+ case 'bullet-points':
+ prompt += 'Provide a summary in bullet point format. '
+ break
+ case 'paragraph':
+ prompt += 'Provide a summary in paragraph format. '
+ break
+ case 'concise':
+ prompt += 'Provide a very concise summary in 1-2 sentences. '
+ break
+ default:
+ prompt += 'Provide a clear and concise summary. '
+ }
+
+ if (options.focus && options.focus.length > 0) {
+ prompt += `Focus on the following aspects: ${options.focus.join(', ')}. `
+ }
+
+ if (options.maxLength) {
+ prompt += `Keep the summary under ${options.maxLength} tokens. `
+ }
+
+ return prompt
+ }
+}
+
+/**
+ * Creates a Bedrock adapter with the provided configuration.
+ *
+ * Supports two calling patterns for flexibility:
+ * 1. `createBedrock(apiKey)` or `createBedrock(apiKey, config)` - Simple API key auth
+ * 2. `createBedrock(config)` - Full config object for SigV4 or advanced options
+ *
+ * @param apiKeyOrConfig - API key string or full configuration object
+ * @param config - Optional additional configuration when first arg is API key
+ * @returns A configured Bedrock adapter instance
+ *
+ * @example Simple API Key (like OpenAI/Anthropic)
+ * ```typescript
+ * const bedrock = createBedrock('your-bedrock-api-key');
+ * ```
+ *
+ * @example API Key with Region
+ * ```typescript
+ * const bedrock = createBedrock('your-bedrock-api-key', {
+ * region: 'us-east-1'
+ * });
+ * ```
+ *
+ * @example SigV4 with Static Credentials
+ * ```typescript
+ * const bedrockAdapter = createBedrock({
+ * accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
+ * secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
+ * region: 'us-west-2'
+ * });
+ * ```
+ *
+ * @example SigV4 with Credential Provider
+ * ```typescript
+ * const bedrockAdapter = createBedrock({
+ * credentialProvider: async () => ({
+ * accessKeyId: await getAccessKey(),
+ * secretAccessKey: await getSecretKey(),
+ * sessionToken: await getSessionToken()
+ * }),
+ * region: 'eu-west-1'
+ * });
+ * ```
+ */
+export function createBedrock(
+ apiKey: string,
+ config?: Omit,
+): Bedrock
+export function createBedrock(config?: BedrockConfig): Bedrock
+export function createBedrock(
+ apiKeyOrConfig?: string | BedrockConfig,
+ maybeConfig?: Omit,
+): Bedrock {
+ if (typeof apiKeyOrConfig === 'string') {
+ return new Bedrock({ apiKey: apiKeyOrConfig, ...(maybeConfig ?? {}) })
+ }
+ return new Bedrock(apiKeyOrConfig ?? {})
+}
+
+/**
+ * Create a Bedrock adapter with automatic environment variable detection.
+ *
+ * Authentication is automatically detected from environment variables.
+ * Throws an error if no valid authentication is configured.
+ *
+ * **Authentication (checked in order):**
+ * 1. `AWS_BEARER_TOKEN_BEDROCK` - API key for Bearer token auth
+ * 2. `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` - SigV4 auth
+ * 3. `AWS_SESSION_TOKEN` - Optional session token for temporary credentials
+ *
+ * **Region:**
+ * - `AWS_REGION` or `AWS_DEFAULT_REGION`
+ * - Falls back to `'us-east-1'` if not set
+ *
+ * Environment variables are checked in:
+ * - `process.env` (Node.js)
+ * - `window.env` (Browser with injected env)
+ *
+ * @param config - Optional configuration to override environment defaults
+ * @returns Configured Bedrock adapter instance
+ * @throws Error if no authentication credentials are found
+ *
+ * @example Basic Usage (relies on environment variables)
+ * ```typescript
+ * // Set AWS_BEARER_TOKEN_BEDROCK or AWS credentials in environment
+ * const ai = new AI({
+ * adapters: { bedrock: bedrock() }
+ * });
+ * ```
+ *
+ * @example With Config Overrides
+ * ```typescript
+ * const ai = new AI({
+ * adapters: {
+ * bedrock: bedrock({
+ * region: 'eu-central-1'
+ * })
+ * }
+ * });
+ * ```
+ */
+export function bedrock(config?: BedrockConfig): Bedrock {
+ return createBedrock(config)
+}
+
+function base64ToBytes(base64: string): Uint8Array {
+ if (typeof Buffer !== 'undefined') {
+ return Uint8Array.from(Buffer.from(base64, 'base64'))
+ }
+ const binary = atob(base64)
+ return Uint8Array.from(binary, (c) => c.charCodeAt(0))
+}
diff --git a/packages/typescript/ai-bedrock/src/bedrock-regions.ts b/packages/typescript/ai-bedrock/src/bedrock-regions.ts
new file mode 100644
index 00000000..230a7b51
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/bedrock-regions.ts
@@ -0,0 +1,49 @@
+/**
+ * AWS Bedrock inference profile geography resolution.
+ *
+ * Cross-region inference profiles use geographic prefixes (us., eu., apac., global.)
+ * to route requests across AWS regions within a geography.
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html
+ */
+
+/** Geographic regions for cross-region inference profiles */
+export type InferenceProfileGeography = 'us' | 'eu' | 'apac' | 'global'
+
+/** Inference profile configuration for a model */
+export interface InferenceProfileConfig {
+ /** Which geographies have inference profiles for this model */
+ regions: Array
+ /** If true, model must be invoked via inference profile (no direct invocation) */
+ required?: boolean
+}
+
+/**
+ * Maps an AWS region code to its inference profile geography.
+ * Returns null for regions that don't map to a specific geography.
+ */
+export function getProfileGeography(
+ awsRegion: string,
+): Exclude | null {
+ if (!awsRegion) return null
+
+ // US regions
+ if (awsRegion.startsWith('us-')) return 'us'
+
+ // EU regions (includes Middle East and Africa which AWS groups with EU)
+ if (
+ awsRegion.startsWith('eu-') ||
+ awsRegion.startsWith('me-') ||
+ awsRegion.startsWith('af-') ||
+ awsRegion.startsWith('il-')
+ ) {
+ return 'eu'
+ }
+
+ // APAC regions
+ if (awsRegion.startsWith('ap-')) return 'apac'
+
+ // Regions that don't map to a specific geography (ca-, sa-, mx-, etc.)
+ // These need explicit config or global profiles
+ return null
+}
diff --git a/packages/typescript/ai-bedrock/src/index.ts b/packages/typescript/ai-bedrock/src/index.ts
new file mode 100644
index 00000000..8f774701
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/index.ts
@@ -0,0 +1,47 @@
+export {
+ bedrock,
+ Bedrock,
+ createBedrock,
+ type BedrockConfig,
+ type BedrockCredentials,
+} from './bedrock-adapter'
+export {
+ BEDROCK_EMBEDDING_MODELS,
+ BEDROCK_MODEL_META,
+ BEDROCK_MODELS,
+} from './model-meta'
+export type {
+ BedrockChatModelProviderOptionsByName,
+ BedrockModelInputModalitiesByName,
+} from './model-meta'
+export {
+ getProfileGeography,
+ type InferenceProfileConfig,
+ type InferenceProfileGeography,
+} from './bedrock-regions'
+export type {
+ BedrockAdditionalFieldsOptions,
+ BedrockAnthropicOptions,
+ BedrockAnthropicReasoningOptions,
+ BedrockBaseOptions,
+ BedrockPerformanceOptions,
+ BedrockProviderOptions,
+ BedrockReasoningEffortOptions,
+ BedrockRequestMetadataOptions,
+ BedrockServiceTierOptions,
+ BedrockToolChoiceOptions,
+} from './text/text-provider-options'
+export type {
+ BedrockAudioMetadata,
+ BedrockDocumentFormat,
+ BedrockDocumentMetadata,
+ BedrockImageFormat,
+ BedrockImageMetadata,
+ BedrockMessageMetadataByModality,
+ BedrockS3Location,
+ BedrockTextMetadata,
+ BedrockVideoFormat,
+ BedrockVideoMetadata,
+} from './message-types'
+
+export { convertToolsToProviderFormat } from './tools/tool-converter'
diff --git a/packages/typescript/ai-bedrock/src/message-types.ts b/packages/typescript/ai-bedrock/src/message-types.ts
new file mode 100644
index 00000000..04a8d06a
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/message-types.ts
@@ -0,0 +1,98 @@
+/**
+ * Bedrock-specific metadata types for multimodal content parts.
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html
+ */
+
+import type {
+ DocumentFormat,
+ ImageFormat,
+ S3Location,
+ VideoFormat,
+} from '@aws-sdk/client-bedrock-runtime'
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ImageBlock.html
+ */
+export type BedrockImageFormat = ImageFormat
+
+/**
+ * The Bedrock Converse API does not currently support audio input.
+ */
+export type BedrockAudioFormat = never
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_VideoBlock.html
+ */
+export type BedrockVideoFormat = VideoFormat
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_DocumentBlock.html
+ */
+export type BedrockDocumentFormat = DocumentFormat
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_S3Location.html
+ */
+export type BedrockS3Location = S3Location
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ImageBlock.html
+ */
+export interface BedrockImageMetadata {
+ format?: BedrockImageFormat
+ /**
+ * S3 location for the image. When provided, the image will be loaded from S3
+ * instead of using inline base64 data.
+ */
+ s3Location?: BedrockS3Location
+}
+
+/**
+ * The Bedrock Converse API does not currently support audio input.
+ */
+export interface BedrockAudioMetadata {}
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_VideoBlock.html
+ */
+export interface BedrockVideoMetadata {
+ format?: BedrockVideoFormat
+ /**
+ * S3 location for the video. When provided, the video will be loaded from S3
+ * instead of using inline base64 data.
+ */
+ s3Location?: BedrockS3Location
+}
+
+/**
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_DocumentBlock.html
+ */
+export interface BedrockDocumentMetadata {
+ format?: BedrockDocumentFormat
+ /**
+ * S3 location for the document. When provided, the document will be loaded from S3
+ * instead of using inline base64 data.
+ */
+ s3Location?: BedrockS3Location
+ /**
+ * Name for the document. If not provided, a default name will be generated.
+ */
+ name?: string
+}
+
+/**
+ * Metadata for Bedrock text content parts.
+ */
+export interface BedrockTextMetadata {}
+
+/**
+ * Map of modality types to their Bedrock-specific metadata types.
+ */
+export interface BedrockMessageMetadataByModality {
+ text: BedrockTextMetadata
+ image: BedrockImageMetadata
+ audio: BedrockAudioMetadata
+ video: BedrockVideoMetadata
+ document: BedrockDocumentMetadata
+}
diff --git a/packages/typescript/ai-bedrock/src/model-meta.ts b/packages/typescript/ai-bedrock/src/model-meta.ts
new file mode 100644
index 00000000..7b2d1cc2
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/model-meta.ts
@@ -0,0 +1,1830 @@
+/**
+ * Bedrock model metadata and provider options.
+ *
+ * Cross-region inference profiles are automatically resolved based on your AWS region.
+ * Just pass the base model ID and the adapter handles the rest.
+ *
+ * @example
+ * ```typescript
+ * // The adapter automatically resolves to 'us.anthropic.claude-sonnet-4-20250514-v1:0'
+ * // when your region is us-east-1
+ * await bedrock.chat({
+ * model: 'anthropic.claude-sonnet-4-20250514-v1:0',
+ * messages: [...]
+ * });
+ * ```
+ *
+* @see https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
+* @see https://docs.aws.amazon.com/bedrock/latest/userguide/cross-region-inference.html
+ */
+
+import type {
+ BedrockAnthropicOptions,
+ BedrockAnthropicReasoningOptions,
+ BedrockProviderOptions,
+ BedrockReasoningEffortOptions,
+} from './text/text-provider-options'
+import type { InferenceProfileConfig } from './bedrock-regions'
+
+interface ModelMeta {
+ name: string
+ id: string
+ supports: {
+ converse: boolean
+ streaming: boolean
+ systemPrompts: boolean
+ documentChat: boolean
+ vision: boolean
+ toolUse: boolean
+ streamingToolUse: boolean
+ guardrails: boolean
+ s3Links: boolean
+ reasoning?: boolean
+ }
+ contextWindow?: number
+ maxOutputTokens?: number
+ providerOptions?: TProviderOptions
+ inferenceProfile?: InferenceProfileConfig
+}
+
+const NOVA_LITE = {
+ name: 'Nova Lite',
+ id: 'amazon.nova-lite-v1:0',
+ contextWindow: 300_000,
+ maxOutputTokens: 5_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: true,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_MICRO = {
+ name: 'Nova Micro',
+ id: 'amazon.nova-micro-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 5_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_PRO = {
+ name: 'Nova Pro',
+ id: 'amazon.nova-pro-v1:0',
+ contextWindow: 300_000,
+ maxOutputTokens: 5_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: true,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_PREMIER = {
+ name: 'Nova Premier',
+ id: 'amazon.nova-premier-v1:0',
+ contextWindow: 1_000_000,
+ maxOutputTokens: 32_000,
+ inferenceProfile: { regions: ['us'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: true,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_2_LITE = {
+ name: 'Nova 2 Lite',
+ id: 'amazon.nova-2-lite-v1:0',
+ contextWindow: 1_000_000,
+ maxOutputTokens: 32_000,
+ inferenceProfile: { regions: ['us', 'global'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: true,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_2_SONIC = {
+ name: 'Nova 2 Sonic',
+ id: 'amazon.nova-2-sonic-v1:0',
+ contextWindow: 1_000_000,
+ inferenceProfile: { regions: ['us'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_HAIKU = {
+ name: 'Claude 3 Haiku',
+ id: 'anthropic.claude-3-haiku-20240307-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 4_096,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_SONNET = {
+ name: 'Claude 3 Sonnet',
+ id: 'anthropic.claude-3-sonnet-20240229-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 4_096,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_OPUS = {
+ name: 'Claude 3 Opus',
+ id: 'anthropic.claude-3-opus-20240229-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 4_096,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_5_HAIKU = {
+ name: 'Claude 3.5 Haiku',
+ id: 'anthropic.claude-3-5-haiku-20241022-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 8_192,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_5_SONNET = {
+ name: 'Claude 3.5 Sonnet',
+ id: 'anthropic.claude-3-5-sonnet-20240620-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 8_192,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_5_SONNET_V2 = {
+ name: 'Claude 3.5 Sonnet v2',
+ id: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 8_192,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const CLAUDE_3_7_SONNET = {
+ name: 'Claude 3.7 Sonnet',
+ id: 'anthropic.claude-3-7-sonnet-20250219-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: true,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_HAIKU_4_5 = {
+ name: 'Claude Haiku 4.5',
+ id: 'anthropic.claude-haiku-4-5-20251001-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac', 'global'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_SONNET_4 = {
+ name: 'Claude Sonnet 4',
+ id: 'anthropic.claude-sonnet-4-20250514-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac', 'global'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_SONNET_4_5 = {
+ name: 'Claude Sonnet 4.5',
+ id: 'anthropic.claude-sonnet-4-5-20250929-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac', 'global'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_OPUS_4 = {
+ name: 'Claude Opus 4',
+ id: 'anthropic.claude-opus-4-20250514-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 32_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_OPUS_4_1 = {
+ name: 'Claude Opus 4.1',
+ id: 'anthropic.claude-opus-4-1-20250805-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const CLAUDE_OPUS_4_5 = {
+ name: 'Claude Opus 4.5',
+ id: 'anthropic.claude-opus-4-5-20251101-v1:0',
+ contextWindow: 200_000,
+ maxOutputTokens: 64_000,
+ inferenceProfile: { regions: ['us', 'eu', 'global'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta<
+ BedrockProviderOptions & BedrockAnthropicOptions & BedrockAnthropicReasoningOptions
+>
+
+const LLAMA_3_8B = {
+ name: 'Llama 3 8B Instruct',
+ id: 'meta.llama3-8b-instruct-v1:0',
+ contextWindow: 8_192,
+ maxOutputTokens: 2_048,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_70B = {
+ name: 'Llama 3 70B Instruct',
+ id: 'meta.llama3-70b-instruct-v1:0',
+ contextWindow: 8_192,
+ maxOutputTokens: 2_048,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_1_8B = {
+ name: 'Llama 3.1 8B Instruct',
+ id: 'meta.llama3-1-8b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us', 'eu'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_1_70B = {
+ name: 'Llama 3.1 70B Instruct',
+ id: 'meta.llama3-1-70b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us', 'eu'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_1_405B = {
+ name: 'Llama 3.1 405B Instruct',
+ id: 'meta.llama3-1-405b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_2_1B = {
+ name: 'Llama 3.2 1B Instruct',
+ id: 'meta.llama3-2-1b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_2_3B = {
+ name: 'Llama 3.2 3B Instruct',
+ id: 'meta.llama3-2-3b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_2_11B = {
+ name: 'Llama 3.2 11B Vision Instruct',
+ id: 'meta.llama3-2-11b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_2_90B = {
+ name: 'Llama 3.2 90B Vision Instruct',
+ id: 'meta.llama3-2-90b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_3_3_70B = {
+ name: 'Llama 3.3 70B Instruct',
+ id: 'meta.llama3-3-70b-instruct-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 2_048,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_4_SCOUT = {
+ name: 'Llama 4 Scout 17B Instruct',
+ id: 'meta.llama4-scout-17b-instruct-v1:0',
+ contextWindow: 10_000_000,
+ maxOutputTokens: 16_384,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LLAMA_4_MAVERICK = {
+ name: 'Llama 4 Maverick 17B Instruct',
+ id: 'meta.llama4-maverick-17b-instruct-v1:0',
+ contextWindow: 1_000_000,
+ maxOutputTokens: 16_384,
+ inferenceProfile: { regions: ['us'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MISTRAL_7B = {
+ name: 'Mistral 7B Instruct',
+ id: 'mistral.mistral-7b-instruct-v0:2',
+ contextWindow: 32_768,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MIXTRAL_8X7B = {
+ name: 'Mixtral 8x7B Instruct',
+ id: 'mistral.mixtral-8x7b-instruct-v0:1',
+ contextWindow: 32_768,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MISTRAL_LARGE_2402 = {
+ name: 'Mistral Large (24.02)',
+ id: 'mistral.mistral-large-2402-v1:0',
+ contextWindow: 32_768,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MISTRAL_LARGE_2407 = {
+ name: 'Mistral Large (24.07)',
+ id: 'mistral.mistral-large-2407-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MISTRAL_SMALL_2402 = {
+ name: 'Mistral Small (24.02)',
+ id: 'mistral.mistral-small-2402-v1:0',
+ contextWindow: 32_768,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const PIXTRAL_LARGE = {
+ name: 'Pixtral Large (25.02)',
+ id: 'mistral.pixtral-large-2502-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ inferenceProfile: { regions: ['us', 'eu'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MISTRAL_LARGE_3 = {
+ name: 'Mistral Large 3',
+ id: 'mistral.mistral-large-3-675b-instruct',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MINISTRAL_3_3B = {
+ name: 'Ministral 3 3B',
+ id: 'mistral.ministral-3-3b-instruct',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MINISTRAL_3_8B = {
+ name: 'Ministral 3 8B',
+ id: 'mistral.ministral-3-8b-instruct',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MINISTRAL_3_14B = {
+ name: 'Ministral 3 14B',
+ id: 'mistral.ministral-3-14b-instruct',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MAGISTRAL_SMALL = {
+ name: 'Magistral Small',
+ id: 'mistral.magistral-small-2509',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const VOXTRAL_MINI = {
+ name: 'Voxtral Mini 3B',
+ id: 'mistral.voxtral-mini-3b-2507',
+ contextWindow: 32_768,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const VOXTRAL_SMALL = {
+ name: 'Voxtral Small 24B',
+ id: 'mistral.voxtral-small-24b-2507',
+ contextWindow: 32_768,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_TEXT_LARGE = {
+ name: 'Titan Text Large',
+ id: 'amazon.titan-tg1-large',
+ contextWindow: 8_000,
+ maxOutputTokens: 8_000,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_TEXT_EXPRESS = {
+ name: 'Titan Text Express',
+ id: 'amazon.titan-text-express-v1',
+ contextWindow: 8_000,
+ maxOutputTokens: 8_000,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_TEXT_LITE = {
+ name: 'Titan Text Lite',
+ id: 'amazon.titan-text-lite-v1',
+ contextWindow: 4_000,
+ maxOutputTokens: 4_000,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_COMMAND_TEXT = {
+ name: 'Command Text',
+ id: 'cohere.command-text-v14',
+ contextWindow: 4_096,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_COMMAND_LIGHT = {
+ name: 'Command Light',
+ id: 'cohere.command-light-text-v14',
+ contextWindow: 4_096,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_COMMAND_R = {
+ name: 'Command R',
+ id: 'cohere.command-r-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_COMMAND_R_PLUS = {
+ name: 'Command R+',
+ id: 'cohere.command-r-plus-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const DEEPSEEK_R1 = {
+ name: 'DeepSeek R1',
+ id: 'deepseek.r1-v1:0',
+ contextWindow: 64_000,
+ maxOutputTokens: 8_192,
+ inferenceProfile: { regions: ['us'], required: true },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const DEEPSEEK_V3 = {
+ name: 'DeepSeek V3',
+ id: 'deepseek.v3-v1:0',
+ contextWindow: 64_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const AI21_JAMBA_LARGE = {
+ name: 'Jamba 1.5 Large',
+ id: 'ai21.jamba-1-5-large-v1:0',
+ contextWindow: 256_000,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const AI21_JAMBA_MINI = {
+ name: 'Jamba 1.5 Mini',
+ id: 'ai21.jamba-1-5-mini-v1:0',
+ contextWindow: 256_000,
+ maxOutputTokens: 4_096,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: true,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const WRITER_PALMYRA_X4 = {
+ name: 'Palmyra X4',
+ id: 'writer.palmyra-x4-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const WRITER_PALMYRA_X5 = {
+ name: 'Palmyra X5',
+ id: 'writer.palmyra-x5-v1:0',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: true,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+// =============================================================================
+// Other Models
+// =============================================================================
+
+const GEMMA_3_4B = {
+ name: 'Gemma 3 4B',
+ id: 'google.gemma-3-4b-it',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const GEMMA_3_12B = {
+ name: 'Gemma 3 12B',
+ id: 'google.gemma-3-12b-it',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const GEMMA_3_27B = {
+ name: 'Gemma 3 27B',
+ id: 'google.gemma-3-27b-it',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const NVIDIA_NEMOTRON_9B = {
+ name: 'NVIDIA Nemotron Nano 9B v2',
+ id: 'nvidia.nemotron-nano-9b-v2',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const NVIDIA_NEMOTRON_12B_VL = {
+ name: 'NVIDIA Nemotron Nano 12B v2 VL',
+ id: 'nvidia.nemotron-nano-12b-v2',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MINIMAX_M2 = {
+ name: 'MiniMax M2',
+ id: 'minimax.minimax-m2',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const MOONSHOT_KIMI_K2 = {
+ name: 'Moonshot Kimi K2 Thinking',
+ id: 'moonshot.kimi-k2-thinking',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: true,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ reasoning: true,
+ },
+} as const satisfies ModelMeta
+
+const OPENAI_SAFEGUARD_20B = {
+ name: 'GPT OSS Safeguard 20B',
+ id: 'openai.gpt-oss-safeguard-20b',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const OPENAI_SAFEGUARD_120B = {
+ name: 'GPT OSS Safeguard 120B',
+ id: 'openai.gpt-oss-safeguard-120b',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const QWEN_3_NEXT_80B = {
+ name: 'Qwen3 Next 80B A3B Instruct',
+ id: 'qwen.qwen3-next-80b-a3b',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const QWEN_3_VL_235B = {
+ name: 'Qwen3 VL 235B A22B',
+ id: 'qwen.qwen3-vl-235b-a22b',
+ contextWindow: 128_000,
+ maxOutputTokens: 8_192,
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: true,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TWELVELABS_PEGASUS = {
+ name: 'Pegasus v1.2',
+ id: 'twelvelabs.pegasus-1-2-v1:0',
+ contextWindow: 128_000,
+ inferenceProfile: { regions: ['us', 'eu', 'apac', 'global'] },
+ supports: {
+ converse: true,
+ streaming: true,
+ systemPrompts: true,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: true,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const LUMA_RAY_V2 = {
+ name: 'Ray v2',
+ id: 'luma.ray-v2:0',
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_EMBED_TEXT_V1 = {
+ name: 'Titan Embeddings G1 - Text',
+ id: 'amazon.titan-embed-text-v1',
+ contextWindow: 8_192,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_EMBED_TEXT_V2 = {
+ name: 'Titan Text Embeddings V2',
+ id: 'amazon.titan-embed-text-v2:0',
+ contextWindow: 8_192,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TITAN_EMBED_IMAGE = {
+ name: 'Titan Multimodal Embeddings G1',
+ id: 'amazon.titan-embed-image-v1',
+ contextWindow: 256,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const NOVA_MULTIMODAL_EMBED = {
+ name: 'Nova 2 Multimodal Embeddings',
+ id: 'amazon.nova-2-multimodal-embeddings-v1:0',
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_EMBED_ENGLISH = {
+ name: 'Cohere Embed English v3',
+ id: 'cohere.embed-english-v3',
+ contextWindow: 512,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_EMBED_MULTILINGUAL = {
+ name: 'Cohere Embed Multilingual v3',
+ id: 'cohere.embed-multilingual-v3',
+ contextWindow: 512,
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const COHERE_EMBED_V4 = {
+ name: 'Cohere Embed v4',
+ id: 'cohere.embed-v4:0',
+ contextWindow: 128_000,
+ inferenceProfile: { regions: ['us', 'eu', 'global'] },
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+const TWELVELABS_MARENGO_EMBED = {
+ name: 'Marengo Embed v2.7',
+ id: 'twelvelabs.marengo-embed-2-7-v1:0',
+ supports: {
+ converse: false,
+ streaming: false,
+ systemPrompts: false,
+ documentChat: false,
+ vision: false,
+ toolUse: false,
+ streamingToolUse: false,
+ guardrails: false,
+ s3Links: false,
+ },
+} as const satisfies ModelMeta
+
+export const BEDROCK_MODELS = [
+ NOVA_LITE.id,
+ NOVA_MICRO.id,
+ NOVA_PRO.id,
+ NOVA_PREMIER.id,
+ NOVA_2_LITE.id,
+ NOVA_2_SONIC.id,
+ CLAUDE_3_HAIKU.id,
+ CLAUDE_3_SONNET.id,
+ CLAUDE_3_OPUS.id,
+ CLAUDE_3_5_HAIKU.id,
+ CLAUDE_3_5_SONNET.id,
+ CLAUDE_3_5_SONNET_V2.id,
+ CLAUDE_3_7_SONNET.id,
+ CLAUDE_HAIKU_4_5.id,
+ CLAUDE_SONNET_4.id,
+ CLAUDE_SONNET_4_5.id,
+ CLAUDE_OPUS_4.id,
+ CLAUDE_OPUS_4_1.id,
+ CLAUDE_OPUS_4_5.id,
+ LLAMA_3_8B.id,
+ LLAMA_3_70B.id,
+ LLAMA_3_1_8B.id,
+ LLAMA_3_1_70B.id,
+ LLAMA_3_1_405B.id,
+ LLAMA_3_2_1B.id,
+ LLAMA_3_2_3B.id,
+ LLAMA_3_2_11B.id,
+ LLAMA_3_2_90B.id,
+ LLAMA_3_3_70B.id,
+ LLAMA_4_SCOUT.id,
+ LLAMA_4_MAVERICK.id,
+ MISTRAL_7B.id,
+ MIXTRAL_8X7B.id,
+ MISTRAL_LARGE_2402.id,
+ MISTRAL_LARGE_2407.id,
+ MISTRAL_SMALL_2402.id,
+ PIXTRAL_LARGE.id,
+ TITAN_TEXT_LARGE.id,
+ TITAN_TEXT_EXPRESS.id,
+ TITAN_TEXT_LITE.id,
+ COHERE_COMMAND_TEXT.id,
+ COHERE_COMMAND_LIGHT.id,
+ COHERE_COMMAND_R.id,
+ COHERE_COMMAND_R_PLUS.id,
+ DEEPSEEK_R1.id,
+ DEEPSEEK_V3.id,
+ AI21_JAMBA_LARGE.id,
+ AI21_JAMBA_MINI.id,
+ WRITER_PALMYRA_X4.id,
+ WRITER_PALMYRA_X5.id,
+ TWELVELABS_PEGASUS.id,
+ LUMA_RAY_V2.id,
+ MISTRAL_LARGE_3.id,
+ MINISTRAL_3_3B.id,
+ MINISTRAL_3_8B.id,
+ MINISTRAL_3_14B.id,
+ MAGISTRAL_SMALL.id,
+ VOXTRAL_MINI.id,
+ VOXTRAL_SMALL.id,
+ GEMMA_3_4B.id,
+ GEMMA_3_12B.id,
+ GEMMA_3_27B.id,
+ NVIDIA_NEMOTRON_9B.id,
+ NVIDIA_NEMOTRON_12B_VL.id,
+ MINIMAX_M2.id,
+ MOONSHOT_KIMI_K2.id,
+ OPENAI_SAFEGUARD_20B.id,
+ OPENAI_SAFEGUARD_120B.id,
+ QWEN_3_NEXT_80B.id,
+ QWEN_3_VL_235B.id,
+] as const
+
+export const BEDROCK_EMBEDDING_MODELS = [
+ TITAN_EMBED_TEXT_V1.id,
+ TITAN_EMBED_TEXT_V2.id,
+ TITAN_EMBED_IMAGE.id,
+ NOVA_MULTIMODAL_EMBED.id,
+ COHERE_EMBED_ENGLISH.id,
+ COHERE_EMBED_MULTILINGUAL.id,
+ COHERE_EMBED_V4.id,
+ TWELVELABS_MARENGO_EMBED.id,
+] as const
+
+export const BEDROCK_MODEL_META: Record> = {
+ [NOVA_LITE.id]: NOVA_LITE,
+ [NOVA_MICRO.id]: NOVA_MICRO,
+ [NOVA_PRO.id]: NOVA_PRO,
+ [NOVA_PREMIER.id]: NOVA_PREMIER,
+ [NOVA_2_LITE.id]: NOVA_2_LITE,
+ [NOVA_2_SONIC.id]: NOVA_2_SONIC,
+ [CLAUDE_3_HAIKU.id]: CLAUDE_3_HAIKU,
+ [CLAUDE_3_SONNET.id]: CLAUDE_3_SONNET,
+ [CLAUDE_3_OPUS.id]: CLAUDE_3_OPUS,
+ [CLAUDE_3_5_HAIKU.id]: CLAUDE_3_5_HAIKU,
+ [CLAUDE_3_5_SONNET.id]: CLAUDE_3_5_SONNET,
+ [CLAUDE_3_5_SONNET_V2.id]: CLAUDE_3_5_SONNET_V2,
+ [CLAUDE_3_7_SONNET.id]: CLAUDE_3_7_SONNET,
+ [CLAUDE_HAIKU_4_5.id]: CLAUDE_HAIKU_4_5,
+ [CLAUDE_SONNET_4.id]: CLAUDE_SONNET_4,
+ [CLAUDE_SONNET_4_5.id]: CLAUDE_SONNET_4_5,
+ [CLAUDE_OPUS_4.id]: CLAUDE_OPUS_4,
+ [CLAUDE_OPUS_4_1.id]: CLAUDE_OPUS_4_1,
+ [CLAUDE_OPUS_4_5.id]: CLAUDE_OPUS_4_5,
+ [LLAMA_3_8B.id]: LLAMA_3_8B,
+ [LLAMA_3_70B.id]: LLAMA_3_70B,
+ [LLAMA_3_1_8B.id]: LLAMA_3_1_8B,
+ [LLAMA_3_1_70B.id]: LLAMA_3_1_70B,
+ [LLAMA_3_1_405B.id]: LLAMA_3_1_405B,
+ [LLAMA_3_2_1B.id]: LLAMA_3_2_1B,
+ [LLAMA_3_2_3B.id]: LLAMA_3_2_3B,
+ [LLAMA_3_2_11B.id]: LLAMA_3_2_11B,
+ [LLAMA_3_2_90B.id]: LLAMA_3_2_90B,
+ [LLAMA_3_3_70B.id]: LLAMA_3_3_70B,
+ [LLAMA_4_SCOUT.id]: LLAMA_4_SCOUT,
+ [LLAMA_4_MAVERICK.id]: LLAMA_4_MAVERICK,
+ [MISTRAL_7B.id]: MISTRAL_7B,
+ [MIXTRAL_8X7B.id]: MIXTRAL_8X7B,
+ [MISTRAL_LARGE_2402.id]: MISTRAL_LARGE_2402,
+ [MISTRAL_LARGE_2407.id]: MISTRAL_LARGE_2407,
+ [MISTRAL_SMALL_2402.id]: MISTRAL_SMALL_2402,
+ [PIXTRAL_LARGE.id]: PIXTRAL_LARGE,
+ [TITAN_TEXT_LARGE.id]: TITAN_TEXT_LARGE,
+ [TITAN_TEXT_EXPRESS.id]: TITAN_TEXT_EXPRESS,
+ [TITAN_TEXT_LITE.id]: TITAN_TEXT_LITE,
+ [COHERE_COMMAND_TEXT.id]: COHERE_COMMAND_TEXT,
+ [COHERE_COMMAND_LIGHT.id]: COHERE_COMMAND_LIGHT,
+ [COHERE_COMMAND_R.id]: COHERE_COMMAND_R,
+ [COHERE_COMMAND_R_PLUS.id]: COHERE_COMMAND_R_PLUS,
+ [DEEPSEEK_R1.id]: DEEPSEEK_R1,
+ [DEEPSEEK_V3.id]: DEEPSEEK_V3,
+ [AI21_JAMBA_LARGE.id]: AI21_JAMBA_LARGE,
+ [AI21_JAMBA_MINI.id]: AI21_JAMBA_MINI,
+ [WRITER_PALMYRA_X4.id]: WRITER_PALMYRA_X4,
+ [WRITER_PALMYRA_X5.id]: WRITER_PALMYRA_X5,
+ [TWELVELABS_PEGASUS.id]: TWELVELABS_PEGASUS,
+ [LUMA_RAY_V2.id]: LUMA_RAY_V2,
+ [MISTRAL_LARGE_3.id]: MISTRAL_LARGE_3,
+ [MINISTRAL_3_3B.id]: MINISTRAL_3_3B,
+ [MINISTRAL_3_8B.id]: MINISTRAL_3_8B,
+ [MINISTRAL_3_14B.id]: MINISTRAL_3_14B,
+ [MAGISTRAL_SMALL.id]: MAGISTRAL_SMALL,
+ [VOXTRAL_MINI.id]: VOXTRAL_MINI,
+ [VOXTRAL_SMALL.id]: VOXTRAL_SMALL,
+ [GEMMA_3_4B.id]: GEMMA_3_4B,
+ [GEMMA_3_12B.id]: GEMMA_3_12B,
+ [GEMMA_3_27B.id]: GEMMA_3_27B,
+ [NVIDIA_NEMOTRON_9B.id]: NVIDIA_NEMOTRON_9B,
+ [NVIDIA_NEMOTRON_12B_VL.id]: NVIDIA_NEMOTRON_12B_VL,
+ [MINIMAX_M2.id]: MINIMAX_M2,
+ [MOONSHOT_KIMI_K2.id]: MOONSHOT_KIMI_K2,
+ [OPENAI_SAFEGUARD_20B.id]: OPENAI_SAFEGUARD_20B,
+ [OPENAI_SAFEGUARD_120B.id]: OPENAI_SAFEGUARD_120B,
+ [QWEN_3_NEXT_80B.id]: QWEN_3_NEXT_80B,
+ [QWEN_3_VL_235B.id]: QWEN_3_VL_235B,
+ [TITAN_EMBED_TEXT_V1.id]: TITAN_EMBED_TEXT_V1,
+ [TITAN_EMBED_TEXT_V2.id]: TITAN_EMBED_TEXT_V2,
+ [TITAN_EMBED_IMAGE.id]: TITAN_EMBED_IMAGE,
+ [NOVA_MULTIMODAL_EMBED.id]: NOVA_MULTIMODAL_EMBED,
+ [COHERE_EMBED_ENGLISH.id]: COHERE_EMBED_ENGLISH,
+ [COHERE_EMBED_MULTILINGUAL.id]: COHERE_EMBED_MULTILINGUAL,
+ [COHERE_EMBED_V4.id]: COHERE_EMBED_V4,
+ [TWELVELABS_MARENGO_EMBED.id]: TWELVELABS_MARENGO_EMBED,
+}
+
+type TextOnly = readonly ['text']
+type TextImage = readonly ['text', 'image']
+type TextImageDocument = readonly ['text', 'image', 'document']
+type TextDocument = readonly ['text', 'document']
+
+export type BedrockChatModelProviderOptionsByName = {
+ [NOVA_LITE.id]: BedrockProviderOptions
+ [NOVA_MICRO.id]: BedrockProviderOptions
+ [NOVA_PRO.id]: BedrockProviderOptions
+ [NOVA_PREMIER.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [NOVA_2_LITE.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [NOVA_2_SONIC.id]: BedrockProviderOptions
+ [CLAUDE_3_HAIKU.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_SONNET.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_OPUS.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_5_HAIKU.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_5_SONNET.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_5_SONNET_V2.id]: BedrockProviderOptions & BedrockAnthropicOptions
+ [CLAUDE_3_7_SONNET.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_HAIKU_4_5.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_SONNET_4.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_SONNET_4_5.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_OPUS_4.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_OPUS_4_1.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [CLAUDE_OPUS_4_5.id]: BedrockProviderOptions &
+ BedrockAnthropicOptions &
+ BedrockAnthropicReasoningOptions
+ [LLAMA_3_8B.id]: BedrockProviderOptions
+ [LLAMA_3_70B.id]: BedrockProviderOptions
+ [LLAMA_3_1_8B.id]: BedrockProviderOptions
+ [LLAMA_3_1_70B.id]: BedrockProviderOptions
+ [LLAMA_3_1_405B.id]: BedrockProviderOptions
+ [LLAMA_3_2_1B.id]: BedrockProviderOptions
+ [LLAMA_3_2_3B.id]: BedrockProviderOptions
+ [LLAMA_3_2_11B.id]: BedrockProviderOptions
+ [LLAMA_3_2_90B.id]: BedrockProviderOptions
+ [LLAMA_3_3_70B.id]: BedrockProviderOptions
+ [LLAMA_4_SCOUT.id]: BedrockProviderOptions
+ [LLAMA_4_MAVERICK.id]: BedrockProviderOptions
+ [MISTRAL_7B.id]: BedrockProviderOptions
+ [MIXTRAL_8X7B.id]: BedrockProviderOptions
+ [MISTRAL_LARGE_2402.id]: BedrockProviderOptions
+ [MISTRAL_LARGE_2407.id]: BedrockProviderOptions
+ [MISTRAL_SMALL_2402.id]: BedrockProviderOptions
+ [PIXTRAL_LARGE.id]: BedrockProviderOptions
+ [TITAN_TEXT_LARGE.id]: BedrockProviderOptions
+ [TITAN_TEXT_EXPRESS.id]: BedrockProviderOptions
+ [TITAN_TEXT_LITE.id]: BedrockProviderOptions
+ [COHERE_COMMAND_TEXT.id]: BedrockProviderOptions
+ [COHERE_COMMAND_LIGHT.id]: BedrockProviderOptions
+ [COHERE_COMMAND_R.id]: BedrockProviderOptions
+ [COHERE_COMMAND_R_PLUS.id]: BedrockProviderOptions
+ [DEEPSEEK_R1.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [DEEPSEEK_V3.id]: BedrockProviderOptions
+ [AI21_JAMBA_LARGE.id]: BedrockProviderOptions
+ [AI21_JAMBA_MINI.id]: BedrockProviderOptions
+ [WRITER_PALMYRA_X4.id]: BedrockProviderOptions
+ [WRITER_PALMYRA_X5.id]: BedrockProviderOptions
+ [TWELVELABS_PEGASUS.id]: BedrockProviderOptions
+ [LUMA_RAY_V2.id]: BedrockProviderOptions
+ [MISTRAL_LARGE_3.id]: BedrockProviderOptions
+ [MINISTRAL_3_3B.id]: BedrockProviderOptions
+ [MINISTRAL_3_8B.id]: BedrockProviderOptions
+ [MINISTRAL_3_14B.id]: BedrockProviderOptions
+ [MAGISTRAL_SMALL.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [VOXTRAL_MINI.id]: BedrockProviderOptions
+ [VOXTRAL_SMALL.id]: BedrockProviderOptions
+ [GEMMA_3_4B.id]: BedrockProviderOptions
+ [GEMMA_3_12B.id]: BedrockProviderOptions
+ [GEMMA_3_27B.id]: BedrockProviderOptions
+ [NVIDIA_NEMOTRON_9B.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [NVIDIA_NEMOTRON_12B_VL.id]: BedrockProviderOptions
+ [MINIMAX_M2.id]: BedrockProviderOptions
+ [MOONSHOT_KIMI_K2.id]: BedrockProviderOptions & BedrockReasoningEffortOptions
+ [OPENAI_SAFEGUARD_20B.id]: BedrockProviderOptions
+ [OPENAI_SAFEGUARD_120B.id]: BedrockProviderOptions
+ [QWEN_3_NEXT_80B.id]: BedrockProviderOptions
+ [QWEN_3_VL_235B.id]: BedrockProviderOptions
+}
+
+export type BedrockModelInputModalitiesByName = {
+ [NOVA_LITE.id]: TextImageDocument
+ [NOVA_MICRO.id]: TextOnly
+ [NOVA_PRO.id]: TextImageDocument
+ [NOVA_PREMIER.id]: TextImageDocument
+ [NOVA_2_LITE.id]: TextImageDocument
+ [NOVA_2_SONIC.id]: TextOnly
+ [CLAUDE_3_HAIKU.id]: TextImageDocument
+ [CLAUDE_3_SONNET.id]: TextImageDocument
+ [CLAUDE_3_OPUS.id]: TextImageDocument
+ [CLAUDE_3_5_HAIKU.id]: TextDocument
+ [CLAUDE_3_5_SONNET.id]: TextImageDocument
+ [CLAUDE_3_5_SONNET_V2.id]: TextImageDocument
+ [CLAUDE_3_7_SONNET.id]: TextImageDocument
+ [CLAUDE_HAIKU_4_5.id]: TextImageDocument
+ [CLAUDE_SONNET_4.id]: TextImageDocument
+ [CLAUDE_SONNET_4_5.id]: TextImageDocument
+ [CLAUDE_OPUS_4.id]: TextImageDocument
+ [CLAUDE_OPUS_4_1.id]: TextImageDocument
+ [CLAUDE_OPUS_4_5.id]: TextImageDocument
+ [LLAMA_3_8B.id]: TextDocument
+ [LLAMA_3_70B.id]: TextDocument
+ [LLAMA_3_1_8B.id]: TextDocument
+ [LLAMA_3_1_70B.id]: TextDocument
+ [LLAMA_3_1_405B.id]: TextDocument
+ [LLAMA_3_2_1B.id]: TextDocument
+ [LLAMA_3_2_3B.id]: TextDocument
+ [LLAMA_3_2_11B.id]: TextImageDocument
+ [LLAMA_3_2_90B.id]: TextImageDocument
+ [LLAMA_3_3_70B.id]: TextDocument
+ [LLAMA_4_SCOUT.id]: TextImageDocument
+ [LLAMA_4_MAVERICK.id]: TextImageDocument
+ [MISTRAL_7B.id]: TextDocument
+ [MIXTRAL_8X7B.id]: TextDocument
+ [MISTRAL_LARGE_2402.id]: TextDocument
+ [MISTRAL_LARGE_2407.id]: TextDocument
+ [MISTRAL_SMALL_2402.id]: TextOnly
+ [PIXTRAL_LARGE.id]: TextImageDocument
+ [TITAN_TEXT_LARGE.id]: TextDocument
+ [TITAN_TEXT_EXPRESS.id]: TextDocument
+ [TITAN_TEXT_LITE.id]: TextDocument
+ [COHERE_COMMAND_TEXT.id]: TextDocument
+ [COHERE_COMMAND_LIGHT.id]: TextOnly
+ [COHERE_COMMAND_R.id]: TextDocument
+ [COHERE_COMMAND_R_PLUS.id]: TextDocument
+ [DEEPSEEK_R1.id]: TextDocument
+ [DEEPSEEK_V3.id]: TextDocument
+ [AI21_JAMBA_LARGE.id]: TextDocument
+ [AI21_JAMBA_MINI.id]: TextDocument
+ [WRITER_PALMYRA_X4.id]: TextDocument
+ [WRITER_PALMYRA_X5.id]: TextDocument
+ [TWELVELABS_PEGASUS.id]: TextOnly
+ [LUMA_RAY_V2.id]: TextOnly
+ [MISTRAL_LARGE_3.id]: TextImageDocument
+ [MINISTRAL_3_3B.id]: TextOnly
+ [MINISTRAL_3_8B.id]: TextOnly
+ [MINISTRAL_3_14B.id]: TextOnly
+ [MAGISTRAL_SMALL.id]: TextImageDocument
+ [VOXTRAL_MINI.id]: TextOnly
+ [VOXTRAL_SMALL.id]: TextOnly
+ [GEMMA_3_4B.id]: TextImage
+ [GEMMA_3_12B.id]: TextImage
+ [GEMMA_3_27B.id]: TextImage
+ [NVIDIA_NEMOTRON_9B.id]: TextOnly
+ [NVIDIA_NEMOTRON_12B_VL.id]: TextImage
+ [MINIMAX_M2.id]: TextOnly
+ [MOONSHOT_KIMI_K2.id]: TextOnly
+ [OPENAI_SAFEGUARD_20B.id]: TextOnly
+ [OPENAI_SAFEGUARD_120B.id]: TextOnly
+ [QWEN_3_NEXT_80B.id]: TextOnly
+ [QWEN_3_VL_235B.id]: TextImage
+}
diff --git a/packages/typescript/ai-bedrock/src/text/text-provider-options.ts b/packages/typescript/ai-bedrock/src/text/text-provider-options.ts
new file mode 100644
index 00000000..db113d1f
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/text/text-provider-options.ts
@@ -0,0 +1,176 @@
+import type {
+ PerformanceConfigLatency,
+ ServiceTierType,
+ ToolChoice,
+} from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+/**
+ * Bedrock provider options interfaces
+ * Split by feature for per-model type-safety
+ *
+ * Note: Common options (maxTokens, temperature, topP) are passed via ChatOptions.options,
+ * not via providerOptions. These interfaces only contain Bedrock-specific options.
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html
+ */
+
+export interface BedrockBaseOptions {
+ /**
+ * Only sample from the top K options for each subsequent token.
+ * Not all models support this parameter.
+ */
+ topK?: number
+ /**
+ * Sequences that will cause the model to stop generating further tokens.
+ */
+ stopSequences?: Array
+}
+
+export interface BedrockAdditionalFieldsOptions {
+ /**
+ * Escape hatch for provider-specific fields not exposed by the Converse API.
+ * Use this to pass model-specific parameters directly.
+ */
+ additionalModelRequestFields?: Record
+}
+
+export interface BedrockPerformanceOptions {
+ /**
+ * Performance configuration for latency optimization.
+ * When set to 'optimized', uses latency-optimized inference for supported models.
+ *
+ * Supported models (as of 2025):
+ * - Amazon Nova Pro
+ * - Anthropic Claude 3.5 Haiku
+ * - Meta Llama 3.1 70B/405B Instruct
+ *
+ * Benefits: Up to 42% faster time-to-first-token (TTFT) and 77% more output tokens/second.
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/latency-optimized-inference.html
+ */
+ performanceConfig?: {
+ latency: PerformanceConfigLatency
+ }
+}
+
+export interface BedrockServiceTierOptions {
+ /**
+ * Service tier configuration for request prioritization.
+ *
+ * - `priority`: For mission-critical apps needing rapid response (25% better latency, premium pricing)
+ * - `default`: Standard tier for everyday AI tasks
+ * - `flex`: Cost-effective for non-time-critical workloads (discounted pricing)
+ * - `reserved`: Predictable performance with guaranteed tokens-per-minute capacity
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers.html
+ */
+ serviceTier?: {
+ type: ServiceTierType
+ }
+}
+
+export interface BedrockRequestMetadataOptions {
+ /**
+ * Metadata as key-value pairs for request tracking and log filtering.
+ * Useful for analytics, debugging, and cost allocation.
+ *
+ * @example
+ * ```typescript
+ * requestMetadata: {
+ * userId: '12345',
+ * sessionId: 'abc-def',
+ * feature: 'chat-assistant'
+ * }
+ * ```
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html
+ */
+ requestMetadata?: Record
+}
+
+export interface BedrockToolChoiceOptions {
+ /**
+ * Controls how the model selects and invokes tools.
+ *
+ * - `auto`: Model autonomously decides whether to call a tool or generate text (default)
+ * - `any`: Model must invoke at least one tool from the provided list
+ * - `tool`: Model must use a specific named tool
+ *
+ * Supported by: Anthropic Claude 3+, Amazon Nova models
+ *
+ * @example
+ * ```typescript
+ * // Let model decide
+ * toolChoice: { auto: {} }
+ *
+ * // Force tool use
+ * toolChoice: { any: {} }
+ *
+ * // Use specific tool
+ * toolChoice: { tool: { name: 'get_weather' } }
+ * ```
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html
+ */
+ toolChoice?: ToolChoice
+}
+
+export interface BedrockAnthropicReasoningOptions {
+ /**
+ * Configuration for Claude's extended thinking capabilities.
+ * Only applicable to Claude reasoning models on Bedrock.
+ *
+ * Note: When thinking is enabled, `temperature`, `topP`, and `topK` cannot be modified.
+ * Streaming is required when `maxTokens` > 21,333.
+ *
+ * @see https://docs.aws.amazon.com/bedrock/latest/userguide/claude-messages-extended-thinking.html
+ * @see https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking
+ */
+ reasoningConfig?: {
+ /**
+ * Whether reasoning is enabled or disabled.
+ */
+ type: 'enabled' | 'disabled'
+ /**
+ * Token budget for reasoning/thinking.
+ * Minimum: 1024, Maximum: 64000
+ */
+ budgetTokens?: number
+ }
+}
+
+export interface BedrockReasoningEffortOptions {
+ /**
+ * Configuration for reasoning effort on non-Anthropic models.
+ * Applicable to Amazon Nova, DeepSeek R1, Mistral Magistral, NVIDIA Nemotron, Moonshot Kimi.
+ */
+ reasoningConfig?: {
+ /**
+ * Whether reasoning is enabled or disabled.
+ */
+ type: 'enabled' | 'disabled'
+ /**
+ * Maximum reasoning effort level.
+ */
+ maxReasoningEffort?: 'low' | 'medium' | 'high'
+ }
+}
+
+export interface BedrockAnthropicOptions {
+ /**
+ * Anthropic-specific beta features.
+ * Only applicable to Claude models on Bedrock.
+ * @see https://docs.anthropic.com/en/api/versioning#beta-features
+ */
+ anthropicBeta?: Array
+}
+
+export type BedrockProviderOptions = BedrockBaseOptions &
+ BedrockAdditionalFieldsOptions &
+ BedrockAnthropicReasoningOptions &
+ BedrockPerformanceOptions &
+ BedrockServiceTierOptions &
+ BedrockRequestMetadataOptions &
+ BedrockToolChoiceOptions
+
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-bash-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-bash-tool.ts
new file mode 100644
index 00000000..7508cbc4
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-bash-tool.ts
@@ -0,0 +1,23 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const BASH_INPUT_SCHEMA = {
+ type: 'object',
+ properties: {
+ command: { type: 'string' },
+ restart: { type: 'boolean' },
+ },
+ required: ['command'],
+} as const
+
+export function convertBashToolToAdapterFormat(tool: AiTool): Tool {
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: BASH_INPUT_SCHEMA as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-code-execution-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-code-execution-tool.ts
new file mode 100644
index 00000000..27fe9a2b
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-code-execution-tool.ts
@@ -0,0 +1,57 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const CODE_EXECUTION_INPUT_SCHEMA_20250522 = {
+ type: 'object',
+ properties: {
+ code: { type: 'string' },
+ },
+ required: ['code'],
+} as const
+
+const CODE_EXECUTION_INPUT_SCHEMA_20250825 = {
+ oneOf: [
+ {
+ type: 'object',
+ properties: {
+ type: { type: 'string', const: 'bash_code_execution' },
+ command: { type: 'string' },
+ },
+ required: ['type', 'command'],
+ },
+ {
+ type: 'object',
+ properties: {
+ type: { type: 'string', const: 'text_editor_code_execution' },
+ command: { type: 'string', enum: ['view', 'create', 'str_replace'] },
+ path: { type: 'string' },
+ file_text: { type: 'string' },
+ old_str: { type: 'string' },
+ new_str: { type: 'string' },
+ },
+ required: ['type', 'command', 'path'],
+ },
+ ],
+} as const
+
+export function convertCodeExecutionToolToAdapterFormat(
+ tool: AiTool,
+): Tool {
+ const metadata = tool.metadata as { type?: string } | undefined
+ const toolType = metadata?.type
+
+ const schema =
+ toolType === 'code_execution_20250825'
+ ? CODE_EXECUTION_INPUT_SCHEMA_20250825
+ : CODE_EXECUTION_INPUT_SCHEMA_20250522
+
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: schema as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-computer-use-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-computer-use-tool.ts
new file mode 100644
index 00000000..e5f870c6
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-computer-use-tool.ts
@@ -0,0 +1,59 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const COMPUTER_USE_INPUT_SCHEMA = {
+ type: 'object',
+ properties: {
+ action: {
+ type: 'string',
+ enum: [
+ 'key',
+ 'hold_key',
+ 'type',
+ 'cursor_position',
+ 'mouse_move',
+ 'left_mouse_down',
+ 'left_mouse_up',
+ 'left_click',
+ 'left_click_drag',
+ 'right_click',
+ 'middle_click',
+ 'double_click',
+ 'triple_click',
+ 'scroll',
+ 'wait',
+ 'screenshot',
+ ],
+ },
+ coordinate: {
+ type: 'array',
+ items: { type: 'integer' },
+ },
+ duration: { type: 'number' },
+ scroll_amount: { type: 'number' },
+ scroll_direction: {
+ type: 'string',
+ enum: ['up', 'down', 'left', 'right'],
+ },
+ start_coordinate: {
+ type: 'array',
+ items: { type: 'integer' },
+ },
+ text: { type: 'string' },
+ },
+ required: ['action'],
+} as const
+
+export function convertComputerUseToolToAdapterFormat(
+ tool: AiTool,
+): Tool {
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: COMPUTER_USE_INPUT_SCHEMA as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-memory-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-memory-tool.ts
new file mode 100644
index 00000000..40bfdb64
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-memory-tool.ts
@@ -0,0 +1,79 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const MEMORY_INPUT_SCHEMA = {
+ oneOf: [
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'view' },
+ path: { type: 'string' },
+ view_range: {
+ type: 'array',
+ items: { type: 'number' },
+ minItems: 2,
+ maxItems: 2,
+ },
+ },
+ required: ['command', 'path'],
+ },
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'create' },
+ path: { type: 'string' },
+ file_text: { type: 'string' },
+ },
+ required: ['command', 'path', 'file_text'],
+ },
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'str_replace' },
+ path: { type: 'string' },
+ old_str: { type: 'string' },
+ new_str: { type: 'string' },
+ },
+ required: ['command', 'path', 'old_str', 'new_str'],
+ },
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'insert' },
+ path: { type: 'string' },
+ insert_line: { type: 'number' },
+ insert_text: { type: 'string' },
+ },
+ required: ['command', 'path', 'insert_line', 'insert_text'],
+ },
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'delete' },
+ path: { type: 'string' },
+ },
+ required: ['command', 'path'],
+ },
+ {
+ type: 'object',
+ properties: {
+ command: { type: 'string', const: 'rename' },
+ old_path: { type: 'string' },
+ new_path: { type: 'string' },
+ },
+ required: ['command', 'old_path', 'new_path'],
+ },
+ ],
+} as const
+
+export function convertMemoryToolToAdapterFormat(tool: AiTool): Tool {
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: MEMORY_INPUT_SCHEMA as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-text-editor-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-text-editor-tool.ts
new file mode 100644
index 00000000..73ef1d16
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-text-editor-tool.ts
@@ -0,0 +1,36 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const TEXT_EDITOR_INPUT_SCHEMA = {
+ type: 'object',
+ properties: {
+ command: {
+ type: 'string',
+ enum: ['view', 'create', 'str_replace', 'insert', 'undo_edit'],
+ },
+ path: { type: 'string' },
+ file_text: { type: 'string' },
+ insert_line: { type: 'integer' },
+ new_str: { type: 'string' },
+ old_str: { type: 'string' },
+ view_range: {
+ type: 'array',
+ items: { type: 'integer' },
+ },
+ },
+ required: ['command', 'path'],
+} as const
+
+export function convertTextEditorToolToAdapterFormat(
+ tool: AiTool,
+): Tool {
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: TEXT_EDITOR_INPUT_SCHEMA as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-web-fetch-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-web-fetch-tool.ts
new file mode 100644
index 00000000..5dc2ab5e
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-web-fetch-tool.ts
@@ -0,0 +1,24 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+const WEB_FETCH_INPUT_SCHEMA = {
+ type: 'object',
+ properties: {
+ url: { type: 'string' },
+ },
+ required: ['url'],
+} as const
+
+export function convertWebFetchToolToAdapterFormat(
+ tool: AiTool,
+): Tool {
+ return {
+ toolSpec: {
+ name: tool.name,
+ inputSchema: {
+ json: WEB_FETCH_INPUT_SCHEMA as unknown as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/anthropic-web-search-tool.ts b/packages/typescript/ai-bedrock/src/tools/anthropic-web-search-tool.ts
new file mode 100644
index 00000000..e13d76c9
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/anthropic-web-search-tool.ts
@@ -0,0 +1,11 @@
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+
+export function convertWebSearchToolToAdapterFormat(
+ _tool: AiTool,
+): Tool {
+ throw new Error(
+ 'The web_search tool is not supported on Amazon Bedrock. ' +
+ 'Please remove this tool from your configuration.',
+ )
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/custom-tool.ts b/packages/typescript/ai-bedrock/src/tools/custom-tool.ts
new file mode 100644
index 00000000..88c15eb5
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/custom-tool.ts
@@ -0,0 +1,18 @@
+import { convertZodToJsonSchema } from '@tanstack/ai'
+import type { Tool as AiTool } from '@tanstack/ai'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { DocumentType } from '@smithy/types'
+
+export function convertCustomToolToAdapterFormat(tool: AiTool): Tool {
+ const jsonSchema = convertZodToJsonSchema(tool.inputSchema)
+
+ return {
+ toolSpec: {
+ name: tool.name,
+ ...(tool.description && { description: tool.description }),
+ inputSchema: {
+ json: (jsonSchema || { type: 'object', properties: {} }) as DocumentType,
+ },
+ },
+ }
+}
diff --git a/packages/typescript/ai-bedrock/src/tools/index.ts b/packages/typescript/ai-bedrock/src/tools/index.ts
new file mode 100644
index 00000000..41f83e85
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/index.ts
@@ -0,0 +1 @@
+export { convertToolsToProviderFormat } from './tool-converter'
diff --git a/packages/typescript/ai-bedrock/src/tools/tool-converter.ts b/packages/typescript/ai-bedrock/src/tools/tool-converter.ts
new file mode 100644
index 00000000..1135f322
--- /dev/null
+++ b/packages/typescript/ai-bedrock/src/tools/tool-converter.ts
@@ -0,0 +1,68 @@
+import { convertBashToolToAdapterFormat } from './anthropic-bash-tool'
+import { convertCodeExecutionToolToAdapterFormat } from './anthropic-code-execution-tool'
+import { convertComputerUseToolToAdapterFormat } from './anthropic-computer-use-tool'
+import { convertMemoryToolToAdapterFormat } from './anthropic-memory-tool'
+import { convertTextEditorToolToAdapterFormat } from './anthropic-text-editor-tool'
+import { convertWebFetchToolToAdapterFormat } from './anthropic-web-fetch-tool'
+import { convertWebSearchToolToAdapterFormat } from './anthropic-web-search-tool'
+import { convertCustomToolToAdapterFormat } from './custom-tool'
+import type { Tool } from '@aws-sdk/client-bedrock-runtime'
+import type { Tool as AiTool } from '@tanstack/ai'
+
+/**
+ * Converts standard Tool format to Bedrock-specific tool format
+ *
+ * @param tools - Array of standard Tool objects
+ * @param modelId - Model ID to determine if Anthropic provider tools are supported.
+ * Supports all Anthropic model ID formats:
+ * - Direct: `anthropic.claude-3-5-sonnet-20241022-v2:0`
+ * - US inference profile: `us.anthropic.claude-3-5-sonnet-20241022-v2:0`
+ * - EU inference profile: `eu.anthropic.claude-3-5-sonnet-20241022-v2:0`
+ * @returns Array of Bedrock tool specifications
+ *
+ * @example
+ * ```typescript
+ * const tools: Tool[] = [{
+ * name: "get_weather",
+ * description: "Get weather for a location",
+ * inputSchema: z.object({
+ * location: z.string()
+ * })
+ * }];
+ *
+ * const bedrockTools = convertToolsToProviderFormat(tools, 'us.anthropic.claude-3-5-sonnet-20241022-v2:0');
+ * ```
+ */
+export function convertToolsToProviderFormat(
+ tools: Array,
+ modelId: string,
+): Array {
+ const isAnthropic = modelId.includes('anthropic.')
+
+ return tools.map((tool) => {
+ const name = tool.name
+
+ if (isAnthropic) {
+ switch (name) {
+ case 'bash':
+ return convertBashToolToAdapterFormat(tool)
+ case 'code_execution':
+ return convertCodeExecutionToolToAdapterFormat(tool)
+ case 'computer':
+ return convertComputerUseToolToAdapterFormat(tool)
+ case 'memory':
+ return convertMemoryToolToAdapterFormat(tool)
+ case 'str_replace_editor':
+ return convertTextEditorToolToAdapterFormat(tool)
+ case 'web_fetch':
+ return convertWebFetchToolToAdapterFormat(tool)
+ case 'web_search':
+ return convertWebSearchToolToAdapterFormat(tool)
+ default:
+ return convertCustomToolToAdapterFormat(tool)
+ }
+ }
+
+ return convertCustomToolToAdapterFormat(tool)
+ })
+}
diff --git a/packages/typescript/ai-bedrock/tsconfig.json b/packages/typescript/ai-bedrock/tsconfig.json
new file mode 100644
index 00000000..ea11c109
--- /dev/null
+++ b/packages/typescript/ai-bedrock/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "src"
+ },
+ "include": ["src/**/*.ts", "src/**/*.tsx"],
+ "exclude": ["node_modules", "dist", "**/*.config.ts"]
+}
diff --git a/packages/typescript/ai-bedrock/vite.config.ts b/packages/typescript/ai-bedrock/vite.config.ts
new file mode 100644
index 00000000..77bcc2e6
--- /dev/null
+++ b/packages/typescript/ai-bedrock/vite.config.ts
@@ -0,0 +1,36 @@
+import { defineConfig, mergeConfig } from 'vitest/config'
+import { tanstackViteConfig } from '@tanstack/vite-config'
+import packageJson from './package.json'
+
+const config = defineConfig({
+ test: {
+ name: packageJson.name,
+ dir: './',
+ watch: false,
+ globals: true,
+ environment: 'node',
+ include: ['tests/**/*.test.ts'],
+ coverage: {
+ provider: 'v8',
+ reporter: ['text', 'json', 'html', 'lcov'],
+ exclude: [
+ 'node_modules/',
+ 'dist/',
+ 'tests/',
+ '**/*.test.ts',
+ '**/*.config.ts',
+ '**/types.ts',
+ ],
+ include: ['src/**/*.ts'],
+ },
+ },
+})
+
+export default mergeConfig(
+ config,
+ tanstackViteConfig({
+ entry: ['./src/index.ts'],
+ srcDir: './src',
+ cjs: false,
+ }),
+)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c0c4a417..bcf476d5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -195,6 +195,9 @@ importers:
'@tanstack/ai-anthropic':
specifier: workspace:*
version: link:../../packages/typescript/ai-anthropic
+ '@tanstack/ai-bedrock':
+ specifier: workspace:*
+ version: link:../../packages/typescript/ai-bedrock
'@tanstack/ai-client':
specifier: workspace:*
version: link:../../packages/typescript/ai-client
@@ -215,7 +218,7 @@ importers:
version: link:../../packages/typescript/ai-react-ui
'@tanstack/nitro-v2-vite-plugin':
specifier: ^1.139.0
- version: 1.139.0(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 1.139.0(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
'@tanstack/react-devtools':
specifier: ^0.8.2
version: 0.8.2(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(csstype@3.2.3)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(solid-js@1.9.10)
@@ -351,7 +354,7 @@ importers:
version: link:../../packages/typescript/ai-solid-ui
'@tanstack/nitro-v2-vite-plugin':
specifier: ^1.139.0
- version: 1.139.0(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 1.139.0(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
'@tanstack/router-plugin':
specifier: ^1.139.7
version: 1.139.10(@tanstack/react-router@1.139.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(vite-plugin-solid@2.11.10(@testing-library/jest-dom@6.9.1)(solid-js@1.9.10)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)))(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
@@ -556,6 +559,34 @@ importers:
specifier: ^4.1.13
version: 4.1.13
+ packages/typescript/ai-bedrock:
+ dependencies:
+ '@smithy/eventstream-codec':
+ specifier: ^4.2.5
+ version: 4.2.5
+ '@smithy/util-utf8':
+ specifier: ^4.2.0
+ version: 4.2.0
+ '@tanstack/ai':
+ specifier: workspace:*
+ version: link:../ai
+ aws4fetch:
+ specifier: ^1.0.20
+ version: 1.0.20
+ devDependencies:
+ '@aws-sdk/client-bedrock':
+ specifier: ^3.947.0
+ version: 3.947.0
+ '@aws-sdk/client-bedrock-runtime':
+ specifier: ^3.947.0
+ version: 3.947.0
+ '@vitest/coverage-v8':
+ specifier: 4.0.14
+ version: 4.0.14(vitest@4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@27.2.0(postcss@8.5.6))(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ vite:
+ specifier: ^7.2.4
+ version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
+
packages/typescript/ai-client:
dependencies:
'@tanstack/ai':
@@ -953,7 +984,7 @@ importers:
version: link:../../ai-react
'@tanstack/nitro-v2-vite-plugin':
specifier: ^1.139.0
- version: 1.139.0(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
+ version: 1.139.0(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))
'@tanstack/react-router':
specifier: ^1.139.7
version: 1.139.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@@ -1051,6 +1082,147 @@ packages:
'@asamuzakjp/nwsapi@2.3.9':
resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
+ '@aws-crypto/crc32@5.2.0':
+ resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
+
+ '@aws-crypto/sha256-js@5.2.0':
+ resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
+
+ '@aws-crypto/util@5.2.0':
+ resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
+
+ '@aws-sdk/client-bedrock-runtime@3.947.0':
+ resolution: {integrity: sha512-gYHkLDyHZN8eWDOvbMZOoBYUznq0N1yMzhZGLKqiekyWqDWA+PI08JjbPHX/ajpddkYM807SvRfD6unS59eVFg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/client-bedrock@3.947.0':
+ resolution: {integrity: sha512-BJ9K3v16zUh/0EcqBFWSbzd4Sf3To+eFx0hvaQQhd/U/2fixlDU84ORkVUJ9rV7MLdstBxVwsZm9V9Z2qls4pA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/client-sso@3.947.0':
+ resolution: {integrity: sha512-sDwcO8SP290WSErY1S8pz8hTafeghKmmWjNVks86jDK30wx62CfazOTeU70IpWgrUBEygyXk/zPogHsUMbW2Rg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/core@3.947.0':
+ resolution: {integrity: sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.947.0':
+ resolution: {integrity: sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.947.0':
+ resolution: {integrity: sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.947.0':
+ resolution: {integrity: sha512-A2ZUgJUJZERjSzvCi2NR/hBVbVkTXPD0SdKcR/aITb30XwF+n3T963b+pJl90qhOspoy7h0IVYNR7u5Nr9tJdQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-login@3.947.0':
+ resolution: {integrity: sha512-u7M3hazcB7aJiVwosNdJRbIJDzbwQ861NTtl6S0HmvWpixaVb7iyhJZWg8/plyUznboZGBm7JVEdxtxv3u0bTA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-node@3.947.0':
+ resolution: {integrity: sha512-S0Zqebr71KyrT6J4uYPhwV65g4V5uDPHnd7dt2W34FcyPu+hVC7Hx4MFmsPyVLeT5cMCkkZvmY3kAoEzgUPJJg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.947.0':
+ resolution: {integrity: sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.947.0':
+ resolution: {integrity: sha512-NktnVHTGaUMaozxycYrepvb3yfFquHTQ53lt6hBEVjYBzK3C4tVz0siUpr+5RMGLSiZ5bLBp2UjJPgwx4i4waQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.947.0':
+ resolution: {integrity: sha512-gokm/e/YHiHLrZgLq4j8tNAn8RJDPbIcglFRKgy08q8DmAqHQ8MXAKW3eS0QjAuRXU9mcMmUo1NrX6FRNBCCPw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/eventstream-handler-node@3.936.0':
+ resolution: {integrity: sha512-4zIbhdRmol2KosIHmU31ATvNP0tkJhDlRj9GuawVJoEnMvJA1pd2U3SRdiOImJU3j8pT46VeS4YMmYxfjGHByg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-eventstream@3.936.0':
+ resolution: {integrity: sha512-XQSH8gzLkk8CDUDxyt4Rdm9owTpRIPdtg2yw9Y2Wl5iSI55YQSiC3x8nM3c4Y4WqReJprunFPK225ZUDoYCfZA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-host-header@3.936.0':
+ resolution: {integrity: sha512-tAaObaAnsP1XnLGndfkGWFuzrJYuk9W0b/nLvol66t8FZExIAf/WdkT2NNAWOYxljVs++oHnyHBCxIlaHrzSiw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-logger@3.936.0':
+ resolution: {integrity: sha512-aPSJ12d3a3Ea5nyEnLbijCaaYJT2QjQ9iW+zGh5QcZYXmOGWbKVyPSxmVOboZQG+c1M8t6d2O7tqrwzIq8L8qw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-recursion-detection@3.936.0':
+ resolution: {integrity: sha512-l4aGbHpXM45YNgXggIux1HgsCVAvvBoqHPkqLnqMl9QVapfuSTjJHfDYDsx1Xxct6/m7qSMUzanBALhiaGO2fA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-user-agent@3.947.0':
+ resolution: {integrity: sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/middleware-websocket@3.936.0':
+ resolution: {integrity: sha512-bPe3rqeugyj/MmjP0yBSZox2v1Wa8Dv39KN+RxVbQroLO8VUitBo6xyZ0oZebhZ5sASwSg58aDcMlX0uFLQnTA==}
+ engines: {node: '>= 14.0.0'}
+
+ '@aws-sdk/nested-clients@3.947.0':
+ resolution: {integrity: sha512-DjRJEYNnHUTu9kGPPQDTSXquwSEd6myKR4ssI4FaYLFhdT3ldWpj73yYt807H3tdmhS7vPmdVqchSJnjurUQAw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/region-config-resolver@3.936.0':
+ resolution: {integrity: sha512-wOKhzzWsshXGduxO4pqSiNyL9oUtk4BEvjWm9aaq6Hmfdoydq6v6t0rAGHWPjFwy9z2haovGRi3C8IxdMB4muw==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/token-providers@3.947.0':
+ resolution: {integrity: sha512-X/DyB8GuK44rsE89Tn5+s542B3PhGbXQSgV8lvqHDzvicwCt0tWny6790st6CPETrVVV2K3oJMfG5U3/jAmaZA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/types@3.936.0':
+ resolution: {integrity: sha512-uz0/VlMd2pP5MepdrHizd+T+OKfyK4r3OA9JI+L/lPKg0YFQosdJNCKisr6o70E3dh8iMpFYxF1UN/4uZsyARg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-endpoints@3.936.0':
+ resolution: {integrity: sha512-0Zx3Ntdpu+z9Wlm7JKUBOzS9EunwKAb4KdGUQQxDqh5Lc3ta5uBoub+FgmVuzwnmBu9U1Os8UuwVTH0Lgu+P5w==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-format-url@3.936.0':
+ resolution: {integrity: sha512-MS5eSEtDUFIAMHrJaMERiHAvDPdfxc/T869ZjDNFAIiZhyc037REw0aoTNeimNXDNy2txRNZJaAUn/kE4RwN+g==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-locate-window@3.893.0':
+ resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws-sdk/util-user-agent-browser@3.936.0':
+ resolution: {integrity: sha512-eZ/XF6NxMtu+iCma58GRNRxSq4lHo6zHQLOZRIeL/ghqYJirqHdenMOwrzPettj60KWlv827RVebP9oNVrwZbw==}
+
+ '@aws-sdk/util-user-agent-node@3.947.0':
+ resolution: {integrity: sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
+ '@aws-sdk/xml-builder@3.930.0':
+ resolution: {integrity: sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==}
+ engines: {node: '>=18.0.0'}
+
+ '@aws/lambda-invoke-store@0.2.2':
+ resolution: {integrity: sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==}
+ engines: {node: '>=18.0.0'}
+
'@babel/code-frame@7.26.2':
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
engines: {node: '>=6.9.0'}
@@ -2247,6 +2419,198 @@ packages:
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
+ '@smithy/abort-controller@4.2.5':
+ resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/config-resolver@4.4.3':
+ resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/core@3.18.7':
+ resolution: {integrity: sha512-axG9MvKhMWOhFbvf5y2DuyTxQueO0dkedY9QC3mAfndLosRI/9LJv8WaL0mw7ubNhsO4IuXX9/9dYGPFvHrqlw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/credential-provider-imds@4.2.5':
+ resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-codec@4.2.5':
+ resolution: {integrity: sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-browser@4.2.5':
+ resolution: {integrity: sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-config-resolver@4.3.5':
+ resolution: {integrity: sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-node@4.2.5':
+ resolution: {integrity: sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-universal@4.2.5':
+ resolution: {integrity: sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/fetch-http-handler@5.3.6':
+ resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-node@4.2.5':
+ resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/invalid-dependency@4.2.5':
+ resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/is-array-buffer@2.2.0':
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/is-array-buffer@4.2.0':
+ resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-content-length@4.2.5':
+ resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-endpoint@4.3.14':
+ resolution: {integrity: sha512-v0q4uTKgBM8dsqGjqsabZQyH85nFaTnFcgpWU1uydKFsdyyMzfvOkNum9G7VK+dOP01vUnoZxIeRiJ6uD0kjIg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-retry@4.4.14':
+ resolution: {integrity: sha512-Z2DG8Ej7FyWG1UA+7HceINtSLzswUgs2np3sZX0YBBxCt+CXG4QUxv88ZDS3+2/1ldW7LqtSY1UO/6VQ1pND8Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-serde@4.2.6':
+ resolution: {integrity: sha512-VkLoE/z7e2g8pirwisLz8XJWedUSY8my/qrp81VmAdyrhi94T+riBfwP+AOEEFR9rFTSonC/5D2eWNmFabHyGQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-stack@4.2.5':
+ resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-config-provider@4.3.5':
+ resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-http-handler@4.4.5':
+ resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/property-provider@4.2.5':
+ resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/protocol-http@5.3.5':
+ resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-builder@4.2.5':
+ resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-parser@4.2.5':
+ resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/service-error-classification@4.2.5':
+ resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/shared-ini-file-loader@4.4.0':
+ resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/signature-v4@5.3.5':
+ resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/smithy-client@4.9.10':
+ resolution: {integrity: sha512-Jaoz4Jw1QYHc1EFww/E6gVtNjhoDU+gwRKqXP6C3LKYqqH2UQhP8tMP3+t/ePrhaze7fhLE8vS2q6vVxBANFTQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/types@4.9.0':
+ resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/url-parser@4.2.5':
+ resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-base64@4.3.0':
+ resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-browser@4.2.0':
+ resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-node@4.2.1':
+ resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-buffer-from@2.2.0':
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-buffer-from@4.2.0':
+ resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-config-provider@4.2.0':
+ resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-browser@4.3.13':
+ resolution: {integrity: sha512-hlVLdAGrVfyNei+pKIgqDTxfu/ZI2NSyqj4IDxKd5bIsIqwR/dSlkxlPaYxFiIaDVrBy0he8orsFy+Cz119XvA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-node@4.2.16':
+ resolution: {integrity: sha512-F1t22IUiJLHrxW9W1CQ6B9PN+skZ9cqSuzB18Eh06HrJPbjsyZ7ZHecAKw80DQtyGTRcVfeukKaCRYebFwclbg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-endpoints@3.2.5':
+ resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-hex-encoding@4.2.0':
+ resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-middleware@4.2.5':
+ resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-retry@4.2.5':
+ resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-stream@4.5.6':
+ resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-uri-escape@4.2.0':
+ resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-utf8@2.3.0':
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-utf8@4.2.0':
+ resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/uuid@1.1.0':
+ resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==}
+ engines: {node: '>=18.0.0'}
+
'@solid-devtools/debugger@0.28.1':
resolution: {integrity: sha512-6qIUI6VYkXoRnL8oF5bvh2KgH71qlJ18hNw/mwSyY6v48eb80ZR48/5PDXufUa3q+MBSuYa1uqTMwLewpay9eg==}
peerDependencies:
@@ -3404,6 +3768,9 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ aws4fetch@1.0.20:
+ resolution: {integrity: sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g==}
+
axios@1.13.2:
resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
@@ -3487,6 +3854,9 @@ packages:
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ bowser@2.13.1:
+ resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -4214,6 +4584,10 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-xml-parser@5.2.5:
+ resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
+ hasBin: true
+
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
@@ -6231,6 +6605,9 @@ packages:
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+ strnum@2.1.1:
+ resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
+
style-to-js@1.1.18:
resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==}
@@ -7012,6 +7389,466 @@ snapshots:
'@asamuzakjp/nwsapi@2.3.9': {}
+ '@aws-crypto/crc32@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.936.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ dependencies:
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-locate-window': 3.893.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-js@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.936.0
+ tslib: 2.8.1
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-crypto/util@5.2.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-sdk/client-bedrock-runtime@3.947.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/credential-provider-node': 3.947.0
+ '@aws-sdk/eventstream-handler-node': 3.936.0
+ '@aws-sdk/middleware-eventstream': 3.936.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/middleware-websocket': 3.936.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/token-providers': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/eventstream-serde-browser': 4.2.5
+ '@smithy/eventstream-serde-config-resolver': 4.3.5
+ '@smithy/eventstream-serde-node': 4.2.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-stream': 4.5.6
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-bedrock@3.947.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/credential-provider-node': 3.947.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/token-providers': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/client-sso@3.947.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/core@3.947.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/xml-builder': 3.930.0
+ '@smithy/core': 3.18.7
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-env@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-stream': 4.5.6
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-ini@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/credential-provider-env': 3.947.0
+ '@aws-sdk/credential-provider-http': 3.947.0
+ '@aws-sdk/credential-provider-login': 3.947.0
+ '@aws-sdk/credential-provider-process': 3.947.0
+ '@aws-sdk/credential-provider-sso': 3.947.0
+ '@aws-sdk/credential-provider-web-identity': 3.947.0
+ '@aws-sdk/nested-clients': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-login@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-node@3.947.0':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.947.0
+ '@aws-sdk/credential-provider-http': 3.947.0
+ '@aws-sdk/credential-provider-ini': 3.947.0
+ '@aws-sdk/credential-provider-process': 3.947.0
+ '@aws-sdk/credential-provider-sso': 3.947.0
+ '@aws-sdk/credential-provider-web-identity': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-process@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.947.0':
+ dependencies:
+ '@aws-sdk/client-sso': 3.947.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/token-providers': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-web-identity@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/eventstream-handler-node@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/eventstream-codec': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-eventstream@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-host-header@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-logger@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-recursion-detection@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@aws/lambda-invoke-store': 0.2.2
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-user-agent@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@smithy/core': 3.18.7
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-websocket@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-format-url': 3.936.0
+ '@smithy/eventstream-codec': 4.2.5
+ '@smithy/eventstream-serde-browser': 4.2.5
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/signature-v4': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-hex-encoding': 4.2.0
+ tslib: 2.8.1
+
+ '@aws-sdk/nested-clients@3.947.0':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/middleware-host-header': 3.936.0
+ '@aws-sdk/middleware-logger': 3.936.0
+ '@aws-sdk/middleware-recursion-detection': 3.936.0
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/region-config-resolver': 3.936.0
+ '@aws-sdk/types': 3.936.0
+ '@aws-sdk/util-endpoints': 3.936.0
+ '@aws-sdk/util-user-agent-browser': 3.936.0
+ '@aws-sdk/util-user-agent-node': 3.947.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/core': 3.18.7
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/hash-node': 4.2.5
+ '@smithy/invalid-dependency': 4.2.5
+ '@smithy/middleware-content-length': 4.2.5
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-retry': 4.4.14
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-body-length-node': 4.2.1
+ '@smithy/util-defaults-mode-browser': 4.3.13
+ '@smithy/util-defaults-mode-node': 4.2.16
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/region-config-resolver@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/token-providers@3.947.0':
+ dependencies:
+ '@aws-sdk/core': 3.947.0
+ '@aws-sdk/nested-clients': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/types@3.936.0':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/util-endpoints@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-endpoints': 3.2.5
+ tslib: 2.8.1
+
+ '@aws-sdk/util-format-url@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/querystring-builder': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/util-locate-window@3.893.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-browser@3.936.0':
+ dependencies:
+ '@aws-sdk/types': 3.936.0
+ '@smithy/types': 4.9.0
+ bowser: 2.13.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-node@3.947.0':
+ dependencies:
+ '@aws-sdk/middleware-user-agent': 3.947.0
+ '@aws-sdk/types': 3.936.0
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@aws-sdk/xml-builder@3.930.0':
+ dependencies:
+ '@smithy/types': 4.9.0
+ fast-xml-parser: 5.2.5
+ tslib: 2.8.1
+
+ '@aws/lambda-invoke-store@0.2.2': {}
+
'@babel/code-frame@7.26.2':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
@@ -8172,6 +9009,310 @@ snapshots:
'@sindresorhus/merge-streams@4.0.0': {}
+ '@smithy/abort-controller@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/config-resolver@4.4.3':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-config-provider': 4.2.0
+ '@smithy/util-endpoints': 3.2.5
+ '@smithy/util-middleware': 4.2.5
+ tslib: 2.8.1
+
+ '@smithy/core@3.18.7':
+ dependencies:
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-body-length-browser': 4.2.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-stream': 4.5.6
+ '@smithy/util-utf8': 4.2.0
+ '@smithy/uuid': 1.1.0
+ tslib: 2.8.1
+
+ '@smithy/credential-provider-imds@4.2.5':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ tslib: 2.8.1
+
+ '@smithy/eventstream-codec@4.2.5':
+ dependencies:
+ '@aws-crypto/crc32': 5.2.0
+ '@smithy/types': 4.9.0
+ '@smithy/util-hex-encoding': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-browser@4.2.5':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-config-resolver@4.3.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-node@4.2.5':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-universal@4.2.5':
+ dependencies:
+ '@smithy/eventstream-codec': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/fetch-http-handler@5.3.6':
+ dependencies:
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/querystring-builder': 4.2.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-base64': 4.3.0
+ tslib: 2.8.1
+
+ '@smithy/hash-node@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/invalid-dependency@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@2.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/middleware-content-length@4.2.5':
+ dependencies:
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-endpoint@4.3.14':
+ dependencies:
+ '@smithy/core': 3.18.7
+ '@smithy/middleware-serde': 4.2.6
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ '@smithy/url-parser': 4.2.5
+ '@smithy/util-middleware': 4.2.5
+ tslib: 2.8.1
+
+ '@smithy/middleware-retry@4.4.14':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/service-error-classification': 4.2.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-retry': 4.2.5
+ '@smithy/uuid': 1.1.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-serde@4.2.6':
+ dependencies:
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-stack@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/node-config-provider@4.3.5':
+ dependencies:
+ '@smithy/property-provider': 4.2.5
+ '@smithy/shared-ini-file-loader': 4.4.0
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/node-http-handler@4.4.5':
+ dependencies:
+ '@smithy/abort-controller': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/querystring-builder': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/property-provider@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/protocol-http@5.3.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/querystring-builder@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ '@smithy/util-uri-escape': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/querystring-parser@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/service-error-classification@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+
+ '@smithy/shared-ini-file-loader@4.4.0':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/signature-v4@5.3.5':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.0
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-middleware': 4.2.5
+ '@smithy/util-uri-escape': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/smithy-client@4.9.10':
+ dependencies:
+ '@smithy/core': 3.18.7
+ '@smithy/middleware-endpoint': 4.3.14
+ '@smithy/middleware-stack': 4.2.5
+ '@smithy/protocol-http': 5.3.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-stream': 4.5.6
+ tslib: 2.8.1
+
+ '@smithy/types@4.9.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/url-parser@4.2.5':
+ dependencies:
+ '@smithy/querystring-parser': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-base64@4.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-browser@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-node@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@2.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@4.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-config-provider@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-browser@4.3.13':
+ dependencies:
+ '@smithy/property-provider': 4.2.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-node@4.2.16':
+ dependencies:
+ '@smithy/config-resolver': 4.4.3
+ '@smithy/credential-provider-imds': 4.2.5
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/property-provider': 4.2.5
+ '@smithy/smithy-client': 4.9.10
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-endpoints@3.2.5':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-hex-encoding@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-middleware@4.2.5':
+ dependencies:
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-retry@4.2.5':
+ dependencies:
+ '@smithy/service-error-classification': 4.2.5
+ '@smithy/types': 4.9.0
+ tslib: 2.8.1
+
+ '@smithy/util-stream@4.5.6':
+ dependencies:
+ '@smithy/fetch-http-handler': 5.3.6
+ '@smithy/node-http-handler': 4.4.5
+ '@smithy/types': 4.9.0
+ '@smithy/util-base64': 4.3.0
+ '@smithy/util-buffer-from': 4.2.0
+ '@smithy/util-hex-encoding': 4.2.0
+ '@smithy/util-utf8': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-uri-escape@4.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@2.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@4.2.0':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.0
+ tslib: 2.8.1
+
+ '@smithy/uuid@1.1.0':
+ dependencies:
+ tslib: 2.8.1
+
'@solid-devtools/debugger@0.28.1(solid-js@1.9.10)':
dependencies:
'@nothing-but/utils': 0.17.0
@@ -8471,9 +9612,9 @@ snapshots:
'@tanstack/history@1.139.0': {}
- '@tanstack/nitro-v2-vite-plugin@1.139.0(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
+ '@tanstack/nitro-v2-vite-plugin@1.139.0(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))':
dependencies:
- nitropack: 2.12.9(rolldown@1.0.0-beta.53)
+ nitropack: 2.12.9(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53)
pathe: 2.0.3
vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)
transitivePeerDependencies:
@@ -9760,6 +10901,8 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
+ aws4fetch@1.0.20: {}
+
axios@1.13.2:
dependencies:
follow-redirects: 1.15.11
@@ -9847,6 +10990,8 @@ snapshots:
boolbase@1.0.0: {}
+ bowser@2.13.1: {}
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -10591,6 +11736,10 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-xml-parser@5.2.5:
+ dependencies:
+ strnum: 2.1.1
+
fastq@1.19.1:
dependencies:
reusify: 1.1.0
@@ -11979,7 +13128,7 @@ snapshots:
negotiator@1.0.0: {}
- nitropack@2.12.9(rolldown@1.0.0-beta.53):
+ nitropack@2.12.9(aws4fetch@1.0.20)(rolldown@1.0.0-beta.53):
dependencies:
'@cloudflare/kv-asset-handler': 0.4.0
'@rollup/plugin-alias': 5.1.1(rollup@4.53.3)
@@ -12046,7 +13195,7 @@ snapshots:
unenv: 2.0.0-rc.24
unimport: 5.5.0
unplugin-utils: 0.3.1
- unstorage: 1.17.2(db0@0.3.4)(ioredis@5.8.2)
+ unstorage: 1.17.2(aws4fetch@1.0.20)(db0@0.3.4)(ioredis@5.8.2)
untyped: 2.0.0
unwasm: 0.3.11
youch: 4.1.0-beta.11
@@ -13047,6 +14196,8 @@ snapshots:
dependencies:
js-tokens: 9.0.1
+ strnum@2.1.1: {}
+
style-to-js@1.1.18:
dependencies:
style-to-object: 1.0.11
@@ -13436,7 +14587,7 @@ snapshots:
'@oxc-project/runtime': 0.101.0
rolldown: 1.0.0-beta.53
- unstorage@1.17.2(db0@0.3.4)(ioredis@5.8.2):
+ unstorage@1.17.2(aws4fetch@1.0.20)(db0@0.3.4)(ioredis@5.8.2):
dependencies:
anymatch: 3.1.3
chokidar: 4.0.3
@@ -13447,6 +14598,7 @@ snapshots:
ofetch: 1.5.0
ufo: 1.6.1
optionalDependencies:
+ aws4fetch: 1.0.20
db0: 0.3.4
ioredis: 5.8.2