From 883266939ea1cb984ca9f51b53eefa76668b15ad Mon Sep 17 00:00:00 2001 From: Parham Saidi <parham@parha.me> Date: Mon, 3 Jun 2024 18:07:17 +0200 Subject: [PATCH] feat: Bedrock support added, only for Anthropic models (#847) Co-authored-by: Alex Yang <himself65@outlook.com> --- .changeset/neat-flowers-ring.md | 6 + .../modules/llms/available_llms/bedrock.md | 61 + packages/community/.cjs.swcrc | 12 + packages/community/.swcrc | 8 + packages/community/CHANGELOG.md | 0 packages/community/jsr.json | 8 + packages/community/package.json | 59 + packages/community/src/index.ts | 1 + packages/community/src/llm/bedrock/base.ts | 352 ++++++ packages/community/src/llm/bedrock/types.ts | 109 ++ packages/community/src/llm/bedrock/utils.ts | 144 +++ packages/community/tsconfig.json | 19 + packages/core/src/llm/index.ts | 2 + pnpm-lock.yaml | 1012 +++++++++++++++++ 14 files changed, 1793 insertions(+) create mode 100644 .changeset/neat-flowers-ring.md create mode 100644 apps/docs/docs/modules/llms/available_llms/bedrock.md create mode 100644 packages/community/.cjs.swcrc create mode 100644 packages/community/.swcrc create mode 100644 packages/community/CHANGELOG.md create mode 100644 packages/community/jsr.json create mode 100644 packages/community/package.json create mode 100644 packages/community/src/index.ts create mode 100644 packages/community/src/llm/bedrock/base.ts create mode 100644 packages/community/src/llm/bedrock/types.ts create mode 100644 packages/community/src/llm/bedrock/utils.ts create mode 100644 packages/community/tsconfig.json diff --git a/.changeset/neat-flowers-ring.md b/.changeset/neat-flowers-ring.md new file mode 100644 index 000000000..8424e089a --- /dev/null +++ b/.changeset/neat-flowers-ring.md @@ -0,0 +1,6 @@ +--- +"docs": patch +"@llamaindex/community": patch +--- + +Community bedrock support added diff --git a/apps/docs/docs/modules/llms/available_llms/bedrock.md b/apps/docs/docs/modules/llms/available_llms/bedrock.md new file mode 100644 index 000000000..b3e3301f8 --- /dev/null +++ b/apps/docs/docs/modules/llms/available_llms/bedrock.md @@ -0,0 +1,61 @@ +# Bedrock + +## Usage + +```ts +import { BEDROCK_MODELS, Bedrock } from "@llamaindex/community"; + +Settings.llm = new Bedrock({ + model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU, + region: "us-east-1", // can be provided via env AWS_REGION + credentials: { + accessKeyId: "...", // optional and can be provided via env AWS_ACCESS_KEY_ID + secretAccessKey: "...", // optional and can be provided via env AWS_SECRET_ACCESS_KEY + }, +}); +``` + +Currently only supports Anthropic models: + +```ts +ANTHROPIC_CLAUDE_INSTANT_1 = "anthropic.claude-instant-v1"; +ANTHROPIC_CLAUDE_2 = "anthropic.claude-v2"; +ANTHROPIC_CLAUDE_2_1 = "anthropic.claude-v2:1"; +ANTHROPIC_CLAUDE_3_SONNET = "anthropic.claude-3-sonnet-20240229-v1:0"; +ANTHROPIC_CLAUDE_3_HAIKU = "anthropic.claude-3-haiku-20240307-v1:0"; +ANTHROPIC_CLAUDE_3_OPUS = "anthropic.claude-3-opus-20240229-v1:0"; // Not currently on Bedrock +``` + +Sonnet, Haiku and Opus are multimodal, image_url only supports base64 data url format, e.g. `data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==` + +## Full Example + +```ts +import { BEDROCK_MODELS, Bedrock } from "llamaindex"; + +Settings.llm = new Bedrock({ + model: BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU, +}); + +async function main() { + const document = new Document({ text: essay, id_: "essay" }); + + // Load and index documents + const index = await VectorStoreIndex.fromDocuments([document]); + + // Create a query engine + const queryEngine = index.asQueryEngine({ + retriever, + }); + + const query = "What is the meaning of life?"; + + // Query + const response = await queryEngine.query({ + query, + }); + + // Log the response + console.log(response.response); +} +``` diff --git a/packages/community/.cjs.swcrc b/packages/community/.cjs.swcrc new file mode 100644 index 000000000..4329f4656 --- /dev/null +++ b/packages/community/.cjs.swcrc @@ -0,0 +1,12 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + }, + "module": { + "type": "commonjs", + "ignoreDynamic": true + } +} diff --git a/packages/community/.swcrc b/packages/community/.swcrc new file mode 100644 index 000000000..60e144e72 --- /dev/null +++ b/packages/community/.swcrc @@ -0,0 +1,8 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript" + }, + "target": "esnext" + } +} diff --git a/packages/community/CHANGELOG.md b/packages/community/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/community/jsr.json b/packages/community/jsr.json new file mode 100644 index 000000000..01749a160 --- /dev/null +++ b/packages/community/jsr.json @@ -0,0 +1,8 @@ +{ + "name": "@llamaindex/community", + "version": "0.0.5", + "exports": { + ".": "./src/index.ts", + "./type": "./src/type.ts" + } +} diff --git a/packages/community/package.json b/packages/community/package.json new file mode 100644 index 000000000..dae16f21e --- /dev/null +++ b/packages/community/package.json @@ -0,0 +1,59 @@ +{ + "name": "@llamaindex/community", + "description": "Community package for LlamaIndexTS", + "version": "0.0.1", + "type": "module", + "types": "dist/type/index.d.ts", + "main": "dist/cjs/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/type/index.d.ts", + "default": "./dist/index.js" + }, + "require": { + "types": "./dist/type/index.d.ts", + "default": "./dist/cjs/index.js" + } + }, + "./*": { + "import": { + "types": "./dist/type/*.d.ts", + "default": "./dist/*.js" + }, + "require": { + "types": "./dist/type/*.d.ts", + "default": "./dist/cjs/*.js" + } + } + }, + "files": [ + "dist", + "CHANGELOG.md" + ], + "repository": { + "type": "git", + "url": "https://github.com/run-llama/LlamaIndexTS.git", + "directory": "packages/community" + }, + "scripts": { + "lint": "eslint .", + "build": "rm -rf ./dist && pnpm run build:esm && pnpm run build:cjs && pnpm run build:type", + "build:esm": "swc src -d dist --strip-leading-paths --config-file ../../.swcrc", + "build:cjs": "swc src -d dist/cjs --strip-leading-paths --config-file ../../.cjs.swcrc", + "build:type": "tsc -p tsconfig.json", + "postbuild": "node -e \"require('fs').writeFileSync('./dist/cjs/package.json', JSON.stringify({ type: 'commonjs' }))\"", + "dev": "concurrently \"pnpm run build:esm --watch\" \"pnpm run build:cjs --watch\" \"pnpm run build:type --watch\"" + }, + "devDependencies": { + "@swc/cli": "^0.3.12", + "@swc/core": "^1.5.5", + "concurrently": "^8.2.2", + "pathe": "^1.1.2" + }, + "dependencies": { + "@aws-sdk/client-bedrock-runtime": "^3.582.0", + "@types/node": "^20.12.11", + "llamaindex": "workspace:*" + } +} diff --git a/packages/community/src/index.ts b/packages/community/src/index.ts new file mode 100644 index 000000000..457f7602b --- /dev/null +++ b/packages/community/src/index.ts @@ -0,0 +1 @@ +export { BEDROCK_MODELS, Bedrock } from "./llm/bedrock/base.js"; diff --git a/packages/community/src/llm/bedrock/base.ts b/packages/community/src/llm/bedrock/base.ts new file mode 100644 index 000000000..044e21b26 --- /dev/null +++ b/packages/community/src/llm/bedrock/base.ts @@ -0,0 +1,352 @@ +import { + BedrockRuntimeClient, + InvokeModelCommand, + InvokeModelWithResponseStreamCommand, + type BedrockRuntimeClientConfig, + type InvokeModelCommandInput, + type InvokeModelWithResponseStreamCommandInput, +} from "@aws-sdk/client-bedrock-runtime"; + +import type { + ChatMessage, + ChatResponse, + ChatResponseChunk, + CompletionResponse, + LLMChatParamsNonStreaming, + LLMChatParamsStreaming, + LLMCompletionParamsNonStreaming, + LLMCompletionParamsStreaming, + LLMMetadata, + ToolCallLLMMessageOptions, +} from "llamaindex"; +import { ToolCallLLM, streamConverter, wrapLLMEvent } from "llamaindex"; +import type { + AnthropicNoneStreamingResponse, + AnthropicTextContent, + StreamEvent, +} from "./types.js"; +import { + mapChatMessagesToAnthropicMessages, + mapMessageContentToMessageContentDetails, + toUtf8, +} from "./utils.js"; + +export type BedrockAdditionalChatOptions = {}; + +export type BedrockChatParamsStreaming = LLMChatParamsStreaming< + BedrockAdditionalChatOptions, + ToolCallLLMMessageOptions +>; + +export type BedrockChatStreamResponse = AsyncIterable< + ChatResponseChunk<ToolCallLLMMessageOptions> +>; + +export type BedrockChatParamsNonStreaming = LLMChatParamsNonStreaming< + BedrockAdditionalChatOptions, + ToolCallLLMMessageOptions +>; + +export type BedrockChatNonStreamResponse = + ChatResponse<ToolCallLLMMessageOptions>; + +export enum BEDROCK_MODELS { + AMAZON_TITAN_TG1_LARGE = "amazon.titan-tg1-large", + AMAZON_TITAN_TEXT_EXPRESS_V1 = "amazon.titan-text-express-v1", + AI21_J2_GRANDE_INSTRUCT = "ai21.j2-grande-instruct", + AI21_J2_JUMBO_INSTRUCT = "ai21.j2-jumbo-instruct", + AI21_J2_MID = "ai21.j2-mid", + AI21_J2_MID_V1 = "ai21.j2-mid-v1", + AI21_J2_ULTRA = "ai21.j2-ultra", + AI21_J2_ULTRA_V1 = "ai21.j2-ultra-v1", + COHERE_COMMAND_TEXT_V14 = "cohere.command-text-v14", + ANTHROPIC_CLAUDE_INSTANT_1 = "anthropic.claude-instant-v1", + ANTHROPIC_CLAUDE_1 = "anthropic.claude-v1", // EOF: No longer supported + ANTHROPIC_CLAUDE_2 = "anthropic.claude-v2", + ANTHROPIC_CLAUDE_2_1 = "anthropic.claude-v2:1", + ANTHROPIC_CLAUDE_3_SONNET = "anthropic.claude-3-sonnet-20240229-v1:0", + ANTHROPIC_CLAUDE_3_HAIKU = "anthropic.claude-3-haiku-20240307-v1:0", + ANTHROPIC_CLAUDE_3_OPUS = "anthropic.claude-3-opus-20240229-v1:0", + META_LLAMA2_13B_CHAT = "meta.llama2-13b-chat-v1", + META_LLAMA2_70B_CHAT = "meta.llama2-70b-chat-v1", + META_LLAMA3_8B_INSTRUCT = "meta.llama3-8b-instruct-v1:0", + META_LLAMA3_70B_INSTRUCT = "meta.llama3-70b-instruct-v1:0", + MISTRAL_7B_INSTRUCT = "mistral.mistral-7b-instruct-v0:2", + MISTRAL_MIXTRAL_7B_INSTRUCT = "mistral.mixtral-8x7b-instruct-v0:1", + MISTRAL_MIXTRAL_LARGE_2402 = "mistral.mistral-large-2402-v1:0", +} + +/* + * Values taken from https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html#model-parameters-claude + */ + +const COMPLETION_MODELS = { + [BEDROCK_MODELS.AMAZON_TITAN_TG1_LARGE]: 8000, + [BEDROCK_MODELS.AMAZON_TITAN_TEXT_EXPRESS_V1]: 8000, + [BEDROCK_MODELS.AI21_J2_GRANDE_INSTRUCT]: 8000, + [BEDROCK_MODELS.AI21_J2_JUMBO_INSTRUCT]: 8000, + [BEDROCK_MODELS.AI21_J2_MID]: 8000, + [BEDROCK_MODELS.AI21_J2_MID_V1]: 8000, + [BEDROCK_MODELS.AI21_J2_ULTRA]: 8000, + [BEDROCK_MODELS.AI21_J2_ULTRA_V1]: 8000, + [BEDROCK_MODELS.COHERE_COMMAND_TEXT_V14]: 4096, +}; + +const CHAT_ONLY_MODELS = { + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_INSTANT_1]: 100000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_1]: 100000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_2]: 100000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_2_1]: 200000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET]: 200000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU]: 200000, + [BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS]: 200000, + [BEDROCK_MODELS.META_LLAMA2_13B_CHAT]: 2048, + [BEDROCK_MODELS.META_LLAMA2_70B_CHAT]: 4096, + [BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT]: 8192, + [BEDROCK_MODELS.META_LLAMA3_70B_INSTRUCT]: 8192, + [BEDROCK_MODELS.MISTRAL_7B_INSTRUCT]: 32000, + [BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT]: 32000, + [BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402]: 32000, +}; + +const BEDROCK_FOUNDATION_LLMS = { ...COMPLETION_MODELS, ...CHAT_ONLY_MODELS }; + +/* + * Only the following models support streaming as + * per result of Bedrock.Client.list_foundation_models + * https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock/client/list_foundation_models.html + */ +export const STREAMING_MODELS = new Set([ + BEDROCK_MODELS.AMAZON_TITAN_TG1_LARGE, + BEDROCK_MODELS.AMAZON_TITAN_TEXT_EXPRESS_V1, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_INSTANT_1, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_1, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_2, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_2_1, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_SONNET, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_HAIKU, + BEDROCK_MODELS.ANTHROPIC_CLAUDE_3_OPUS, + BEDROCK_MODELS.META_LLAMA2_13B_CHAT, + BEDROCK_MODELS.META_LLAMA2_70B_CHAT, + BEDROCK_MODELS.META_LLAMA3_8B_INSTRUCT, + BEDROCK_MODELS.META_LLAMA3_70B_INSTRUCT, + BEDROCK_MODELS.MISTRAL_7B_INSTRUCT, + BEDROCK_MODELS.MISTRAL_MIXTRAL_7B_INSTRUCT, + BEDROCK_MODELS.MISTRAL_MIXTRAL_LARGE_2402, +]); + +abstract class Provider { + abstract getTextFromResponse(response: Record<string, any>): string; + + getTextFromStreamResponse(response: Record<string, any>): string { + return this.getTextFromResponse(response); + } + + abstract getRequestBody<T extends ChatMessage>( + metadata: LLMMetadata, + messages: T[], + ): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput; +} + +class AnthropicProvider extends Provider { + getResultFromResponse( + response: Record<string, any>, + ): AnthropicNoneStreamingResponse { + return JSON.parse(toUtf8(response.body)); + } + + getTextFromResponse(response: Record<string, any>): string { + const result = this.getResultFromResponse(response); + return result.content + .filter((item) => item.type === "text") + .map((item) => (item as AnthropicTextContent).text) + .join(" "); + } + + getTextFromStreamResponse(response: Record<string, any>): string { + const event: StreamEvent | undefined = response.chunk?.bytes + ? JSON.parse(toUtf8(response.chunk?.bytes)) + : undefined; + + if (event?.type === "content_block_delta") return event.delta.text; + return ""; + } + + getRequestBody<T extends ChatMessage>( + metadata: LLMMetadata, + messages: T[], + ): InvokeModelCommandInput | InvokeModelWithResponseStreamCommandInput { + return { + modelId: metadata.model, + contentType: "application/json", + accept: "application/json", + body: JSON.stringify({ + anthropic_version: "bedrock-2023-05-31", + messages: mapChatMessagesToAnthropicMessages(messages), + max_tokens: metadata.maxTokens, + temperature: metadata.temperature, + top_p: metadata.topP, + }), + }; + } +} + +// Other providers could go here +const PROVIDERS: { [key: string]: Provider } = { + anthropic: new AnthropicProvider(), +}; + +const getProvider = (model: string): Provider => { + const providerName = model.split(".")[0]; + if (!(providerName in PROVIDERS)) { + throw new Error( + `Provider ${providerName} for model ${model} is not supported`, + ); + } + return PROVIDERS[providerName]; +}; + +export type BedrockModelParams = { + model: keyof typeof BEDROCK_FOUNDATION_LLMS; + temperature?: number; + topP?: number; + maxTokens?: number; +}; + +const DEFAULT_BEDROCK_PARAMS = { + temperature: 0.1, + topP: 1, + maxTokens: 1024, // required by anthropic +}; + +export type BedrockParams = BedrockModelParams & BedrockRuntimeClientConfig; + +/** + * ToolCallLLM for Bedrock + */ +export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> { + private client: BedrockRuntimeClient; + model: keyof typeof BEDROCK_FOUNDATION_LLMS; + temperature: number; + topP: number; + maxTokens?: number; + provider: Provider; + topK?: number; + + // there should be no check for env variables. Bedrock can be authenticated in various ways + // AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION are the env variables used directly by the sdk + constructor({ + temperature, + topP, + maxTokens, + model, + ...params + }: BedrockParams) { + super(); + + this.model = model; + this.provider = getProvider(this.model); + this.maxTokens = maxTokens ?? DEFAULT_BEDROCK_PARAMS.maxTokens; + this.temperature = temperature ?? DEFAULT_BEDROCK_PARAMS.temperature; + this.topP = topP ?? DEFAULT_BEDROCK_PARAMS.topP; + this.client = new BedrockRuntimeClient(params); + } + + get supportToolCall(): boolean { + return false; + } + + get metadata(): LLMMetadata { + // NOTE, Anthropic supports top_k but LLMMetadata does not + return { + model: this.model, + temperature: this.temperature, + topP: this.topP, + maxTokens: this.maxTokens, + contextWindow: BEDROCK_FOUNDATION_LLMS[this.model], + tokenizer: undefined, + }; + } + + protected async nonStreamChat( + params: BedrockChatParamsNonStreaming, + ): Promise<BedrockChatNonStreamResponse> { + const input = this.provider.getRequestBody(this.metadata, params.messages); + const command = new InvokeModelCommand(input); + const response = await this.client.send(command); + return { + raw: response, + message: { + content: this.provider.getTextFromResponse(response), + role: "assistant", + }, + }; + } + + protected async *streamChat( + params: BedrockChatParamsStreaming, + ): BedrockChatStreamResponse { + if (!STREAMING_MODELS.has(this.model)) + throw new Error(`The model: ${this.model} does not support streaming`); + const input = this.provider.getRequestBody(this.metadata, params.messages); + const command = new InvokeModelWithResponseStreamCommand(input); + const response = await this.client.send(command); + + if (response.body) + yield* streamConverter(response.body, (response) => { + return { + delta: this.provider.getTextFromStreamResponse(response), + raw: response, + }; + }); + } + + chat(params: BedrockChatParamsStreaming): Promise<BedrockChatStreamResponse>; + chat( + params: BedrockChatParamsNonStreaming, + ): Promise<BedrockChatNonStreamResponse>; + + @wrapLLMEvent + async chat( + params: BedrockChatParamsStreaming | BedrockChatParamsNonStreaming, + ): Promise<BedrockChatStreamResponse | BedrockChatNonStreamResponse> { + if (params.stream) return this.streamChat(params); + return this.nonStreamChat(params); + } + + complete( + params: LLMCompletionParamsStreaming, + ): Promise<AsyncIterable<CompletionResponse>>; + complete( + params: LLMCompletionParamsNonStreaming, + ): Promise<CompletionResponse>; + async complete( + params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming, + ): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> { + const message: ChatMessage = { + role: "user", + content: mapMessageContentToMessageContentDetails(params.prompt), + }; + + const input = this.provider.getRequestBody(this.metadata, [message]); + + if (params.stream) { + const command = new InvokeModelWithResponseStreamCommand(input); + const response = await this.client.send(command); + if (response.body) + return streamConverter(response.body, (response) => { + return { + text: this.provider.getTextFromStreamResponse(response), + raw: response, + }; + }); + } + + const command = new InvokeModelCommand(input); + const response = await this.client.send(command); + return { + text: this.provider.getTextFromResponse(response), + raw: response, + }; + } +} diff --git a/packages/community/src/llm/bedrock/types.ts b/packages/community/src/llm/bedrock/types.ts new file mode 100644 index 000000000..14124dcda --- /dev/null +++ b/packages/community/src/llm/bedrock/types.ts @@ -0,0 +1,109 @@ +type Usage = { + input_tokens: number; + output_tokens: number; +}; + +type Message = { + id: string; + type: string; + role: string; + content: string[]; + model: string; + stop_reason: string | null; + stop_sequence: string | null; + usage: Usage; +}; + +type ContentBlockStart = { + type: "content_block_start"; + index: number; + content_block: { + type: string; + text: string; + }; +}; + +type Delta = { + type: string; + text: string; +}; + +type ContentBlockDelta = { + type: "content_block_delta"; + index: number; + delta: Delta; +}; + +type ContentBlockStop = { + type: "content_block_stop"; + index: number; +}; + +type MessageDelta = { + type: "message_delta"; + delta: { + stop_reason: string; + stop_sequence: string | null; + }; + usage: Usage; +}; + +type InvocationMetrics = { + inputTokenCount: number; + outputTokenCount: number; + invocationLatency: number; + firstByteLatency: number; +}; + +type MessageStop = { + type: "message_stop"; + "amazon-bedrock-invocationMetrics": InvocationMetrics; +}; + +export type StreamEvent = + | { type: "message_start"; message: Message } + | ContentBlockStart + | ContentBlockDelta + | ContentBlockStop + | MessageDelta + | MessageStop; + +export type AnthropicContent = AnthropicTextContent | AnthropicImageContent; + +export type AnthropicTextContent = { + type: "text"; + text: string; +}; + +export type AnthropicMediaTypes = + | "image/jpeg" + | "image/png" + | "image/webp" + | "image/gif"; + +export type AnthropicImageSource = { + type: "base64"; + media_type: AnthropicMediaTypes; + data: string; // base64 encoded image bytes +}; + +export type AnthropicImageContent = { + type: "image"; + source: AnthropicImageSource; +}; + +export type AnthropicMessage = { + role: "user" | "assistant"; + content: AnthropicContent[]; +}; + +export type AnthropicNoneStreamingResponse = { + id: string; + type: "message"; + role: "assistant"; + content: AnthropicContent[]; + model: string; + stop_reason: "end_turn" | "max_tokens" | "stop_sequence"; + stop_sequence?: string; + usage: { input_tokens: number; output_tokens: number }; +}; diff --git a/packages/community/src/llm/bedrock/utils.ts b/packages/community/src/llm/bedrock/utils.ts new file mode 100644 index 000000000..f6d9beea9 --- /dev/null +++ b/packages/community/src/llm/bedrock/utils.ts @@ -0,0 +1,144 @@ +import type { + ChatMessage, + MessageContent, + MessageContentDetail, +} from "llamaindex"; +import type { + AnthropicContent, + AnthropicImageContent, + AnthropicMediaTypes, + AnthropicMessage, + AnthropicTextContent, +} from "./types.js"; + +const ACCEPTED_IMAGE_MIME_TYPES = [ + "image/jpeg", + "image/png", + "image/webp", + "image/gif", +]; + +export const mapMessageContentToMessageContentDetails = ( + content: MessageContent, +): MessageContentDetail[] => { + return Array.isArray(content) ? content : [{ type: "text", text: content }]; +}; + +export const mergeNeighboringSameRoleMessages = ( + messages: AnthropicMessage[], +): AnthropicMessage[] => { + return messages.reduce( + (result: AnthropicMessage[], current: AnthropicMessage, index: number) => { + if (index > 0 && messages[index - 1].role === current.role) { + result[result.length - 1].content = [ + ...result[result.length - 1].content, + ...current.content, + ]; + } else { + result.push(current); + } + return result; + }, + [], + ); +}; + +export const mapMessageContentDetailToAnthropicContent = < + T extends MessageContentDetail, +>( + detail: T, +): AnthropicContent => { + let content: AnthropicContent; + + if (detail.type === "text") { + content = mapTextContent(detail.text); + } else if (detail.type === "image_url") { + content = mapImageContent(detail.image_url.url); + } else { + throw new Error("Unsupported content detail type"); + } + return content; +}; + +export const mapMessageContentToAnthropicContent = <T extends MessageContent>( + content: T, +): AnthropicContent[] => { + return mapMessageContentToMessageContentDetails(content).map( + mapMessageContentDetailToAnthropicContent, + ); +}; + +export const mapChatMessagesToAnthropicMessages = <T extends ChatMessage>( + messages: T[], +): AnthropicMessage[] => { + const mapped = messages + .flatMap((msg: T): AnthropicMessage[] => { + return mapMessageContentToMessageContentDetails(msg.content).map( + (detail: MessageContentDetail): AnthropicMessage => { + const content = mapMessageContentDetailToAnthropicContent(detail); + + return { + role: msg.role === "assistant" ? "assistant" : "user", + content: [content], + }; + }, + ); + }) + .filter((message: AnthropicMessage) => { + const content = message.content[0]; + if (content.type === "text" && !content.text) return false; + if (content.type === "image" && !content.source.data) return false; + return true; + }); + + return mergeNeighboringSameRoleMessages(mapped); +}; + +export const mapTextContent = (text: string): AnthropicTextContent => { + return { type: "text", text }; +}; + +export const extractDataUrlComponents = ( + dataUrl: string, +): { + mimeType: string; + base64: string; +} => { + const parts = dataUrl.split(";base64,"); + + if (parts.length !== 2 || !parts[0].startsWith("data:")) { + throw new Error("Invalid data URL"); + } + + const mimeType = parts[0].slice(5); + const base64 = parts[1]; + + return { + mimeType, + base64, + }; +}; + +export const mapImageContent = (imageUrl: string): AnthropicImageContent => { + if (!imageUrl.startsWith("data:")) + throw new Error( + "For Anthropic please only use base64 data url, e.g.: data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==", + ); + const { mimeType, base64: data } = extractDataUrlComponents(imageUrl); + if (!ACCEPTED_IMAGE_MIME_TYPES.includes(mimeType)) + throw new Error( + `Anthropic only accepts the following mimeTypes: ${ACCEPTED_IMAGE_MIME_TYPES.join("\n")}`, + ); + + return { + type: "image", + source: { + type: "base64", + media_type: mimeType as AnthropicMediaTypes, + data, + }, + }; +}; + +export const toUtf8 = (input: Uint8Array): string => + new TextDecoder("utf-8").decode(input); diff --git a/packages/community/tsconfig.json b/packages/community/tsconfig.json new file mode 100644 index 000000000..b3bb53826 --- /dev/null +++ b/packages/community/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist/type", + "tsBuildInfoFile": "./dist/.tsbuildinfo", + "emitDeclarationOnly": true, + "module": "node16", + "moduleResolution": "node16", + "types": ["node"] + }, + "include": ["./src"], + "exclude": ["node_modules"], + "references": [ + { + "path": "../core/tsconfig.json" + } + ] +} diff --git a/packages/core/src/llm/index.ts b/packages/core/src/llm/index.ts index 6bfc7a63e..dae1ca747 100644 --- a/packages/core/src/llm/index.ts +++ b/packages/core/src/llm/index.ts @@ -4,8 +4,10 @@ export { ALL_AVAILABLE_V3_MODELS, Anthropic, } from "./anthropic.js"; +export { ToolCallLLM } from "./base.js"; export { FireworksLLM } from "./fireworks.js"; export { Gemini, GeminiSession } from "./gemini/base.js"; +export { streamConverter, wrapLLMEvent } from "./utils.js"; export { GEMINI_MODEL, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50f0f3341..364d9fc96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -332,6 +332,31 @@ importers: specifier: ^5.4.5 version: 5.4.5 + packages/community: + dependencies: + '@aws-sdk/client-bedrock-runtime': + specifier: ^3.582.0 + version: 3.582.0 + '@types/node': + specifier: ^20.12.11 + version: 20.12.11 + llamaindex: + specifier: workspace:* + version: link:../core + devDependencies: + '@swc/cli': + specifier: ^0.3.12 + version: 0.3.12(@swc/core@1.5.5(@swc/helpers@0.5.11))(chokidar@3.6.0) + '@swc/core': + specifier: ^1.5.5 + version: 1.5.5(@swc/helpers@0.5.11) + concurrently: + specifier: ^8.2.2 + version: 8.2.2 + pathe: + specifier: ^1.1.2 + version: 1.1.2 + packages/core: dependencies: '@anthropic-ai/sdk': @@ -818,17 +843,140 @@ packages: '@assemblyscript/loader@0.27.27': resolution: {integrity: sha512-zeAM5zx4CT9shQuES+4UNfLVzlmkRrY9W1LujuEhS1xI/qcHr3BsU4SAOylR4D2lsRjhwcdqNEZkph/zA7+5Vg==} + '@aws-crypto/crc32@3.0.0': + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + + '@aws-crypto/ie11-detection@3.0.0': + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + + '@aws-crypto/sha256-browser@3.0.0': + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + + '@aws-crypto/sha256-js@3.0.0': + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + '@aws-crypto/sha256-js@5.2.0': resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} engines: {node: '>=16.0.0'} + '@aws-crypto/supports-web-crypto@3.0.0': + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + '@aws-sdk/client-bedrock-runtime@3.582.0': + resolution: {integrity: sha512-MVcJHH/4Y7F88QQrj05bWAQIQaOJE5PyLaHTaxscbsi41W7T/09NVRRPZqWICdjkKlJ6NruEDquna1bb3mt2wQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.582.0': + resolution: {integrity: sha512-g4uiD4GUR03CqY6LwdocJxO+fHSBk/KNXBGJv1ENCcPmK3jpEI8xBggIQOQl3NWjDeP07bpIb8+UhgSoYAYtkg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso@3.582.0': + resolution: {integrity: sha512-C6G2vNREANe5uUCYrTs8vvGhIrrS1GRoTjr0f5qmkZDuAtuBsQNoTF6Rt+0mDwXXBYW3FcNhZntaNCGVhXlugA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sts@3.582.0': + resolution: {integrity: sha512-3gaYyQkt8iTSStnjv6kJoPGDJUaPbhcgBOrXhUNbWUgAlgw7Y1aI1MYt3JqvVN4jtiCLwjuiAQATU/8elbqPdQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/core@3.582.0': + resolution: {integrity: sha512-ofmD96IQc9g1dbyqlCyxu5fCG7kIl9p1NoN5+vGBUyLdbmPCV3Pdg99nRHYEJuv2MgGx5AUFGDPMHcqbJpnZIw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.577.0': + resolution: {integrity: sha512-Jxu255j0gToMGEiqufP8ZtKI8HW90lOLjwJ3LrdlD/NLsAY0tOQf1fWc53u28hWmmNGMxmCrL2p66IOgMDhDUw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-http@3.582.0': + resolution: {integrity: sha512-kGOUKw5ryPkDIYB69PjK3SicVLTbWB06ouFN2W1EvqUJpkQGPAUGzYcomKtt3mJaCTf/1kfoaHwARAl6KKSP8Q==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-ini@3.582.0': + resolution: {integrity: sha512-GWcjHx6ErcZAi5GZ7kItX7E6ygYmklm9tD9dbCWdsnis7IiWfYZNMXFQEwKCubUmhT61zjGZGDUiRcqVeZu1Aw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.582.0 + + '@aws-sdk/credential-provider-node@3.582.0': + resolution: {integrity: sha512-T8OLA/2xayRMT8z2eIZgo8tBAamTsBn7HWc8mL1a9yzv5OCPYvucNmbO915DY8u4cNbMl2dcB9frfVxIrahCXw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-process@3.577.0': + resolution: {integrity: sha512-Gin6BWtOiXxIgITrJ3Nwc+Y2P1uVT6huYR4EcbA/DJUPWyO0n9y5UFLewPvVbLkRn15JeEqErBLUrHclkiOKtw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-sso@3.582.0': + resolution: {integrity: sha512-PSiBX6YvJaodGSVg6dReWfeYgK5Tl4fUi0GMuD9WXo/ckfxAPdDFtIfVR6VkSPUrkZj26uw1Pwqeefp2H5phag==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.577.0': + resolution: {integrity: sha512-ZGHGNRaCtJJmszb9UTnC7izNCtRUttdPlLdMkh41KPS32vfdrBDHs1JrpbZijItRj1xKuOXsiYSXLAaHGcLh8Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.577.0 + + '@aws-sdk/middleware-host-header@3.577.0': + resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-logger@3.577.0': + resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.577.0': + resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-user-agent@3.577.0': + resolution: {integrity: sha512-P55HAXgwmiHHpFx5JEPvOnAbfhN7v6sWv9PBQs+z2tC7QiBcPS0cdJR6PfV7J1n4VPK52/OnrK3l9VxdQ7Ms0g==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/region-config-resolver@3.577.0': + resolution: {integrity: sha512-4ChCFACNwzqx/xjg3zgFcW8Ali6R9C95cFECKWT/7CUM1D0MGvkclSH2cLarmHCmJgU6onKkJroFtWp0kHhgyg==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/token-providers@3.577.0': + resolution: {integrity: sha512-0CkIZpcC3DNQJQ1hDjm2bdSy/Xjs7Ny5YvSsacasGOkNfk+FdkiQy6N67bZX3Zbc9KIx+Nz4bu3iDeNSNplnnQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.577.0 + '@aws-sdk/types@3.567.0': resolution: {integrity: sha512-JBznu45cdgQb8+T/Zab7WpBmfEAh77gsk99xuF4biIb2Sw1mdseONdoGDjEJX57a25TzIv/WUJ2oABWumckz1A==} engines: {node: '>=16.0.0'} + '@aws-sdk/types@3.577.0': + resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-endpoints@3.577.0': + resolution: {integrity: sha512-FjuUz1Kdy4Zly2q/c58tpdqHd6z7iOdU/caYzoc8jwgAHBDBbIJNQLCU9hXJnPV2M8pWxQDyIZsoVwtmvErPzw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-locate-window@3.568.0': + resolution: {integrity: sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/util-user-agent-browser@3.577.0': + resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==} + + '@aws-sdk/util-user-agent-node@3.577.0': + resolution: {integrity: sha512-XqvtFjbSMtycZTWVwDe8DRWovuoMbA54nhUoZwVU6rW9OSD6NZWGR512BUGHFaWzW0Wg8++Dj10FrKTG2XtqfA==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + '@babel/code-frame@7.24.2': resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} @@ -2713,22 +2861,193 @@ packages: '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} + '@smithy/abort-controller@3.0.0': + resolution: {integrity: sha512-p6GlFGBt9K4MYLu72YuJ523NVR4A8oHlC5M2JO6OmQqN8kAc/uh1JqLE+FizTokrSJGg0CSvC+BrsmGzKtsZKA==} + engines: {node: '>=16.0.0'} + + '@smithy/config-resolver@3.0.0': + resolution: {integrity: sha512-2GzOfADwYLQugYkKQhIyZyQlM05K+tMKvRnc6eFfZcpJGRfKoMUMYdPlBKmqHwQFXQKBrGV6cxL9oymWgDzvFw==} + engines: {node: '>=16.0.0'} + + '@smithy/core@2.0.1': + resolution: {integrity: sha512-rcMkjvwxH/bER+oZUPR0yTA0ELD6m3A+d92+CFkdF6HJFCBB1bXo7P5pm21L66XwTN01B6bUhSCQ7cymWRD8zg==} + engines: {node: '>=16.0.0'} + + '@smithy/credential-provider-imds@3.0.0': + resolution: {integrity: sha512-lfmBiFQcA3FsDAPxNfY0L7CawcWtbyWsBOHo34nF095728JLkBX4Y9q/VPPE2r7fqMVK+drmDigqE2/SSQeVRA==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-codec@3.0.0': + resolution: {integrity: sha512-PUtyEA0Oik50SaEFCZ0WPVtF9tz/teze2fDptW6WRXl+RrEenH8UbEjudOz8iakiMl3lE3lCVqYf2Y+znL8QFQ==} + + '@smithy/eventstream-serde-browser@3.0.0': + resolution: {integrity: sha512-NB7AFiPN4NxP/YCAnrvYR18z2/ZsiHiF7VtG30gshO9GbFrIb1rC8ep4NGpJSWrz6P64uhPXeo4M0UsCLnZKqw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-config-resolver@3.0.0': + resolution: {integrity: sha512-RUQG3vQ3LX7peqqHAbmayhgrF5aTilPnazinaSGF1P0+tgM3vvIRWPHmlLIz2qFqB9LqFIxditxc8O2Z6psrRw==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-node@3.0.0': + resolution: {integrity: sha512-baRPdMBDMBExZXIUAoPGm/hntixjt/VFpU6+VmCyiYJYzRHRxoaI1MN+5XE+hIS8AJ2GCHLMFEIOLzq9xx1EgQ==} + engines: {node: '>=16.0.0'} + + '@smithy/eventstream-serde-universal@3.0.0': + resolution: {integrity: sha512-HNFfShmotWGeAoW4ujP8meV9BZavcpmerDbPIjkJbxKbN8RsUcpRQ/2OyIxWNxXNH2GWCAxuSB7ynmIGJlQ3Dw==} + engines: {node: '>=16.0.0'} + + '@smithy/fetch-http-handler@3.0.1': + resolution: {integrity: sha512-uaH74i5BDj+rBwoQaXioKpI0SHBJFtOVwzrCpxZxphOW0ki5jhj7dXvDMYM2IJem8TpdFvS2iC08sjOblfFGFg==} + + '@smithy/hash-node@3.0.0': + resolution: {integrity: sha512-84qXstNemP3XS5jcof0el6+bDfjzuvhJPQTEfro3lgtbCtKgzPm3MgiS6ehXVPjeQ5+JS0HqmTz8f/RYfzHVxw==} + engines: {node: '>=16.0.0'} + + '@smithy/invalid-dependency@3.0.0': + resolution: {integrity: sha512-F6wBBaEFgJzj0s4KUlliIGPmqXemwP6EavgvDqYwCH40O5Xr2iMHvS8todmGVZtuJCorBkXsYLyTu4PuizVq5g==} + '@smithy/is-array-buffer@2.2.0': resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} engines: {node: '>=14.0.0'} + '@smithy/is-array-buffer@3.0.0': + resolution: {integrity: sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-content-length@3.0.0': + resolution: {integrity: sha512-3C4s4d/iGobgCtk2tnWW6+zSTOBg1PRAm2vtWZLdriwTroFbbWNSr3lcyzHdrQHnEXYCC5K52EbpfodaIUY8sg==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-endpoint@3.0.0': + resolution: {integrity: sha512-aXOAWztw/5qAfp0NcA2OWpv6ZI/E+Dh9mByif7i91D/0iyYNUcKvskmXiowKESFkuZ7PIMd3VOR4fTibZDs2OQ==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-retry@3.0.1': + resolution: {integrity: sha512-hBhSEuL841FhJBK/19WpaGk5YWSzFk/P2UaVjANGKRv3eYNO8Y1lANWgqnuPWjOyCEWMPr58vELFDWpxvRKANw==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-serde@3.0.0': + resolution: {integrity: sha512-I1vKG1foI+oPgG9r7IMY1S+xBnmAn1ISqployvqkwHoSb8VPsngHDTOgYGYBonuOKndaWRUGJZrKYYLB+Ane6w==} + engines: {node: '>=16.0.0'} + + '@smithy/middleware-stack@3.0.0': + resolution: {integrity: sha512-+H0jmyfAyHRFXm6wunskuNAqtj7yfmwFB6Fp37enytp2q047/Od9xetEaUbluyImOlGnGpaVGaVfjwawSr+i6Q==} + engines: {node: '>=16.0.0'} + + '@smithy/node-config-provider@3.0.0': + resolution: {integrity: sha512-buqfaSdDh0zo62EPLf8rGDvcpKwGpO5ho4bXS2cdFhlOta7tBkWJt+O5uiaAeICfIOfPclNOndshDNSanX2X9g==} + engines: {node: '>=16.0.0'} + + '@smithy/node-http-handler@3.0.0': + resolution: {integrity: sha512-3trD4r7NOMygwLbUJo4eodyQuypAWr7uvPnebNJ9a70dQhVn+US8j/lCnvoJS6BXfZeF7PkkkI0DemVJw+n+eQ==} + engines: {node: '>=16.0.0'} + + '@smithy/property-provider@3.0.0': + resolution: {integrity: sha512-LmbPgHBswdXCrkWWuUwBm9w72S2iLWyC/5jet9/Y9cGHtzqxi+GVjfCfahkvNV4KXEwgnH8EMpcrD9RUYe0eLQ==} + engines: {node: '>=16.0.0'} + + '@smithy/protocol-http@4.0.0': + resolution: {integrity: sha512-qOQZOEI2XLWRWBO9AgIYuHuqjZ2csyr8/IlgFDHDNuIgLAMRx2Bl8ck5U5D6Vh9DPdoaVpuzwWMa0xcdL4O/AQ==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-builder@3.0.0': + resolution: {integrity: sha512-bW8Fi0NzyfkE0TmQphDXr1AmBDbK01cA4C1Z7ggwMAU5RDz5AAv/KmoRwzQAS0kxXNf/D2ALTEgwK0U2c4LtRg==} + engines: {node: '>=16.0.0'} + + '@smithy/querystring-parser@3.0.0': + resolution: {integrity: sha512-UzHwthk0UEccV4dHzPySnBy34AWw3V9lIqUTxmozQ+wPDAO9csCWMfOLe7V9A2agNYy7xE+Pb0S6K/J23JSzfQ==} + engines: {node: '>=16.0.0'} + + '@smithy/service-error-classification@3.0.0': + resolution: {integrity: sha512-3BsBtOUt2Gsnc3X23ew+r2M71WwtpHfEDGhHYHSDg6q1t8FrWh15jT25DLajFV1H+PpxAJ6gqe9yYeRUsmSdFA==} + engines: {node: '>=16.0.0'} + + '@smithy/shared-ini-file-loader@3.0.0': + resolution: {integrity: sha512-REVw6XauXk8xE4zo5aGL7Rz4ywA8qNMUn8RtWeTRQsgAlmlvbJ7CEPBcaXU2NDC3AYBgYAXrGyWD8XrN8UGDog==} + engines: {node: '>=16.0.0'} + + '@smithy/signature-v4@3.0.0': + resolution: {integrity: sha512-kXFOkNX+BQHe2qnLxpMEaCRGap9J6tUGLzc3A9jdn+nD4JdMwCKTJ+zFwQ20GkY+mAXGatyTw3HcoUlR39HwmA==} + engines: {node: '>=16.0.0'} + + '@smithy/smithy-client@3.0.1': + resolution: {integrity: sha512-KAiFY4Y4jdHxR+4zerH/VBhaFKM8pbaVmJZ/CWJRwtM/CmwzTfXfvYwf6GoUwiHepdv+lwiOXCuOl6UBDUEINw==} + engines: {node: '>=16.0.0'} + '@smithy/types@2.12.0': resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==} engines: {node: '>=14.0.0'} + '@smithy/types@3.0.0': + resolution: {integrity: sha512-VvWuQk2RKFuOr98gFhjca7fkBS+xLLURT8bUjk5XQoV0ZLm7WPwWPPY3/AwzTLuUBDeoKDCthfe1AsTUWaSEhw==} + engines: {node: '>=16.0.0'} + + '@smithy/url-parser@3.0.0': + resolution: {integrity: sha512-2XLazFgUu+YOGHtWihB3FSLAfCUajVfNBXGGYjOaVKjLAuAxx3pSBY3hBgLzIgB17haf59gOG3imKqTy8mcrjw==} + + '@smithy/util-base64@3.0.0': + resolution: {integrity: sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-body-length-browser@3.0.0': + resolution: {integrity: sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==} + + '@smithy/util-body-length-node@3.0.0': + resolution: {integrity: sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==} + engines: {node: '>=16.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@3.0.0': + resolution: {integrity: sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-config-provider@3.0.0': + resolution: {integrity: sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-defaults-mode-browser@3.0.1': + resolution: {integrity: sha512-nW5kEzdJn1Bn5TF+gOPHh2rcPli8JU9vSSXLbfg7uPnfR1TMRQqs9zlYRhIb87NeSxIbpdXOI94tvXSy+fvDYg==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-defaults-mode-node@3.0.1': + resolution: {integrity: sha512-TFk+Qb+elLc/MOhtSp+50fstyfZ6avQbgH2d96xUBpeScu+Al9elxv+UFAjaTHe0HQe5n+wem8ZLpXvU8lwV6Q==} + engines: {node: '>= 10.0.0'} + + '@smithy/util-endpoints@2.0.0': + resolution: {integrity: sha512-+exaXzEY3DNt2qtA2OtRNSDlVrE4p32j1JSsQkzA5AdP0YtJNjkYbYhJxkFmPYcjI1abuwopOZCwUmv682QkiQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-hex-encoding@3.0.0': + resolution: {integrity: sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-middleware@3.0.0': + resolution: {integrity: sha512-q5ITdOnV2pXHSVDnKWrwgSNTDBAMHLptFE07ua/5Ty5WJ11bvr0vk2a7agu7qRhrCFRQlno5u3CneU5EELK+DQ==} + engines: {node: '>=16.0.0'} + + '@smithy/util-retry@3.0.0': + resolution: {integrity: sha512-nK99bvJiziGv/UOKJlDvFF45F00WgPLKVIGUfAK+mDhzVN2hb/S33uW2Tlhg5PVBoqY7tDVqL0zmu4OxAHgo9g==} + engines: {node: '>=16.0.0'} + + '@smithy/util-stream@3.0.1': + resolution: {integrity: sha512-7F7VNNhAsfMRA8I986YdOY5fE0/T1/ZjFF6OLsqkvQVNP3vZ/szYDfGCyphb7ioA09r32K/0qbSFfNFU68aSzA==} + engines: {node: '>=16.0.0'} + + '@smithy/util-uri-escape@3.0.0': + resolution: {integrity: sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==} + engines: {node: '>=16.0.0'} + '@smithy/util-utf8@2.3.0': resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} engines: {node: '>=14.0.0'} + '@smithy/util-utf8@3.0.0': + resolution: {integrity: sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==} + engines: {node: '>=16.0.0'} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -3856,6 +4175,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + boxen@6.2.1: resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5154,6 +5476,10 @@ packages: fast-url-parser@1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -8816,6 +9142,9 @@ packages: resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} @@ -9997,23 +10326,418 @@ snapshots: '@assemblyscript/loader@0.27.27': {} + '@aws-crypto/crc32@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + tslib: 1.14.1 + + '@aws-crypto/ie11-detection@3.0.0': + dependencies: + tslib: 1.14.1 + + '@aws-crypto/sha256-browser@3.0.0': + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-locate-window': 3.568.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + + '@aws-crypto/sha256-js@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.577.0 + tslib: 1.14.1 + '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.567.0 tslib: 2.6.2 + '@aws-crypto/supports-web-crypto@3.0.0': + dependencies: + tslib: 1.14.1 + + '@aws-crypto/util@3.0.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + '@aws-crypto/util@5.2.0': dependencies: '@aws-sdk/types': 3.567.0 '@smithy/util-utf8': 2.3.0 tslib: 2.6.2 + '@aws-sdk/client-bedrock-runtime@3.582.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.582.0(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/client-sts': 3.582.0 + '@aws-sdk/core': 3.582.0 + '@aws-sdk/credential-provider-node': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.577.0 + '@aws-sdk/region-config-resolver': 3.577.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.577.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.577.0 + '@smithy/config-resolver': 3.0.0 + '@smithy/core': 2.0.1 + '@smithy/eventstream-serde-browser': 3.0.0 + '@smithy/eventstream-serde-config-resolver': 3.0.0 + '@smithy/eventstream-serde-node': 3.0.0 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.1 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.1 + '@smithy/util-defaults-mode-node': 3.0.1 + '@smithy/util-endpoints': 2.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-stream': 3.0.1 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.582.0(@aws-sdk/client-sts@3.582.0)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.582.0 + '@aws-sdk/core': 3.582.0 + '@aws-sdk/credential-provider-node': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.577.0 + '@aws-sdk/region-config-resolver': 3.577.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.577.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.577.0 + '@smithy/config-resolver': 3.0.0 + '@smithy/core': 2.0.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.1 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.1 + '@smithy/util-defaults-mode-node': 3.0.1 + '@smithy/util-endpoints': 2.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/client-sso@3.582.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.582.0 + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.577.0 + '@aws-sdk/region-config-resolver': 3.577.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.577.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.577.0 + '@smithy/config-resolver': 3.0.0 + '@smithy/core': 2.0.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.1 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.1 + '@smithy/util-defaults-mode-node': 3.0.1 + '@smithy/util-endpoints': 2.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.582.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.582.0(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/core': 3.582.0 + '@aws-sdk/credential-provider-node': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.577.0 + '@aws-sdk/region-config-resolver': 3.577.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.577.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.577.0 + '@smithy/config-resolver': 3.0.0 + '@smithy/core': 2.0.1 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/hash-node': 3.0.0 + '@smithy/invalid-dependency': 3.0.0 + '@smithy/middleware-content-length': 3.0.0 + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.1 + '@smithy/middleware-serde': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/node-http-handler': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.1 + '@smithy/util-defaults-mode-node': 3.0.1 + '@smithy/util-endpoints': 2.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.582.0': + dependencies: + '@smithy/core': 2.0.1 + '@smithy/protocol-http': 4.0.0 + '@smithy/signature-v4': 3.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-env@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-http@3.582.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/node-http-handler': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/util-stream': 3.0.1 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-ini@3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0)': + dependencies: + '@aws-sdk/client-sts': 3.582.0 + '@aws-sdk/credential-provider-env': 3.577.0 + '@aws-sdk/credential-provider-process': 3.577.0 + '@aws-sdk/credential-provider-sso': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0) + '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-node@3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.577.0 + '@aws-sdk/credential-provider-http': 3.582.0 + '@aws-sdk/credential-provider-ini': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0)(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/credential-provider-process': 3.577.0 + '@aws-sdk/credential-provider-sso': 3.582.0(@aws-sdk/client-sso-oidc@3.582.0) + '@aws-sdk/credential-provider-web-identity': 3.577.0(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-process@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-sso@3.582.0(@aws-sdk/client-sso-oidc@3.582.0)': + dependencies: + '@aws-sdk/client-sso': 3.582.0 + '@aws-sdk/token-providers': 3.577.0(@aws-sdk/client-sso-oidc@3.582.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.577.0(@aws-sdk/client-sts@3.582.0)': + dependencies: + '@aws-sdk/client-sts': 3.582.0 + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-host-header@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-logger@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-recursion-detection@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-user-agent@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.577.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/region-config-resolver@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/token-providers@3.577.0(@aws-sdk/client-sso-oidc@3.582.0)': + dependencies: + '@aws-sdk/client-sso-oidc': 3.582.0(@aws-sdk/client-sts@3.582.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + '@aws-sdk/types@3.567.0': dependencies: '@smithy/types': 2.12.0 tslib: 2.6.2 + '@aws-sdk/types@3.577.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-endpoints@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + '@smithy/util-endpoints': 2.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-locate-window@3.568.0': + dependencies: + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-browser@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.0.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-node@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.6.2 + '@babel/code-frame@7.24.2': dependencies: '@babel/highlight': 7.24.5 @@ -12422,24 +13146,304 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 + '@smithy/abort-controller@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/config-resolver@3.0.0': + dependencies: + '@smithy/node-config-provider': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/core@2.0.1': + dependencies: + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-retry': 3.0.1 + '@smithy/middleware-serde': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/credential-provider-imds@3.0.0': + dependencies: + '@smithy/node-config-provider': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-codec@3.0.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-browser@3.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-config-resolver@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-node@3.0.0': + dependencies: + '@smithy/eventstream-serde-universal': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/eventstream-serde-universal@3.0.0': + dependencies: + '@smithy/eventstream-codec': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/fetch-http-handler@3.0.1': + dependencies: + '@smithy/protocol-http': 4.0.0 + '@smithy/querystring-builder': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-base64': 3.0.0 + tslib: 2.6.2 + + '@smithy/hash-node@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/invalid-dependency@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + '@smithy/is-array-buffer@2.2.0': dependencies: tslib: 2.6.2 + '@smithy/is-array-buffer@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/middleware-content-length@3.0.0': + dependencies: + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-endpoint@3.0.0': + dependencies: + '@smithy/middleware-serde': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/url-parser': 3.0.0 + '@smithy/util-middleware': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-retry@3.0.1': + dependencies: + '@smithy/node-config-provider': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/service-error-classification': 3.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-retry': 3.0.0 + tslib: 2.6.2 + uuid: 9.0.1 + + '@smithy/middleware-serde@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/middleware-stack@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/node-config-provider@3.0.0': + dependencies: + '@smithy/property-provider': 3.0.0 + '@smithy/shared-ini-file-loader': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/node-http-handler@3.0.0': + dependencies: + '@smithy/abort-controller': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/querystring-builder': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/property-provider@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/protocol-http@4.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/querystring-builder@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + '@smithy/util-uri-escape': 3.0.0 + tslib: 2.6.2 + + '@smithy/querystring-parser@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/service-error-classification@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + + '@smithy/shared-ini-file-loader@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/signature-v4@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.0 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/smithy-client@3.0.1': + dependencies: + '@smithy/middleware-endpoint': 3.0.0 + '@smithy/middleware-stack': 3.0.0 + '@smithy/protocol-http': 4.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-stream': 3.0.1 + tslib: 2.6.2 + '@smithy/types@2.12.0': dependencies: tslib: 2.6.2 + '@smithy/types@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/url-parser@3.0.0': + dependencies: + '@smithy/querystring-parser': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-base64@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-body-length-browser@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-body-length-node@3.0.0': + dependencies: + tslib: 2.6.2 + '@smithy/util-buffer-from@2.2.0': dependencies: '@smithy/is-array-buffer': 2.2.0 tslib: 2.6.2 + '@smithy/util-buffer-from@3.0.0': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-config-provider@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-defaults-mode-browser@3.0.1': + dependencies: + '@smithy/property-provider': 3.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@smithy/util-defaults-mode-node@3.0.1': + dependencies: + '@smithy/config-resolver': 3.0.0 + '@smithy/credential-provider-imds': 3.0.0 + '@smithy/node-config-provider': 3.0.0 + '@smithy/property-provider': 3.0.0 + '@smithy/smithy-client': 3.0.1 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-endpoints@2.0.0': + dependencies: + '@smithy/node-config-provider': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-hex-encoding@3.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-middleware@3.0.0': + dependencies: + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-retry@3.0.0': + dependencies: + '@smithy/service-error-classification': 3.0.0 + '@smithy/types': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-stream@3.0.1': + dependencies: + '@smithy/fetch-http-handler': 3.0.1 + '@smithy/node-http-handler': 3.0.0 + '@smithy/types': 3.0.0 + '@smithy/util-base64': 3.0.0 + '@smithy/util-buffer-from': 3.0.0 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.6.2 + + '@smithy/util-uri-escape@3.0.0': + dependencies: + tslib: 2.6.2 + '@smithy/util-utf8@2.3.0': dependencies: '@smithy/util-buffer-from': 2.2.0 tslib: 2.6.2 + '@smithy/util-utf8@3.0.0': + dependencies: + '@smithy/util-buffer-from': 3.0.0 + tslib: 2.6.2 + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -13769,6 +14773,8 @@ snapshots: boolbase@1.0.0: {} + bowser@2.11.0: {} + boxen@6.2.1: dependencies: ansi-align: 3.0.1 @@ -15364,6 +16370,10 @@ snapshots: dependencies: punycode: 1.4.1 + fast-xml-parser@4.2.5: + dependencies: + strnum: 1.0.5 + fastq@1.17.1: dependencies: reusify: 1.0.4 @@ -19687,6 +20697,8 @@ snapshots: strip-outer@2.0.0: {} + strnum@1.0.5: {} + strtok3@7.0.0: dependencies: '@tokenizer/token': 0.3.0 -- GitLab