From f1b52869a9db4ebff4fb623e1502216fd01aa624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A4=A9=E5=AF=92?= Date: Tue, 29 Jul 2025 17:55:55 +0800 Subject: [PATCH] integrate AWS Bedrock API (#8383) * feat(AWS Bedrock): integrate AWS Bedrock API client and configuration * feat(AWS Bedrock): add AWS Bedrock settings management and UI integration * refactor(AWS Bedrock): refactor AWS Bedrock API client and settings management with vertexai * fix: lint error * refactor: update aws bedrock placeholder * refactor(i18n):update i18n content with aws bedrock * feat(AwsBedrockAPIClient): enhance message handling, add image support * fix: code review suggestion * feat(test): add aws bedrock utils unit test * feat(AwsBedrockAPIClient): enhance getEmbeddingDimensions method to support dynamic model dimension retrieval * fix(AwsBedrockAPIClient): Modify the processing logic when the embedded dimension cannot be parsed, throw an error instead of returning the default value * chore(package): Reorganize AWS SDK dependencies in package.json --- package.json | 1 + .../src/aiCore/clients/ApiClientFactory.ts | 4 + .../aiCore/clients/aws/AwsBedrockAPIClient.ts | 620 ++++++++++++++++++ .../core/StreamAdapterMiddleware.ts | 2 +- .../assets/images/providers/aws-bedrock.png | Bin 0 -> 186803 bytes src/renderer/src/config/models.ts | 3 +- src/renderer/src/config/providers.ts | 15 +- src/renderer/src/hooks/useAwsBedrock.ts | 31 + src/renderer/src/i18n/label.ts | 1 + src/renderer/src/i18n/locales/en-us.json | 11 + src/renderer/src/i18n/locales/ja-jp.json | 11 + src/renderer/src/i18n/locales/ru-ru.json | 11 + src/renderer/src/i18n/locales/zh-cn.json | 11 + src/renderer/src/i18n/locales/zh-tw.json | 11 + .../ProviderSettings/AwsBedrockSettings.tsx | 74 +++ .../ProviderSettings/ProviderSetting.tsx | 4 +- src/renderer/src/store/llm.ts | 32 + src/renderer/src/store/migrate.ts | 7 + src/renderer/src/types/index.ts | 1 + src/renderer/src/types/sdk.ts | 149 ++++- .../utils/__tests__/aws-bedrock-utils.test.ts | 226 +++++++ src/renderer/src/utils/aws-bedrock-utils.ts | 98 +++ src/renderer/src/utils/mcp-tools.ts | 162 ++++- yarn.lock | 557 ++++++++++++++++ 24 files changed, 2032 insertions(+), 10 deletions(-) create mode 100644 src/renderer/src/aiCore/clients/aws/AwsBedrockAPIClient.ts create mode 100644 src/renderer/src/assets/images/providers/aws-bedrock.png create mode 100644 src/renderer/src/hooks/useAwsBedrock.ts create mode 100644 src/renderer/src/pages/settings/ProviderSettings/AwsBedrockSettings.tsx create mode 100644 src/renderer/src/utils/__tests__/aws-bedrock-utils.test.ts create mode 100644 src/renderer/src/utils/aws-bedrock-utils.ts diff --git a/package.json b/package.json index cd8805fb8a..4cd6a85908 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "@ant-design/v5-patch-for-react-19": "^1.0.3", "@anthropic-ai/sdk": "^0.41.0", "@anthropic-ai/vertex-sdk": "patch:@anthropic-ai/vertex-sdk@npm%3A0.11.4#~/.yarn/patches/@anthropic-ai-vertex-sdk-npm-0.11.4-c19cb41edb.patch", + "@aws-sdk/client-bedrock-runtime": "^3.840.0", "@aws-sdk/client-s3": "^3.840.0", "@cherrystudio/embedjs": "^0.1.31", "@cherrystudio/embedjs-libsql": "^0.1.31", diff --git a/src/renderer/src/aiCore/clients/ApiClientFactory.ts b/src/renderer/src/aiCore/clients/ApiClientFactory.ts index b92c6cb9f2..e708ab8c42 100644 --- a/src/renderer/src/aiCore/clients/ApiClientFactory.ts +++ b/src/renderer/src/aiCore/clients/ApiClientFactory.ts @@ -3,6 +3,7 @@ import { Provider } from '@renderer/types' import { AihubmixAPIClient } from './AihubmixAPIClient' import { AnthropicAPIClient } from './anthropic/AnthropicAPIClient' +import { AwsBedrockAPIClient } from './aws/AwsBedrockAPIClient' import { BaseApiClient } from './BaseApiClient' import { GeminiAPIClient } from './gemini/GeminiAPIClient' import { VertexAPIClient } from './gemini/VertexAPIClient' @@ -65,6 +66,9 @@ export class ApiClientFactory { case 'anthropic': instance = new AnthropicAPIClient(provider) as BaseApiClient break + case 'aws-bedrock': + instance = new AwsBedrockAPIClient(provider) as BaseApiClient + break default: logger.debug(`Using default OpenAIApiClient for provider: ${provider.id}`) instance = new OpenAIAPIClient(provider) as BaseApiClient diff --git a/src/renderer/src/aiCore/clients/aws/AwsBedrockAPIClient.ts b/src/renderer/src/aiCore/clients/aws/AwsBedrockAPIClient.ts new file mode 100644 index 0000000000..6117dffa18 --- /dev/null +++ b/src/renderer/src/aiCore/clients/aws/AwsBedrockAPIClient.ts @@ -0,0 +1,620 @@ +import { + BedrockRuntimeClient, + ConverseCommand, + ConverseStreamCommand, + InvokeModelCommand +} from '@aws-sdk/client-bedrock-runtime' +import { loggerService } from '@logger' +import { GenericChunk } from '@renderer/aiCore/middleware/schemas' +import { DEFAULT_MAX_TOKENS } from '@renderer/config/constant' +import { + getAwsBedrockAccessKeyId, + getAwsBedrockRegion, + getAwsBedrockSecretAccessKey +} from '@renderer/hooks/useAwsBedrock' +import { estimateTextTokens } from '@renderer/services/TokenService' +import { + GenerateImageParams, + MCPCallToolResponse, + MCPTool, + MCPToolResponse, + Model, + Provider, + ToolCallResponse +} from '@renderer/types' +import { ChunkType, MCPToolCreatedChunk, TextDeltaChunk } from '@renderer/types/chunk' +import { Message } from '@renderer/types/newMessage' +import { + AwsBedrockSdkInstance, + AwsBedrockSdkMessageParam, + AwsBedrockSdkParams, + AwsBedrockSdkRawChunk, + AwsBedrockSdkRawOutput, + AwsBedrockSdkTool, + AwsBedrockSdkToolCall, + SdkModel +} from '@renderer/types/sdk' +import { convertBase64ImageToAwsBedrockFormat } from '@renderer/utils/aws-bedrock-utils' +import { + awsBedrockToolUseToMcpTool, + isEnabledToolUse, + mcpToolCallResponseToAwsBedrockMessage, + mcpToolsToAwsBedrockTools +} from '@renderer/utils/mcp-tools' +import { findImageBlocks } from '@renderer/utils/messageUtils/find' + +import { BaseApiClient } from '../BaseApiClient' +import { RequestTransformer, ResponseChunkTransformer } from '../types' + +const logger = loggerService.withContext('AwsBedrockAPIClient') + +export class AwsBedrockAPIClient extends BaseApiClient< + AwsBedrockSdkInstance, + AwsBedrockSdkParams, + AwsBedrockSdkRawOutput, + AwsBedrockSdkRawChunk, + AwsBedrockSdkMessageParam, + AwsBedrockSdkToolCall, + AwsBedrockSdkTool +> { + constructor(provider: Provider) { + super(provider) + } + + async getSdkInstance(): Promise { + if (this.sdkInstance) { + return this.sdkInstance + } + + const region = getAwsBedrockRegion() + const accessKeyId = getAwsBedrockAccessKeyId() + const secretAccessKey = getAwsBedrockSecretAccessKey() + + if (!region) { + throw new Error('AWS region is required. Please configure AWS-Region in extra headers.') + } + + if (!accessKeyId || !secretAccessKey) { + throw new Error('AWS credentials are required. Please configure AWS-Access-Key-ID and AWS-Secret-Access-Key.') + } + + const client = new BedrockRuntimeClient({ + region, + credentials: { + accessKeyId, + secretAccessKey + } + }) + + this.sdkInstance = { client, region } + return this.sdkInstance + } + + override async createCompletions(payload: AwsBedrockSdkParams): Promise { + const sdk = await this.getSdkInstance() + + // 转换消息格式到AWS SDK原生格式 + const awsMessages = payload.messages.map((msg) => ({ + role: msg.role, + content: msg.content.map((content) => { + if (content.text) { + return { text: content.text } + } + if (content.image) { + return { + image: { + format: content.image.format, + source: content.image.source + } + } + } + if (content.toolResult) { + return { + toolResult: { + toolUseId: content.toolResult.toolUseId, + content: content.toolResult.content, + status: content.toolResult.status + } + } + } + if (content.toolUse) { + return { + toolUse: { + toolUseId: content.toolUse.toolUseId, + name: content.toolUse.name, + input: content.toolUse.input + } + } + } + // 返回符合AWS SDK ContentBlock类型的对象 + return { text: 'Unknown content type' } + }) + })) + + const commonParams = { + modelId: payload.modelId, + messages: awsMessages as any, + system: payload.system ? [{ text: payload.system }] : undefined, + inferenceConfig: { + maxTokens: payload.maxTokens || DEFAULT_MAX_TOKENS, + temperature: payload.temperature || 0.7, + topP: payload.topP || 1 + }, + toolConfig: + payload.tools && payload.tools.length > 0 + ? { + tools: payload.tools + } + : undefined + } + + try { + if (payload.stream) { + const command = new ConverseStreamCommand(commonParams) + const response = await sdk.client.send(command) + // 直接返回AWS Bedrock流式响应的异步迭代器 + return this.createStreamIterator(response) + } else { + const command = new ConverseCommand(commonParams) + const response = await sdk.client.send(command) + return { output: response } + } + } catch (error) { + logger.error('Failed to create completions with AWS Bedrock:', error as Error) + throw error + } + } + + private async *createStreamIterator(response: any): AsyncIterable { + try { + if (response.stream) { + for await (const chunk of response.stream) { + logger.debug('AWS Bedrock chunk received:', chunk) + + // AWS Bedrock的流式响应格式转换为标准格式 + if (chunk.contentBlockDelta?.delta?.text) { + yield { + contentBlockDelta: { + delta: { text: chunk.contentBlockDelta.delta.text } + } + } + } + + if (chunk.messageStart) { + yield { messageStart: chunk.messageStart } + } + + if (chunk.messageStop) { + yield { messageStop: chunk.messageStop } + } + + if (chunk.metadata) { + yield { metadata: chunk.metadata } + } + } + } + } catch (error) { + logger.error('Error in AWS Bedrock stream iterator:', error as Error) + throw error + } + } + + // @ts-ignore sdk未提供 + // eslint-disable-next-line @typescript-eslint/no-unused-vars + override async generateImage(_generateImageParams: GenerateImageParams): Promise { + return [] + } + + override async getEmbeddingDimensions(model?: Model): Promise { + if (!model) { + throw new Error('Model is required for AWS Bedrock embedding dimensions.') + } + + const sdk = await this.getSdkInstance() + + // AWS Bedrock 支持的嵌入模型及其维度 + const embeddingModels: Record = { + 'cohere.embed-english-v3': 1024, + 'cohere.embed-multilingual-v3': 1024, + // Amazon Titan embeddings + 'amazon.titan-embed-text-v1': 1536, + 'amazon.titan-embed-text-v2:0': 1024 + // 可以根据需要添加更多模型 + } + + // 如果是已知的嵌入模型,直接返回维度 + if (embeddingModels[model.id]) { + return embeddingModels[model.id] + } + + // 对于未知模型,尝试实际调用API获取维度 + try { + let requestBody: any + + if (model.id.startsWith('cohere.embed')) { + // Cohere Embed API 格式 + requestBody = { + texts: ['test'], + input_type: 'search_document', + embedding_types: ['float'] + } + } else if (model.id.startsWith('amazon.titan-embed')) { + // Amazon Titan Embed API 格式 + requestBody = { + inputText: 'test' + } + } else { + // 通用格式,大多数嵌入模型都支持 + requestBody = { + inputText: 'test' + } + } + + const command = new InvokeModelCommand({ + modelId: model.id, + body: JSON.stringify(requestBody), + contentType: 'application/json', + accept: 'application/json' + }) + + const response = await sdk.client.send(command) + const responseBody = JSON.parse(new TextDecoder().decode(response.body)) + + // 解析响应获取嵌入维度 + if (responseBody.embeddings && responseBody.embeddings.length > 0) { + // Cohere 格式 + if (responseBody.embeddings[0].values) { + return responseBody.embeddings[0].values.length + } + // 其他可能的格式 + if (Array.isArray(responseBody.embeddings[0])) { + return responseBody.embeddings[0].length + } + } + + if (responseBody.embedding && Array.isArray(responseBody.embedding)) { + // Amazon Titan 格式 + return responseBody.embedding.length + } + + // 如果无法解析,则抛出错误 + throw new Error(`Unable to determine embedding dimensions for model ${model.id}`) + } catch (error) { + logger.error('Failed to get embedding dimensions from AWS Bedrock:', error as Error) + + // 根据模型名称推测维度 + if (model.id.includes('titan')) { + return 1536 // Amazon Titan 默认维度 + } + if (model.id.includes('cohere')) { + return 1024 // Cohere 默认维度 + } + + throw new Error(`Unable to determine embedding dimensions for model ${model.id}: ${(error as Error).message}`) + } + } + + // @ts-ignore sdk未提供 + override async listModels(): Promise { + return [] + } + + public async convertMessageToSdkParam(message: Message): Promise { + const content = await this.getMessageContent(message) + const parts: Array<{ + text?: string + image?: { + format: 'png' | 'jpeg' | 'gif' | 'webp' + source: { + bytes?: Uint8Array + s3Location?: { + uri: string + bucketOwner?: string + } + } + } + }> = [] + + // 添加文本内容 - 只在有非空内容时添加 + if (content && content.trim()) { + parts.push({ text: content }) + } + + // 处理图片内容 + const imageBlocks = findImageBlocks(message) + for (const imageBlock of imageBlocks) { + if (imageBlock.file) { + try { + const image = await window.api.file.base64Image(imageBlock.file.id + imageBlock.file.ext) + const mimeType = image.mime || 'image/png' + const base64Data = image.base64 + + const awsImage = convertBase64ImageToAwsBedrockFormat(base64Data, mimeType) + if (awsImage) { + parts.push({ image: awsImage }) + } else { + // 不支持的格式,转换为文本描述 + parts.push({ text: `[Image: ${mimeType}]` }) + } + } catch (error) { + logger.error('Error processing image:', error as Error) + parts.push({ text: '[Image processing failed]' }) + } + } else if (imageBlock.url && imageBlock.url.startsWith('data:')) { + try { + // 处理base64图片URL + const matches = imageBlock.url.match(/^data:(.+);base64,(.*)$/) + if (matches && matches.length === 3) { + const mimeType = matches[1] + const base64Data = matches[2] + + const awsImage = convertBase64ImageToAwsBedrockFormat(base64Data, mimeType) + if (awsImage) { + parts.push({ image: awsImage }) + } else { + parts.push({ text: `[Image: ${mimeType}]` }) + } + } + } catch (error) { + logger.error('Error processing base64 image:', error as Error) + parts.push({ text: '[Image processing failed]' }) + } + } + } + + // 如果没有任何内容,添加默认文本而不是空文本 + if (parts.length === 0) { + parts.push({ text: 'No content provided' }) + } + + return { + role: message.role === 'system' ? 'user' : message.role, + content: parts + } + } + + getRequestTransformer(): RequestTransformer { + return { + transform: async ( + coreRequest, + assistant, + model, + isRecursiveCall, + recursiveSdkMessages + ): Promise<{ + payload: AwsBedrockSdkParams + messages: AwsBedrockSdkMessageParam[] + metadata: Record + }> => { + const { messages, mcpTools, maxTokens, streamOutput } = coreRequest + // 1. 处理系统消息 + const systemPrompt = assistant.prompt + // 2. 设置工具 + const { tools } = this.setupToolsConfig({ + mcpTools: mcpTools, + model, + enableToolUse: isEnabledToolUse(assistant) + }) + + // 3. 处理消息 + const sdkMessages: AwsBedrockSdkMessageParam[] = [] + if (typeof messages === 'string') { + sdkMessages.push({ role: 'user', content: [{ text: messages }] }) + } else { + for (const message of messages) { + sdkMessages.push(await this.convertMessageToSdkParam(message)) + } + } + + const payload: AwsBedrockSdkParams = { + modelId: model.id, + messages: + isRecursiveCall && recursiveSdkMessages && recursiveSdkMessages.length > 0 + ? recursiveSdkMessages + : sdkMessages, + system: systemPrompt, + maxTokens: maxTokens || DEFAULT_MAX_TOKENS, + temperature: this.getTemperature(assistant, model), + topP: this.getTopP(assistant, model), + stream: streamOutput !== false, + tools: tools.length > 0 ? tools : undefined + } + + const timeout = this.getTimeout(model) + return { payload, messages: sdkMessages, metadata: { timeout } } + } + } + } + + getResponseChunkTransformer(): ResponseChunkTransformer { + return () => { + let hasStartedText = false + let accumulatedJson = '' + const toolCalls: Record = {} + + return { + async transform(rawChunk: AwsBedrockSdkRawChunk, controller: TransformStreamDefaultController) { + logger.silly('Processing AWS Bedrock chunk:', rawChunk) + + // 处理消息开始事件 + if (rawChunk.messageStart) { + controller.enqueue({ + type: ChunkType.TEXT_START + }) + hasStartedText = true + logger.debug('Message started') + } + + // 处理内容块开始事件 - 参考 Anthropic 的 content_block_start 处理 + if (rawChunk.contentBlockStart?.start?.toolUse) { + const toolUse = rawChunk.contentBlockStart.start.toolUse + const blockIndex = rawChunk.contentBlockStart.contentBlockIndex || 0 + toolCalls[blockIndex] = { + id: toolUse.toolUseId, // 设置 id 字段与 toolUseId 相同 + name: toolUse.name, + toolUseId: toolUse.toolUseId, + input: {} + } + logger.debug('Tool use started:', toolUse) + } + + // 处理内容块增量事件 - 参考 Anthropic 的 content_block_delta 处理 + if (rawChunk.contentBlockDelta?.delta?.toolUse?.input) { + const inputDelta = rawChunk.contentBlockDelta.delta.toolUse.input + accumulatedJson += inputDelta + } + + // 处理文本增量 + if (rawChunk.contentBlockDelta?.delta?.text) { + if (!hasStartedText) { + controller.enqueue({ + type: ChunkType.TEXT_START + }) + hasStartedText = true + } + + controller.enqueue({ + type: ChunkType.TEXT_DELTA, + text: rawChunk.contentBlockDelta.delta.text + } as TextDeltaChunk) + } + + // 处理内容块停止事件 - 参考 Anthropic 的 content_block_stop 处理 + if (rawChunk.contentBlockStop) { + const blockIndex = rawChunk.contentBlockStop.contentBlockIndex || 0 + const toolCall = toolCalls[blockIndex] + if (toolCall && accumulatedJson) { + try { + toolCall.input = JSON.parse(accumulatedJson) + controller.enqueue({ + type: ChunkType.MCP_TOOL_CREATED, + tool_calls: [toolCall] + } as MCPToolCreatedChunk) + accumulatedJson = '' + } catch (error) { + logger.error('Error parsing tool call input:', error as Error) + } + } + } + + // 处理消息结束事件 + if (rawChunk.messageStop) { + // 从metadata中提取usage信息 + const usage = rawChunk.metadata?.usage || {} + + controller.enqueue({ + type: ChunkType.LLM_RESPONSE_COMPLETE, + response: { + usage: { + prompt_tokens: usage.inputTokens || 0, + completion_tokens: usage.outputTokens || 0, + total_tokens: (usage.inputTokens || 0) + (usage.outputTokens || 0) + } + } + }) + } + } + } + } + } + + public convertMcpToolsToSdkTools(mcpTools: MCPTool[]): AwsBedrockSdkTool[] { + return mcpToolsToAwsBedrockTools(mcpTools) + } + + convertSdkToolCallToMcp(toolCall: AwsBedrockSdkToolCall, mcpTools: MCPTool[]): MCPTool | undefined { + return awsBedrockToolUseToMcpTool(mcpTools, toolCall) + } + + convertSdkToolCallToMcpToolResponse(toolCall: AwsBedrockSdkToolCall, mcpTool: MCPTool): ToolCallResponse { + return { + id: toolCall.id, + tool: mcpTool, + arguments: toolCall.input || {}, + status: 'pending', + toolCallId: toolCall.id + } + } + + override buildSdkMessages( + currentReqMessages: AwsBedrockSdkMessageParam[], + output: AwsBedrockSdkRawOutput | string | undefined, + toolResults: AwsBedrockSdkMessageParam[] + ): AwsBedrockSdkMessageParam[] { + const messages: AwsBedrockSdkMessageParam[] = [...currentReqMessages] + + if (typeof output === 'string') { + messages.push({ + role: 'assistant', + content: [{ text: output }] + }) + } + + if (toolResults.length > 0) { + messages.push(...toolResults) + } + + return messages + } + + override estimateMessageTokens(message: AwsBedrockSdkMessageParam): number { + if (typeof message.content === 'string') { + return estimateTextTokens(message.content) + } + const content = message.content + if (Array.isArray(content)) { + return content.reduce((total, item) => { + if (item.text) { + return total + estimateTextTokens(item.text) + } + return total + }, 0) + } + return 0 + } + + public convertMcpToolResponseToSdkMessageParam( + mcpToolResponse: MCPToolResponse, + resp: MCPCallToolResponse, + model: Model + ): AwsBedrockSdkMessageParam | undefined { + if ('toolUseId' in mcpToolResponse && mcpToolResponse.toolUseId) { + // 使用专用的转换函数处理 toolUseId 情况 + return mcpToolCallResponseToAwsBedrockMessage(mcpToolResponse, resp, model) + } else if ('toolCallId' in mcpToolResponse && mcpToolResponse.toolCallId) { + return { + role: 'user', + content: [ + { + toolResult: { + toolUseId: mcpToolResponse.toolCallId, + content: resp.content + .map((item) => { + if (item.type === 'text') { + // 确保文本不为空,如果为空则提供默认文本 + return { text: item.text && item.text.trim() ? item.text : 'No text content' } + } + if (item.type === 'image' && item.data) { + const awsImage = convertBase64ImageToAwsBedrockFormat(item.data, item.mimeType) + if (awsImage) { + return { image: awsImage } + } else { + // 如果转换失败,返回描述性文本 + return { text: `[Image: ${item.mimeType || 'unknown format'}]` } + } + } + return { text: JSON.stringify(item) } + }) + .filter((content) => content !== null) + } + } + ] + } + } + return undefined + } + + extractMessagesFromSdkPayload(sdkPayload: AwsBedrockSdkParams): AwsBedrockSdkMessageParam[] { + return sdkPayload.messages || [] + } +} diff --git a/src/renderer/src/aiCore/middleware/core/StreamAdapterMiddleware.ts b/src/renderer/src/aiCore/middleware/core/StreamAdapterMiddleware.ts index 893f891c06..8bb5266319 100644 --- a/src/renderer/src/aiCore/middleware/core/StreamAdapterMiddleware.ts +++ b/src/renderer/src/aiCore/middleware/core/StreamAdapterMiddleware.ts @@ -45,7 +45,7 @@ export const StreamAdapterMiddleware: CompletionsMiddleware = } else if (result.rawOutput) { // 非流式输出,强行变为可读流 const whatwgReadableStream: ReadableStream = createSingleChunkReadableStream( - result.rawOutput + result.rawOutput as SdkRawChunk ) return { ...result, diff --git a/src/renderer/src/assets/images/providers/aws-bedrock.png b/src/renderer/src/assets/images/providers/aws-bedrock.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe184d76c648c6df41c91ccac29662c48bc9a70 GIT binary patch literal 186803 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�ZuBi@+UN{FdW|Z~yP+ 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

_pn4uCm0rD5Q7+skY%hHOE--Zoddon;^lLwFN= zxlFN4y&@uyw8{ZeVWN}EJSTH*zzKRVf3^A(M3DD`{gv&oJFE!3Vnw3UcnR-(XHl$G zLepFf->zv>y5ep-8BT(Dhi4Ocigi|w%jk`He7F@i#Q*2g!|LZZuelNXFfPe`XPKZqbHDNI@Dm{a=+uhvhyR4wOEWHoo6(h}V;vIq&MEMfi+PT`_KJ;sbZs3v@@ zJ8%(Bh0rf4_xlavsLo3D4Z^={skzAXN})^Wc)MIZKpF0zQH}96S0;H+nB@uMJM5Ob zE_+Z&!rw(fGrm<*q73L7+@KBQ`MjdYG3vZvSx4sLATWaG#liB-DfOdlPs2TO;JJO~ zD*7Gcr#&gSy3Rf3GSoZ6ty8|vN|FI(7zv=@EI7y*vCQw~+p*bWEOS{A68JZ0B!cqT zyBd1MS`vgRs2gMZFpkBuqMWtv!08Gs@T)Vkto|0OKi<2~9dWm-ucjBOdy`z3!B)f- z;tR%-QjPcuCNzbPX+zUcf$*_(COQMufjmj*Ca8<~9m=}~q2qmE-#=FrJZpJ6Sr#z#%^Vno;`2-Y4+djv-#Z<^rL>(AnD4Z z?I!Ho-(3M?+9@uB!*s{+tAx$AZ2Q-#3{1>8{o=LLIKAC1!v3boBm0kV5N{~U;x>)$ zzJu#;e;5L#{&}3;H8so+i)kNp+g8G72X2sr&=$x2*&u`CqD);GPuAQqHOv@h0fO(l zt2dE{;_fe0kZkcjg0NU8P47eWWanWLgp8%w>gL@(ypnmuB9KJo3`?Y3V#_Yz$HGyL znuOOiZiv4#KVAKC@m}@cIj#2xAse)VM(SPecie>_ zQpcQ!XWFNZ2P8FeJ|hGmgtBE$(Nbqjd=&ib5O6Y)I(2f%(+J6~_B-vS>~@(GrktO! z=eM3MgLh}WCqhhPi#zyCQ&z7NtXpjDgVw~X*vy{*+n86nXa)fdFP5EBi8>Tty- za0@vgkd#}Jiy*f}^f)O8aC80&I)QFi-`;yreYJ4Cx^-!qt+4TGh9pIf!rVt#_cQuw zXo8N3+T}MNfh76%IJ^jP69UJruGegNy+p^;BRD_*c!}am?gm@tRM0Zp9$SPdD_u^e zQ5T74PoPK$6>ek6&Nf#-T#jQQkP2**!08m~0xYH}p`LgrIGQE9lT#NSgf+O6c!H-L z(ex6YZTI6@WbAymL!ZWeo_NMNPrRP;SeZ;F`Y7MH#bjH1r0k6FFt|M3^6p9NGy8NQ zwnqydFy4097TQ9k$GVp~bAok#LYYM`_*F)z1AtONKdm6fg-p~H*h~@r=G0iVGk>G{ z6I<2WrptEm>JBnUa@7f#Ti(Vir$0+Ny}uzOT{}(@7Ez!eSY}|!Phz)EUYmjNLQDJ~ z$?F^Pyo-F2#GQVYsa4G0ozrTHl-07lY8+N;?07w`is&35DI;XGjA~2S zgudJM_`uD{RU+pA2Vw3iBsfF3xiu%(Ax{cn?eu}XG*q{KrduYc32`y)YE3?dDNyU} z>*Wd%;6b)isQdRcABR|~2QyczfBy0tuEe+il|X904I6x+TAbl_csW3qxEl6 zB5dW1ved%7-6pz=B*XN)bB?3Aqn-A!>=1c}z{{+bfAaEMHis@!wXqQR%PixvW`H-A@Ay(1~p-BJ~7pQ{xd|y?_lv8wf z#%HQ~Jl}AogNXH;8@H8PZuB>|4geBuI<&b8{Nn4Rk@Z) zxVsR_W8kgepWN!n#!348HnKe{DE)jrzfs+1%lQzQAJu;}6IWeRUdl?g!L3gaA-v}q z4{C4UUOeIg>Gf)hu**AZ)e0P!ZINo(GY*-%(!XsppE`YP5?Wr76SxsCVYL9~_bTJ< z2IK$6+$39Kx8Vrgs=k=LjvtpLleCMd&X6;mFs*d!e9TR*tdCpqZyT0{Ifo z&z}*5{+F8%I1P3KHaJ|MsVTHZyA4(d8=+KW7fSlBU2{^-)C!CC$V3!9Rh~=~HiZj@1!Md)_5n?Y6VxuJ?ya!e2em^nON1MmJmJ!%e@`PfGQ4aSY{C`j=^1ySAyndk9*` zf7_JtO~1sQUEhHfFT(Ss{oC;`+TQL*rme8FTTk}aZ3y|7sC-!76gTm)mN;RQ-tN-prNi|N8pR)$Fw!)emo;ahQN{w7yYoa@~ygdWBjH zge2wul(FDeU5OlU$1ik*0X*R|&p2B|82W37pMSc2ulgsp#lD`u&ek|r9wET#BI>e~ zkV#MuQB6sWZ_6DY$a|U}PO1s;?NvChsq-qtkT_tBlf0@rIG~J&5MS9gc#X^jKmbCB zmT8&y^qk&~+49EPX~u5n(bp$|fLj`jhZv+q%~*G~woX3!wC!CX`*_4{)^&FXZWBwa zoZJTY2@}#}KkAck3DEk@I4!47WKE*SW2mAXw;knlXgmgAIBnSRo(18|vmJIF7PohU zJy^WOX)yExK?r%RN$4pdoRvMw`$ZAF+QqP`%E zjG=N&xmMO`KZ*>)yYo|spD0bZ+5X81DuFD$rU^5+Z6Ts#w`N({ju(+3D-CBxg5>SC*{;^Rk^iof$8jH z`UOZSrg7Tf72dHGOJMZ##rTdf-c_B5Ma+IizplXj0-f6}#-|h-M(*V{gopaDUceby zMZkHH4j>^kL8a^mVX`>9i?#d;2Z6z2JuAJ*>AOmv4~O3QdZq;KTmPKt?sM*id%-n0dn|x7a_BEX2nCY* zh;1k6+@k;hKmbWZK~xZ#{bD}}k8IrDf^-1a>rsFA#_tW^>tCXchdu;XkhT>c}q;S7h|Fgiyux*(fSMjlzAADekPC;xUH(SI<1Q74qEk1DT zG6txPRwqEy@SQ8jJ%;8ULs_|)ex|8M+rMq^7fb){Fvr`w+duO;9yEjT_8SULVl1b6*rbsu8r_Viq}$em%H z8k3}vrP@Juq~%{hy}m;Y9HGh? zlW2_PFMbL4e7CnsoA3p1lrVMN?q+NUJ(FE}u5CgF1P8ZB?3#K@^z4(ZbyKB4A%+S( z^=lj3%Qy)({cNN1j@Jo4#_lyGerfw&KflvIc zZuJd{7GF-!S4-Tz_k=OFvMJ6ZON5g*IVHLWtX)8ORmtr5RCRNXt#NR{?JHN23!JTP z&Mfd;t!|RW4Ytm&AtQJdB1m}32_sz z4PjPJv=N#1iUqOh{07Y+{8Fk~aN4kHcgJsll=!ReDJ0SK%X(`J4V<-O=&Bi(%gFDO zLm(&g$hc{{W96{P6D8`|bb(gT9!Eb#u*M57($7_+iVcq#fMV3Rj4=ZAB+yBEkb5UU zkL9f4d!nEDla*u;K@9+t;B%6g}K`dod?wyoCdoI(!8Q# zMZ!C%gjv9?u1eNOVo20hCRg(-8$bc!AYjW76xjpakO2yoIEih8fY%X(e#40{37((1 z6YSq!J_%W%m&i7(a+0J1Depq`T=JN)1?ZSkf`Tw{B+Wjzd@)2o`d;+t;t;2KM@xcxGTKO-kJ%+u^!>9HYW?j{bKIuErI%V?t{*X*FHI zbTgms_;ocqjuJuk|7fRUQ3jQ-6a5sHOygMML*qJ$9g1%ls}dy2wjII=dX8}OL*(K@ zEB4eC;D9b9{4KvZNYDw0B$_jK;TA&1hT+lO3uR`2Xo^- zaD&i3%~d3CJ+Z}!15dJzgBRu?bQaMQb`P9z=gRf!hTI^p%;9n27{rQgai67if-lKvpV3Gzrmd9_#p#`LK)#+^U zYeMK;IgKKHWC$cD!~v4V28+qh**ixOZb7`%f$Rbea;zPBW$=DoB;pW2#4*U^;)VP0JOFMs$aj@sUJvRYM93o~04CG3$J#fmj3Gjll63Wel*t7%g{*#v>jH7V6#LyA5lsARTv3dmp z{+YYpentl9r&lkkXWsj^%eDZk;q_?Yr6G*r+emIWPr%uiq$6l^7}&G)HPto#3bCD+;^A(H<+xRZM>=e{`hhAlC6Y& z+Ufv8(Fye(1d(vIMKsFCXbVAjT^&c5UWf62RhZ0o$*vJp=mM7Lm=Iju#|Jgp-53@g;5`E*mKphmX)zW7#>nO$< zAy5!n1M`l}=4myN_@edMm5XsY@oFC@k20}J8uj{iMgIsNgG$<+Rl8%iJ9T%c_7}tt z1dtpPbpbgU&T|LTHEyVu6LgbR;kUQ$RR8P#*VP{u@3K;a_+gbe29`2?5uMy1NsQzm z2-kp)KNdTPA>LthEZbqeos4{(0AeD?SDAoKknMV{6X+>&0Y7pq{wFR;{TY2HOPmJV zCbNCE!uGuYmxpfQ%RYMWhRXuARZsF#jy*VyhF_iMCE+mQ5Ee3d@M=|3rGF|M*-IXUXMLO z(dPO~TF`~}m-NxfGTTmL)dRMnuEK$t zLRM!CIlefRMVMH`HOWLge=Y%2<@v(if`wb#(~NJg6!Lz++bn|YQ?{~V0XvW;`w-gp zHzCbE_B@;f!{6;TpGn%$w?vk(?2Np2Inr)jwDa~Q@nc@Tm4$l4VrL1i?;{pKk5^t- zZ-N_@_?Jkr*G4`p*vjJA1V`p95Xd>BH%?6m*(}*w1{nt6cDUZ;@_ShP3^VvW46z#P zbd%oT^glPB-uj$W|BEVrLF?Tu-%i`T`2Cpi`?u$L%h_AscAl1|;cOJ2w5^JG8=yFf+BS)Q)Ri+_DrAHZmIKWf|&^pUnGR2z^)sh!XUk*T79^c; zH^p+dlQw10KGX<)^RQf&{fM^OW#U{xFU<2j2uEZ~_n1Epm^j`AS4jBy*ml@xN2^*6 z2UsAX+cy0R>4Ykr1i&ay)v!dchi5{@TPA=?0e^(oR46xLHKX&vSirWtDexd z-%rhluC5uhxR1jY@~}d1nJl+S)y)~;jk*A9-mPk3cPt0g!b4c+AtUfvwE(unJ&s?T0K4CqLLq_b2ey$>CaUGo`_pe-o z2vQU5o$600LUU_ujx^lspCq1fMS8K?Y$u9)BDD_v5M?RI^}Pbo6ihfLW`+cdE?*;#0mG(0=mU;tiz_A&yEQk zVL3?5qw*3!9?MrZ&^C*+B~FF@K)rr|8}xdcJJD$CL%7wU@R4v%)W*@oBB)qLzZV37 znh?s=qDk{(^!}Yfz|~4;^nYeBC|sR_n(Vx;*a|1Y39;K8N;qJg_#}k9CSx8V=r;O* zJPr0O9H4KmEmmK#%D%%Ya{CFFmUsywH^d{TsotP%h@UYthpTZ3*1hca z9k$TqP#r>K`TcQ>jo&ubpxXpd*6sAkzARm?$Sqm979=MYwliQM>>~_z2>jmhK5+F+ zq&!I?H%+;)vN~jfv7w@~AFroAX;LV?37B~B=1ZwwnW3d z$uGQHKN3Ov^gji`ReP}o5%l`~K8vCC>OY=7s{a1+S>ONZZ+s`47AOuPo;Hm5%BLj-+=M(D3^-L1ZWBXk@2pm}5s)T`p@Ni{@^ccQ1aySs!* znBv$VLLDK7#Hf_PP$EzD00q|qKefYdum!ftC6ceWHsJA_6$qi{)#KGy)e@JZDh#~~ zb+g6HsN9R`lu2G0ge*k+tz89h>1JM8KD;n;jY^T5FvaJjU&Ciw{o#Nn`@^cm` zkUwa7ADdz$8(a{?5K(OU$SGh|6E0EJlE34k*pAmf-Scf)?b2%3&nJnbd`G@`M3{D@ zI;{OKt}dcnJA_*14z(XPURD3~f_nm2U$a2ks`jQP=)Z7-z+=K9wys-gWnUzz->J!# z8D9NfLa|vWw}4qE0Zg+=+lltiC=>qJE5gjDU80fw<3XT*Yk#c#lmR*^?d+(&bM;=w zVX_-%l@zN-WeGqihoC)Iklq$Ad)y7F_Z&kXhiV#w#XJo{@kZ$Xe)p^Dk9Y1>-=G!x zE?l6i2wTb_ngN+A04e83IRJ|nCEz;~#q5%{$ZYssX6ysXx@j3Z@$wsH3) z*a78Rfe3oI_Of~i2k7DQi)v|Ool8@95s=&`91opdxWtiR>jWa4Hb4FkYQisMgRC=d zh3Fvy_B7=*SbizYX+iytpW35sFHZesgN}!*6NvoHxVIf8Qbjh2sH2>b43l`PoMoEI z)Xx4kNuQW>B04QY`f(x;i???lLPjbSA96UfODQXT0H|%Ocs9&-`dZ6h}WMHt7$47=hP6fl- z>hwhjq;dM-9}x01{l_rf;R*pzhzx5S`f?zO#(0#;nUqMt{Sq4DX2BG*Y<1m07}fy|QHx;0S7Rt; z3LJpS0j)udt#aCB4gEIHS;2n4@}hdk^CQI2E8KRJ{Q>B5F5DV%vMyUBSi<-wRcF93 zO$+7ZPrpq zvQA&l%^r5QIg@kdX}jJP_8GE_bc%3(Q;A0C_be%$Cu~mUh3nXq;5=#l(s8oG^wz>} z+o+6h?MdK!!cyZ_(Gm-Yb+{*S;Nj}EaNk9_;a!xSsx5jBTwv%JF(q1rX+}_dmO-0E z$v5F!QNk_})OM?5hg;h{lBm^ftuLI&xmi=qP%IY~X(_J*obS?XVxw z7Z#i#aDodc388UTW}Jz`mZn3Bfr?1D&L@3;U+?o)zTH|4#B%Z0xQuMSG64BTVClRP3X&!gETWdFxE&JYARz?#aha_HIS=EUuDJ#g^u@wr_1%p-+yo8rvv8wY zob_(7X)a0RL>Pop9EB&mt1C@H()3NSpwiy5GyzMgB5EhHsLB=H24#B5Jzy$C{M(bC ztH%&OFOdUU;WXGP$70tel>u^VFNvRmEbG)lc140JjuEG0{XTi(wI)6v*Ca7kG*y4x zydrf0URNt?SV)5IybCc|-0Tl2WU7lqP!MOhALmSTr_=AtHYsvKwoM7)q^;@CSu1}2 zCI>Cy*7%HU0UsxK#+^nOL;2W{sz5!80i@O7!;GyP4&{9}Pb{`Nry z`rmL!;`zRU(J!lid-PNFBf`-yQIWBa9H8~w4+5ufy0f!4I6$I^?eJKTMRxpTj`=-$ zp9Fz^<8MR=odmVd+P^&nFSelG4qk2u|9E-yFR=rA@ZeU*s%L8D1_kLLw}kDlc~(vf z^ycdzz?(BO)m`rV`O4E^2t@xCLg+SHqSg7~7Fe*(c_$0oltgxEGWT-ri~^L!MV5Lg zTY*U;NZ%qoSA1_-smkqn0m1VW1os2_fd2FOV*4o7|8_K)wj|{LhF-nf zuXee5W{-u3LgYu@)DAJU$6bIbJycJSr_ekBD)&gvO!8Pd@H1OJO76|u7IFBcyWeR# zanqsoHoWm1qi%z_FxrAUyupX{_<({AFrNPkJs1YWY`vUv21dJO8I(o z@Y|H_lY>fy*T|d;0>f~@xe^>j`t?J=)lA>f|H-S?je^D{fGk+OSMKIi2t%_Zze<_! zaFq5Nbc_7u-dAvfZdLbTmES=?`qs3k!60WKn$!UVGo~yqi4#c6cWp0K)U|o=im9}4 ziOf~MavWF0#X|=Q#YozxWx2h|3`az5I5gdhvFR(=G?q0ViE{Ve3m^NjUjv zVnXFz2q4HildnyN@w0FuC=KOrPZr%ok){3Zn|A9Id$y87&=8C6NARClj0i80o%d?J z_w*I^a{X-sE89{N*9{pz+BuxMehLxJmJLCYJ7j=e`(+U5UBUUVgl%KmKBqTR2ul|| zR)sKcxRqy1=kz&#P9aMji~c6c6)?6z#~63`LFhc^ZmxqDkE)H`O*BI9Ro}h8Q{7`R zw1~!NuSdSbR@r67zg%FqwL24E3w+s1*@S@yd%zIE2`D+zL@hCk5PONBi{y%g&=w(I z!3BP@^Cqs!`S&LetA`wxSmm_X-pqKlwZ|Jm?hqMA)AU%qWt^a&YMMUQ$O(nV=;y*9 z(CH5smf|R(PYQvUz?%{IL3ulH2OBfFpo|7*Qu~-sqNNO6xIl4Y2c#j<;GIE>+{1Ho zfqTI?{(ct~`QO3?`s@9#P?ER^5}c~8f&{0)Y-3Ot?_zQ*M35+^1G`qW`oSQ=622)_ zA%$F-ZiXDtezk&TV^4tm{N{D_?@NzDG1}|h?P`^~gS+kX0 zil1%glV*^;pMSaydzbWOI1OPs4NKrx?w9RU;OcgfTEjgg@fM=t07B#K)-D7ESC>K{ zZLtNlc5S!%0%GXS#B6ngLlFy?5HGer00~>MkQpa~C0jB}V2s{gP+F(BYu{tczlA%s z#`u2)m-rc+pr79^BOka_{S7(6r^q+GpPpoK#Qk9i2_Ax1?Vi6}pjQY(dpFoaw!nUPxl}!63+&~t$Km&@ zO`^LE_6`<3csn>!yAW|AI!}URy_4(X#9Qvb>YjvujY!YBeX4TXYou}W=}*8AsK+$2 zJ;kG3JYBeTx^y^nq+LwYGyHDiTLMormQZC|O}9a2nBU+y<(i1|#2u98ugg8pd?1_CqQ60d<)X92lNRk4f1a1(6$c>|8d>hC20DW6Y6^~odkjt(-lzI zJY1mbQCX$5);vh@XFEGcX9p2OICGD8z4Gl6n;kd@q70DpL6Nw=B1-5_Waoj zyX01wOE}}B46d;C&ABnknUqPi$YrGrLx%7>C-(@O9v}3!h8JPF)3Lphz`KalPm_iv z$WqiyzaqO+gIR(s2s4|ZCRY3|F!fYY8i=6ors=@F6Oo)0R&9u+%sJD@cTYm;eC~J2 z#|4l5__#^U$@bC@HG}G8x~ENjSQ@6&>!0bi-P0}K#G>-5g*f2tUp5mhxabBIUA^|*qC2HoBRx0<8YE#oXnt|dV=d&9ABno_t0*CXmTv}_P1TA z-~;hPu^+JD+CGB&3nyxmt8relMfVIMNKNsN;SxUwPb_ofUwvU7|MxQBU2zTZCFooj zjY&mO2)Az=lQ|0)`lr-eIz^zak2+c#hD}N%+h7Qcm*cFk8407#4K=a$1MTr728C)? zy2s;;TuuXl(x7q+OrCnm6}1CA zCaUOC<=!Cubdz?N0yD_j@!E@PWhd5El=n_>Z)%+yyLMvwLna=U5Jo; zDR^hHrl83|vb<+E=5aRD+s=6u-m;dbq}LlR+cb`w(@DEeyPT~Iy`kG}rk@}a#!gUe zlYLG%VJJEX zH{@c+G^c@$#E_iYRoxhqDq!^R!VeH5cdsmTPLAH<@Wee7F70zPL$A|_rO--&{AAI+kEPb#0=l|V?!KW%MZQl)0 z@qiOmHv;G_PIsJM-_iHSgFs9!b@Fm6oWKi0JX@X)lis1yJq4UCy|aYQj_w2`(bo`u zrC-S%anQRmx&nfj<)-QDa90+m=eQ7co}=*Bt3PoI_dnnLy1IAeDhSL~V&MRJIz%E! zq-JWuN3Kkm-U{>WgsSmnSWO^UTzo4B1hc)`VpaKOXRjQIKiaAOftvq+TSgl!Z0|T4 z%ifzT@goEtWjm?z-#Ua6L{pCp>am4At_IPqHift-1Yu}I?zm@&d}pM(u<3lJccyWs zNIii~lAdh`m``PzNu=C2x2qcQ=e3@y91aSFL8&n1pRXf<2yfuqI3s zuNQ8O&!@6k*8b%kR)V-in*g?#u&}+(WQfB&Wpfn*HteMw!%EX|C?GU#BPKI1-`!=R z>qj~S2c%OlQ_j@OyI-4hg4dSQgz1el>^rwchlTmQ`IT{CZ)i*qQZ#EUCK!uHwD%6& z)`ZXP@-mLg1{U)q0bQlXu_*Zz~h{ZjVcG-5%Skb~x6*30Gl{h29=Cj~j47 zSwt8QNAG#J}YvqUU%KxJ}ut0N}K4pq}iIp;E+u;-@} ztC9Sc`0-K4&lU)8-MhgcdS2`z2L$5$+so(G&+Bih=iVAGVkF!ykE>CMIN{_;mWHY# zu})6f+a^n(TVp>xteZIPR12BV?Q*eS<~u0wlXJ4|C4yWJpT{Hz&o*-!DaJZqMKyA zjvpLWvv7XgTAzgL{2u>F@X7)UtSe}!mJpiaTeSrTjQ3qQOFK0ov;_xfb!&?)@tu%C z+J)nz!o&kOjp|>s5A4Z_7C*pka$#8xNWf)2RaZJyptFH#6nY>8MugBn(EL6;hB00* z8UjfGl`9HbsdwYC5OkKLan*hc*7g7V;t$nd?mpl|*le{3!ny)dNg~KCG4Y+OYp+j` zkg-#%wOJFtiBsyg#7|f=Up`!Axq6dZ<-vhhAiW*apg3!nWg$?7s{Iy4x!hQPMT!)G7nH2~jl7<1Nd(aBjBHPVE+${YRo@`d~BO z3T69eH!|K4aoqlPdn~rbBz|z)<8Xwhz{czCw7sO(&69K`g5oa3R4Km3YALM_s zdn==p1CK%gfe|4z>IR=B1l*Tbe%P&yDcI9<+!uBQ_VtyT6O`Ja?ZAmra`@-_Sj7ma zUp~qyN(crQNCF3>wg&tA75n>7+3Wv)eYyI6bqO{2&p7e1S?zJm^$@mtbs0XCh?A|m zJndyE+)6unKxOX7N_RmHS^I>_1tt4gCu3dP1n6n&p0N6?D>o|K2SOk@biRXg3kC?q ztZ;19={1I+vu29LjYP{B0@me*TTcg;J`$n=5>ljb2musZmBIbx8$!s_Y%@sWACacV z+~xX+3k=t6wQ{Wv?sby*_UotSSMtO%GM@+nC*$o;RFF|NBM9_D;2j8O6V~&K<(Jh> z1R8JNx>H?38dBkKJFY7|r@ufOAfl8x5h-<<`ZH0CgpYQ)IHJH^R&bk;L~q#Je}ww` ze|`8pvOq7n6U>ufyVVLIH@OvhpD>qTkxQY87!{iI0?2X77Utae>)a7bzQ6Eqa{7L$ zV%WS&XdO4%5Bm8X4?S}EZ9*WnW9bSKBq5&&@#EMRm&5{wMUVv2evLQcG?*MChI$tv zRC5>)k?je&GYKI%!U#>v1ln^Ugqz3WldB_FJB`GV_@+#{jeGi=W*ihrhtd0!L7+tl z*)Yc&$C6}6Dy8ZlrudD1KMe#vW*ZFd2gB=j+R3K7>))?NN$07H`p@AYhNJ?w8Amhhg^dA zuP+`~57GbO7T7MrO8XEyJFNCphA6V~;BH9mlB)6u6RZ?9DtIhMgX8lT`mrpfJikx@ ze!*q@6`YD(F~`vZ{Q zkw}ts#<9n#l%Tv!QG@cuni5MQD1|kPe+kprk0Z(6an}yp-`=X^u>iyTjs-rKLobr= zv@0+gWQ>#H28B7Fd)Bw~*OG>A>E5K;KDAc-kB4bOpJW?S*^{FF>itXIdrv{0u38cf zhHS&W7nX#L zfH+@PI6Hv?=y%91n(i3;VDDKhnPySRYTS}QTlZ2Sxb!QgUEUlc`OYxi?_PLy`~KFy zdhyRi)E7c1Te|l>EcxGeLkxq=r}4|SGPkz<19GQHmC5NgrtQ<7WV%BXlI2*$-axHy zS5|&D?^oU4>=9?f6xf+6&YTT`i8AAZ?S#{7f9u2<>Z{KZsV6S zHVWa|-;w<%{3&^V!VEu)tlVj66TAHir5r}vIMJjMNZYX+k)9QfJ&Ct78re?)0pTai z6Yjn6EPgT8TH8veNVq3RKb$2-XvT5M3l$tfzIBmuTdU(xr=0ypLdl>>&`cw@7{;o& z`l?OAbK<)?;q>VHK1~=SHtF|GX5@G-2=vY)=SpN0>DL7T(SgIMpoNpl&Z;QJ-f0Kw z;Pi5p<6eE*b5$9uFbbr=v3_a*cExt+aa0iEn}hA@30q`0A%y;L?M8KVcAi_Mt7--$ zBgzZ3M?CA~H5tBTeoIif=f4jTWFD^}f*x+Hatripw!vPa0)Lge!O$%N0kp%l^gC#% zR?mzOa&Y*BU}Zq8tO~R21&SXI7qS?cGeV%>94TioiFt{kT6d+vC{oZ?b;9zDWQj5t2J4op6DCI$s@&@fuvwaUNMdLkNK9 zW0s?6zU_SZ{TY^aRHPmV6vWZvIP|kj@k4{OJadF!EK+JChaietImQVKS5W*Pz?Jb> zyw^``vPHJExnA8~pRJyt#{Mb_&nk!(+0v;*(bBpgQ~t+#`h9>>v(O2|X|Ppffu3>~ zm`V|U;A)JAua~Q*oCe#zjE)c%bq8#>9kSo=R#zY~;%h{Z4KghDb{$Hn(eG&>Al%v* z#yRg((kR((?e;uPxi2;hmF_Zah@?ll^@dIV(ffQ5NStQu!9-D+3p0mo3%}d;^dG%H zJp?Yc9cqqHCYtY3tyJ~hUcq;FkdIUSL{=Xs^--#y0|eyMDklw#eiFC=e~nI(zaaCpumnyyZ05>+1Vw zPpii(E7cO0r7ois@y)?*wFSRuk2rB+1U*4Tc)M)hO+b(-H8+Na$f2KKvzFY{vKUr(ZuV*6)M|7r3sp%cHfOCJRq=h)iLH zj-Q7sFRHo8scK;s)%er1)jYhPNdg*N#boo@FRH)4cv?MK zTW5O=Ke#?|Lp<_8UXB{VnX;37$iG}Z>>Xyw9U}38Cdbae03(k+5Re#dn_=ton1g;( zV9v^)RH>8v+YtOU+7k|zy>0(^b?KhZTKNR1ErXUU%Wob2t@{6JtQX%VEkfv51BFpR ze*+LmZje7Uuwnq^z;)~&nM9G9+g zsGS?<$AZ!AK@RT+dyU-BPcNQSPdE+sbp2KJa(km%b$g6^!**aDZLk$)UTT{ihtP^i z8NqDT@p}wk!fIrG838!lPtdyP=ONpas5{q}vZNza`02SrF( zppPpX)D$s}sPkE5g&OzM+6wMaH&EFIOAcHwXQ)kxi;skVaC(Pk)W!?_d+IOMe})!& z@dn8FFlt+5YZF|@~-`M1BDTu-)@ zvY#C8*Ae1PkRsXt{w>Qyefdm zw3}2im*YN7n8rpZA|z4e0z+lW730HeCEU76;zwe^zCTEixJmQ0HcOhN9Tw+wH5rz| zkY05xn)icA42hTAs%qNF6Nl~ZV^L3VIH|rT`Ja&dZ`ONI`wOqrn2dkA@Z&)x(+S*C zuzya}ouOY=Ie8Vo!5MUi>zC4Sx26*g4>$6?Xb9M*`SeSBm|r`5|GrV$6@4ChXFsi@ z#lAU&jwiILe(I{QVwjb|C``=u;uEN@baOFEHTJ7g<&j0M0191avaoQjNSQt7pM zqSCT)FMH(0*y5@fPgYKkqo|al;3^s&Z?!}y7sRb2%TmiY#hC3)zR!2c-V`r6yWN2r zPFQho{Cfg+M;rLnhOdE|cJ5BE&6RH2yfnb^Bk$QT;Gv$J%c;`FQEk#ijz~A~P2&}| zZcbOG+Y{(_{8`3VcU!f=F&sbI-o|amFEDQUMX!G$_9N0%9nk?XG9w5ytG4V9zSDjh z_?#|m(>Y6;soSI7k5f^hvOFSbFF$*_uCeqDM$5roh)E=hGO?9uYmYI*Z* z2u_=-4DxrVzE_aCA@rL1WcuOD7>O0I9~WYJ2c6$d-rWPXo#E-=*N*XPwA(g9`U7PrEokUOcITJcxgu`+L0*t@y}=jJkR>!omidqkRo-~CcICH;KH_??0~I(=!p zn&dqTCv^%zydB^q5v1yfxL}m9DXW9E%LFH{uur?(&->BMAu*LfwK!`I{nP1|y|SKd zNVfCu=iWcfvzBZW{?kLiIYzvmb4?q^LkOL>VF$(Q?L42p!lN92%MfsD3ppQF$y*RW zYX^tb8YjeL>2L4tK_4B!dPf^I0@j+C4C$)b>B}HM75=GN5rbeksQ(WNKXPwFK#kon zH#!?I!C<&h)KS`}w7YVTNhsOy7n)IBt&{pg<1gzz`(wf+%jvgQIJn(%0O2!ncvQ_1 zRf6T#1SchDW~yoIy@ZhQnjHK(Zlnn(89Q@h6V<{vX^l-HGq)EUAx}%jRWg)q43?7% zhAg9H>E1@lw98^6zxuyV3+oJbQZ4%Da@=)TI&HtU{dg+fE{4sg+h_FksUdKdcC&0H zd=f*wrL75}-p0*N*&Dn`u%A!kHY|P|wk#XMbTVfXRice*ls+ED%QlTGMDbDq)kwoUhU zaE9t*)x#6E4Z7p@4{w;$gzF!>kvEZh3Fn1ur=UEpA-H@Mg5@e)n}xCI>dwrS>Z@yu z)ps}URtuAb5IQSt9l$2qF}fu5rc8+jlG~j`mSpx?gQWfO%ZM zF~xo;r4+{R)AZAJ8b<7m<9FLF?Y;4gdm3ZB^Tutbe-UZ4(;L}8X9)BV%e|fQb1wR* zY@ZJV5_wsow*BHu=(gA;2%!lGAGZ$P!v#{$kQb!(o<7OkcbI9KlO5&zm;W7& zKieRuvV4Es9@X3G^rLzXEF7HkOo+X4N)0mIoT!5nB=O^kNTT?jr8rXvMc+YL=${@u zfD3f1x;u5Px-&Uf-C{fICZ{B?K_DqG?NDnIi@mwFYi0?QJDQuAs2*IsUd=-QeRJbZ zwaOiSOZ%vsK+o3F#+&K|YA2rZ96<~@K0H<)DkfqKdE)CG8oA4WI*dXTE|z(QQB=lgisi_74;4T^Db z?pe0;mLcQ!FOjLXQ%?KvSpCyF*>zB=x(~}a{Z7uIUx+wfP5NVSG^e0scfPE?xPGU)J-JXVUY@SzDHb>Eh0ZIvJA+E!FHgftzRa*SHU`US zVam&e-@^qutnM7{RQEY#urxDYJ)f8%ukq?7_xZg&*sIB|Vo{T+b)??!GdLnVA~Q0REb0nmdbm3@3~=BFgTZilur@Eh=B2xi zp(@r^bzhRq2hQ9jDSmBM?fvD&(v|+c)ebvpezAgRyPcj&#NF(5zZg*o)w};zC{Wr* zx3=(W-7lx3AfORK(Z!t|U?k<1V~t`BcFwJKeR=*I%<2Fu0)JLNg?^oxy1YD{zCQeW zxBT5Cx3rPYa@6zI>1NsL?w6IdxL511H7|DHrajJb*f`IF0HRrzsutnI zJeXZff4p@s{bBKT`fg?+Edhdt^h0!o`&00TVCJ%%)snjKSTSYb_$x^Q$# zr)$~tQ)Cqi=ct6M`}-2<(9849DBuh+v?Pa&OSg{nW^rBas{#YDRlmJM&TUQ(5Ihx@ z#Kr|deZ%SA^g{aMy$9*{oSXM(YA)Rd6fF!72bX9FER{h|j;rLDVpJyY4l8fh-6NP$ zm5WEe7hnCB2Ii=Zj5AM|W>$B-6j;i^YGyaY_$k-*dvhz+vb`m<< z2^^*lfSMUCj=g)20-uZmrJpbNdPaIcs7{UE^A|?}!At=}X1)^y$;Q@?=PG44IRf?0 z`im>_4KjS)0F(#T8${Ie^41iP6I7>feinqQ(@OcES>VkbgrC2eo=cAaK!3jbAa;Z; z!-1JW$Ilo+1SNu?A{1SZ(ik%s^69#|#!DAdLKbdOq=y{PAOOwXWz%C5X?m2Ux#2-{ z4-KXP&|H7oNUzzYsjjXDy1WL1JB!{UxLg{)F%L4%5=q*WRD8}8k}?6wHoe~-1wK6m zdO+yY*Fi4_*HGX>$C>-wW+->H6mE~~`m%CX!U>d4VgGy9Sf^sR%Vr17h`-1O2cGu9 z=kj875b<(PJ=?w zh9@tF<*-cYvf-J2%;cO<8!&1mON0<3+6Jr5|?h}`9i?Y&!QCN zEwgO>H`~SsEmbRHxn23*vh(PQ5m5Rqv_t=CZaMwy?Qhb*EZ<8H=H}7_bvJ@_ zRm@Z2o+{T^C~O>bD8$eSyD)XT%BtH9uZC)dC{a|=%OR2@<#}SGER{{d5gM54ONT7! zox&ONh?~YXfT_XO`Xi16fji{v!$XSm@f&i*2%Vj&2uZN&-JNfKNt1NT*mGue8?>fK=hu9+KSHz>&Io}WwDdy z!6DWckbt@xWp~&lNa6P6WcoiJ{x1FX_9Hk!J0E;VIItRBwip&GkLzc#a(;gR$mT�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

?4j-uBi4av;2Ul=Buw#sDe}@dA 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/config/models.ts b/src/renderer/src/config/models.ts index 8a8b293373..f43049f806 100644 --- a/src/renderer/src/config/models.ts +++ b/src/renderer/src/config/models.ts @@ -2345,7 +2345,8 @@ export const SYSTEM_MODELS: Record = { group: 'google' } ], - 'new-api': [] + 'new-api': [], + 'aws-bedrock': [] } export const TEXT_TO_IMAGES_MODELS = [ diff --git a/src/renderer/src/config/providers.ts b/src/renderer/src/config/providers.ts index d5aeeef118..76095fe22b 100644 --- a/src/renderer/src/config/providers.ts +++ b/src/renderer/src/config/providers.ts @@ -5,6 +5,7 @@ import Ai302ProviderLogo from '@renderer/assets/images/providers/302ai.webp' import AiHubMixProviderLogo from '@renderer/assets/images/providers/aihubmix.webp' import AlayaNewProviderLogo from '@renderer/assets/images/providers/alayanew.webp' import AnthropicProviderLogo from '@renderer/assets/images/providers/anthropic.png' +import AwsProviderLogo from '@renderer/assets/images/providers/aws-bedrock.png' import BaichuanProviderLogo from '@renderer/assets/images/providers/baichuan.png' import BaiduCloudProviderLogo from '@renderer/assets/images/providers/baidu-cloud.svg' import BailianProviderLogo from '@renderer/assets/images/providers/bailian.png' @@ -106,7 +107,8 @@ const PROVIDER_LOGO_MAP = { cephalon: CephalonProviderLogo, lanyun: LanyunProviderLogo, vertexai: VertexAIProviderLogo, - 'new-api': NewAPIProviderLogo + 'new-api': NewAPIProviderLogo, + 'aws-bedrock': AwsProviderLogo } as const export function getProviderLogo(providerId: string) { @@ -689,5 +691,16 @@ export const PROVIDER_CONFIG = { official: 'https://docs.newapi.pro/', docs: 'https://docs.newapi.pro' } + }, + 'aws-bedrock': { + api: { + url: '' + }, + websites: { + official: 'https://aws.amazon.com/bedrock/', + apiKey: 'https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html', + docs: 'https://docs.aws.amazon.com/bedrock/', + models: 'https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html' + } } } diff --git a/src/renderer/src/hooks/useAwsBedrock.ts b/src/renderer/src/hooks/useAwsBedrock.ts new file mode 100644 index 0000000000..e84608a3bb --- /dev/null +++ b/src/renderer/src/hooks/useAwsBedrock.ts @@ -0,0 +1,31 @@ +import store, { useAppSelector } from '@renderer/store' +import { setAwsBedrockAccessKeyId, setAwsBedrockRegion, setAwsBedrockSecretAccessKey } from '@renderer/store/llm' +import { useDispatch } from 'react-redux' + +export function useAwsBedrockSettings() { + const settings = useAppSelector((state) => state.llm.settings.awsBedrock) + const dispatch = useDispatch() + + return { + ...settings, + setAccessKeyId: (accessKeyId: string) => dispatch(setAwsBedrockAccessKeyId(accessKeyId)), + setSecretAccessKey: (secretAccessKey: string) => dispatch(setAwsBedrockSecretAccessKey(secretAccessKey)), + setRegion: (region: string) => dispatch(setAwsBedrockRegion(region)) + } +} + +export function getAwsBedrockSettings() { + return store.getState().llm.settings.awsBedrock +} + +export function getAwsBedrockAccessKeyId() { + return store.getState().llm.settings.awsBedrock.accessKeyId +} + +export function getAwsBedrockSecretAccessKey() { + return store.getState().llm.settings.awsBedrock.secretAccessKey +} + +export function getAwsBedrockRegion() { + return store.getState().llm.settings.awsBedrock.region +} diff --git a/src/renderer/src/i18n/label.ts b/src/renderer/src/i18n/label.ts index bb1cadb766..4915ef5eba 100644 --- a/src/renderer/src/i18n/label.ts +++ b/src/renderer/src/i18n/label.ts @@ -13,6 +13,7 @@ const providerKeyMap = { aihubmix: 'provider.aihubmix', alayanew: 'provider.alayanew', anthropic: 'provider.anthropic', + 'aws-bedrock': 'provider.aws-bedrock', 'azure-openai': 'provider.azure-openai', baichuan: 'provider.baichuan', 'baidu-cloud': 'provider.baidu-cloud', diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index 0fbfa9fcd8..dcb2ee1fb1 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -1594,6 +1594,7 @@ "aihubmix": "AiHubMix", "alayanew": "Alaya NeW", "anthropic": "Anthropic", + "aws-bedrock": "AWS Bedrock", "azure-openai": "Azure OpenAI", "baichuan": "Baichuan", "baidu-cloud": "Baidu Cloud", @@ -3035,6 +3036,16 @@ "tip": "Multiple keys separated by commas or spaces" }, "api_version": "API Version", + "aws-bedrock": { + "access_key_id": "AWS Access Key ID", + "access_key_id_help": "Your AWS Access Key ID for accessing AWS Bedrock services", + "description": "AWS Bedrock is Amazon's fully managed foundation model service that supports various advanced large language models", + "region": "AWS Region", + "region_help": "Your AWS service region, e.g., us-east-1", + "secret_access_key": "AWS Secret Access Key", + "secret_access_key_help": "Your AWS Secret Access Key, please keep it secure", + "title": "AWS Bedrock Configuration" + }, "azure": { "apiversion": { "tip": "The API version of Azure OpenAI, if you want to use Response API, please enter the preview version" diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index a5918fabde..617f719254 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -1594,6 +1594,7 @@ "aihubmix": "AiHubMix", "alayanew": "Alaya NeW", "anthropic": "Anthropic", + "aws-bedrock": "AWS Bedrock", "azure-openai": "Azure OpenAI", "baichuan": "百川", "baidu-cloud": "Baidu Cloud", @@ -3035,6 +3036,16 @@ "tip": "複数のキーはカンマまたはスペースで区切ります" }, "api_version": "APIバージョン", + "aws-bedrock": { + "access_key_id": "AWS アクセスキー ID", + "access_key_id_help": "あなたの AWS アクセスキー ID は、AWS Bedrock サービスへのアクセスに使用されます", + "description": "AWS Bedrock は、Amazon が提供する完全に管理されたベースモデルサービスで、さまざまな最先端の大言語モデルをサポートしています", + "region": "AWS リージョン", + "region_help": "あなたの AWS サービスリージョン、例:us-east-1", + "secret_access_key": "AWS アクセスキー", + "secret_access_key_help": "あなたの AWS アクセスキー、安全に保管してください", + "title": "AWS Bedrock 設定" + }, "azure": { "apiversion": { "tip": "Azure OpenAIのAPIバージョン。Response APIを使用する場合は、previewバージョンを入力してください" diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index ea2368d3db..102d605026 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -1594,6 +1594,7 @@ "aihubmix": "AiHubMix", "alayanew": "Alaya NeW", "anthropic": "Anthropic", + "aws-bedrock": "AWS Bedrock", "azure-openai": "Azure OpenAI", "baichuan": "Baichuan", "baidu-cloud": "Baidu Cloud", @@ -3035,6 +3036,16 @@ "tip": "Несколько ключей, разделенных запятыми или пробелами" }, "api_version": "Версия API", + "aws-bedrock": { + "access_key_id": "AWS Ключ доступа ID", + "access_key_id_help": "Ваш AWS Ключ доступа ID для доступа к AWS Bedrock", + "description": "AWS Bedrock — это полное управляемое сервисное предложение для моделей, поддерживающее различные современные модели языка", + "region": "AWS регион", + "region_help": "Ваш регион AWS, например us-east-1", + "secret_access_key": "AWS Ключ доступа", + "secret_access_key_help": "Ваш AWS Ключ доступа, пожалуйста, храните его в безопасности", + "title": "AWS Bedrock Конфигурация" + }, "azure": { "apiversion": { "tip": "Версия API Azure OpenAI. Если вы хотите использовать Response API, введите версию preview" diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 46ed5b2df5..7fe3afba64 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -1594,6 +1594,7 @@ "aihubmix": "AiHubMix", "alayanew": "Alaya NeW", "anthropic": "Anthropic", + "aws-bedrock": "AWS Bedrock", "azure-openai": "Azure OpenAI", "baichuan": "百川", "baidu-cloud": "百度云千帆", @@ -3035,6 +3036,16 @@ "tip": "多个密钥使用逗号或空格分隔" }, "api_version": "API 版本", + "aws-bedrock": { + "access_key_id": "AWS 访问密钥 ID", + "access_key_id_help": "您的 AWS 访问密钥 ID,用于访问 AWS Bedrock 服务", + "description": "AWS Bedrock 是亚马逊提供的全托管基础模型服务,支持多种先进的大语言模型", + "region": "AWS 区域", + "region_help": "您的 AWS 服务区域,例如 us-east-1", + "secret_access_key": "AWS 访问密钥", + "secret_access_key_help": "您的 AWS 访问密钥,请妥善保管", + "title": "AWS Bedrock 配置" + }, "azure": { "apiversion": { "tip": "Azure OpenAI 的 API 版本,如果想要使用 Response API,请输入 preview 版本" diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 11c63797a6..8b006fd5c6 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -1594,6 +1594,7 @@ "aihubmix": "AiHubMix", "alayanew": "Alaya NeW", "anthropic": "Anthropic", + "aws-bedrock": "AWS Bedrock", "azure-openai": "Azure OpenAI", "baichuan": "百川", "baidu-cloud": "百度雲千帆", @@ -3035,6 +3036,16 @@ "tip": "多個金鑰使用逗號或空格分隔" }, "api_version": "API 版本", + "aws-bedrock": { + "access_key_id": "AWS 存取密鑰 ID", + "access_key_id_help": "您的 AWS 存取密鑰 ID,用於存取 AWS Bedrock 服務", + "description": "AWS Bedrock 是亞馬遜提供的全托管基础模型服務,支持多種先進的大語言模型", + "region": "AWS 區域", + "region_help": "您的 AWS 服務區域,例如 us-east-1", + "secret_access_key": "AWS 存取密鑰", + "secret_access_key_help": "您的 AWS 存取密鑰,請妥善保管", + "title": "AWS Bedrock 設定" + }, "azure": { "apiversion": { "tip": "Azure OpenAI 的 API 版本,如果想要使用 Response API,請輸入 preview 版本" diff --git a/src/renderer/src/pages/settings/ProviderSettings/AwsBedrockSettings.tsx b/src/renderer/src/pages/settings/ProviderSettings/AwsBedrockSettings.tsx new file mode 100644 index 0000000000..d358198345 --- /dev/null +++ b/src/renderer/src/pages/settings/ProviderSettings/AwsBedrockSettings.tsx @@ -0,0 +1,74 @@ +import { HStack } from '@renderer/components/Layout' +import { PROVIDER_CONFIG } from '@renderer/config/providers' +import { useAwsBedrockSettings } from '@renderer/hooks/useAwsBedrock' +import { Alert, Input } from 'antd' +import { FC, useState } from 'react' +import { useTranslation } from 'react-i18next' + +import { SettingHelpLink, SettingHelpText, SettingHelpTextRow, SettingSubtitle } from '..' + +const AwsBedrockSettings: FC = () => { + const { t } = useTranslation() + const { accessKeyId, secretAccessKey, region, setAccessKeyId, setSecretAccessKey, setRegion } = + useAwsBedrockSettings() + + const providerConfig = PROVIDER_CONFIG['aws-bedrock'] + const apiKeyWebsite = providerConfig?.websites?.apiKey + + const [localAccessKeyId, setLocalAccessKeyId] = useState(accessKeyId) + const [localSecretAccessKey, setLocalSecretAccessKey] = useState(secretAccessKey) + const [localRegion, setLocalRegion] = useState(region) + + return ( + <> + {t('settings.provider.aws-bedrock.title')} + + + {t('settings.provider.aws-bedrock.access_key_id')} + setLocalAccessKeyId(e.target.value)} + onBlur={() => setAccessKeyId(localAccessKeyId)} + style={{ marginTop: 5 }} + /> + + {t('settings.provider.aws-bedrock.access_key_id_help')} + + + {t('settings.provider.aws-bedrock.secret_access_key')} + setLocalSecretAccessKey(e.target.value)} + onBlur={() => setSecretAccessKey(localSecretAccessKey)} + style={{ marginTop: 5 }} + spellCheck={false} + /> + {apiKeyWebsite && ( + + + + {t('settings.provider.get_api_key')} + + + {t('settings.provider.aws-bedrock.secret_access_key_help')} + + )} + + {t('settings.provider.aws-bedrock.region')} + setLocalRegion(e.target.value)} + onBlur={() => setRegion(localRegion)} + style={{ marginTop: 5 }} + /> + + {t('settings.provider.aws-bedrock.region_help')} + + + ) +} + +export default AwsBedrockSettings diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index 4fa0c4d2ad..93f2a87604 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -29,6 +29,7 @@ import { SettingSubtitle, SettingTitle } from '..' +import AwsBedrockSettings from './AwsBedrockSettings' import CustomHeaderPopup from './CustomHeaderPopup' import DMXAPISettings from './DMXAPISettings' import GithubCopilotSettings from './GithubCopilotSettings' @@ -259,7 +260,7 @@ const ProviderSetting: FC = ({ providerId }) => { {isProviderSupportAuth(provider) && } {provider.id === 'openai' && } {isDmxapi && } - {provider.id !== 'vertexai' && ( + {provider.id !== 'vertexai' && provider.id !== 'aws-bedrock' && ( <> = ({ providerId }) => { {provider.id === 'lmstudio' && } {provider.id === 'gpustack' && } {provider.id === 'copilot' && } + {provider.id === 'aws-bedrock' && } {provider.id === 'vertexai' && } diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index b5876bcb80..b54c8c67d7 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -22,6 +22,11 @@ type LlmSettings = { projectId: string location: string } + awsBedrock: { + accessKeyId: string + secretAccessKey: string + region: string + } } export interface LlmState { @@ -537,6 +542,16 @@ export const INITIAL_PROVIDERS: Provider[] = [ models: SYSTEM_MODELS.voyageai, isSystem: true, enabled: false + }, + { + id: 'aws-bedrock', + name: 'AWS Bedrock', + type: 'aws-bedrock', + apiKey: '', + apiHost: '', + models: SYSTEM_MODELS['aws-bedrock'], + isSystem: true, + enabled: false } ] @@ -563,6 +578,11 @@ export const initialState: LlmState = { }, projectId: '', location: '' + }, + awsBedrock: { + accessKeyId: '', + secretAccessKey: '', + region: '' } } } @@ -687,6 +707,15 @@ const llmSlice = createSlice({ setVertexAIServiceAccountClientEmail: (state, action: PayloadAction) => { state.settings.vertexai.serviceAccount.clientEmail = action.payload }, + setAwsBedrockAccessKeyId: (state, action: PayloadAction) => { + state.settings.awsBedrock.accessKeyId = action.payload + }, + setAwsBedrockSecretAccessKey: (state, action: PayloadAction) => { + state.settings.awsBedrock.secretAccessKey = action.payload + }, + setAwsBedrockRegion: (state, action: PayloadAction) => { + state.settings.awsBedrock.region = action.payload + }, updateModel: ( state, action: PayloadAction<{ @@ -723,6 +752,9 @@ export const { setVertexAILocation, setVertexAIServiceAccountPrivateKey, setVertexAIServiceAccountClientEmail, + setAwsBedrockAccessKeyId, + setAwsBedrockSecretAccessKey, + setAwsBedrockRegion, updateModel } = llmSlice.actions diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index b8ad2a1249..d6bf1ea62f 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -1907,6 +1907,13 @@ const migrateConfig = { updateModelTextDelta(state.assistants.defaultAssistant.defaultModel) } + addProvider(state, 'aws-bedrock') + + // 初始化 awsBedrock 设置 + if (!state.llm.settings.awsBedrock) { + state.llm.settings.awsBedrock = llmInitialState.settings.awsBedrock + } + return state } catch (error) { logger.error('migrate 124 error', error as Error) diff --git a/src/renderer/src/types/index.ts b/src/renderer/src/types/index.ts index 70a55c867a..3dfb8a7858 100644 --- a/src/renderer/src/types/index.ts +++ b/src/renderer/src/types/index.ts @@ -187,6 +187,7 @@ export type ProviderType = | 'azure-openai' | 'vertexai' | 'mistral' + | 'aws-bedrock' export type ModelType = 'text' | 'vision' | 'embedding' | 'reasoning' | 'function_calling' | 'web_search' | 'rerank' diff --git a/src/renderer/src/types/sdk.ts b/src/renderer/src/types/sdk.ts index ed56240398..0ed9b8da04 100644 --- a/src/renderer/src/types/sdk.ts +++ b/src/renderer/src/types/sdk.ts @@ -9,6 +9,7 @@ import { } from '@anthropic-ai/sdk/resources' import { MessageStream } from '@anthropic-ai/sdk/resources/messages/messages' import AnthropicVertex from '@anthropic-ai/vertex-sdk' +import type { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime' import { Content, CreateChatParameters, @@ -24,21 +25,43 @@ import { Stream } from 'openai/streaming' import { EndpointType } from './index' -export type SdkInstance = OpenAI | AzureOpenAI | Anthropic | AnthropicVertex | GoogleGenAI -export type SdkParams = OpenAISdkParams | OpenAIResponseSdkParams | AnthropicSdkParams | GeminiSdkParams -export type SdkRawChunk = OpenAISdkRawChunk | OpenAIResponseSdkRawChunk | AnthropicSdkRawChunk | GeminiSdkRawChunk -export type SdkRawOutput = OpenAISdkRawOutput | OpenAIResponseSdkRawOutput | AnthropicSdkRawOutput | GeminiSdkRawOutput +export type SdkInstance = OpenAI | AzureOpenAI | Anthropic | AnthropicVertex | GoogleGenAI | AwsBedrockSdkInstance +export type SdkParams = + | OpenAISdkParams + | OpenAIResponseSdkParams + | AnthropicSdkParams + | GeminiSdkParams + | AwsBedrockSdkParams +export type SdkRawChunk = + | OpenAISdkRawChunk + | OpenAIResponseSdkRawChunk + | AnthropicSdkRawChunk + | GeminiSdkRawChunk + | AwsBedrockSdkRawChunk +export type SdkRawOutput = + | OpenAISdkRawOutput + | OpenAIResponseSdkRawOutput + | AnthropicSdkRawOutput + | GeminiSdkRawOutput + | AwsBedrockSdkRawOutput export type SdkMessageParam = | OpenAISdkMessageParam | OpenAIResponseSdkMessageParam | AnthropicSdkMessageParam | GeminiSdkMessageParam + | AwsBedrockSdkMessageParam export type SdkToolCall = | OpenAI.Chat.Completions.ChatCompletionMessageToolCall | ToolUseBlock | FunctionCall | OpenAIResponseSdkToolCall -export type SdkTool = OpenAI.Chat.Completions.ChatCompletionTool | ToolUnion | Tool | OpenAIResponseSdkTool + | AwsBedrockSdkToolCall +export type SdkTool = + | OpenAI.Chat.Completions.ChatCompletionTool + | ToolUnion + | Tool + | OpenAIResponseSdkTool + | AwsBedrockSdkTool export type SdkModel = OpenAI.Models.Model | Anthropic.ModelInfo | GeminiModel | NewApiModel export type RequestOptions = Anthropic.RequestOptions | OpenAI.RequestOptions | GeminiOptions @@ -117,3 +140,119 @@ export type GeminiOptions = { export interface NewApiModel extends OpenAI.Models.Model { supported_endpoint_types?: EndpointType[] } + +/** + * AWS Bedrock + */ +export interface AwsBedrockSdkInstance { + client: BedrockRuntimeClient + region: string +} + +export interface AwsBedrockSdkParams { + modelId: string + messages: AwsBedrockSdkMessageParam[] + system?: string + maxTokens?: number + temperature?: number + topP?: number + stream?: boolean + tools?: AwsBedrockSdkTool[] +} + +export interface AwsBedrockSdkMessageParam { + role: 'user' | 'assistant' + content: Array<{ + text?: string + image?: { + format: 'png' | 'jpeg' | 'gif' | 'webp' + source: { + bytes?: Uint8Array + s3Location?: { + uri: string + bucketOwner?: string + } + } + } + toolResult?: { + toolUseId: string + content: Array<{ + json?: any + text?: string + image?: { + format: 'png' | 'jpeg' | 'gif' | 'webp' + source: { + bytes?: Uint8Array + s3Location?: { + uri: string + bucketOwner?: string + } + } + } + document?: any + video?: any + }> + status?: 'success' | 'error' + } + toolUse?: { + toolUseId: string + name: string + input: any + } + }> +} + +export interface AwsBedrockSdkRawChunk { + contentBlockStart?: { + start?: { + toolUse?: { + toolUseId: string + name: string + } + } + contentBlockIndex?: number + } + contentBlockDelta?: { + delta?: { + text?: string + toolUse?: { + input?: string + } + } + contentBlockIndex?: number + } + contentBlockStop?: { + contentBlockIndex?: number + } + messageStart?: any + messageStop?: any + metadata?: any +} + +export type AwsBedrockSdkRawOutput = { output: any } | AsyncIterable + +export interface AwsBedrockSdkTool { + toolSpec: { + name: string + description?: string + inputSchema: { + json: { + type: string + properties?: { + [key: string]: { + type: string + description?: string + } + } + required?: string[] + } + } + } +} + +export interface AwsBedrockSdkToolCall { + id: string + name: string + input: any + toolUseId: string +} diff --git a/src/renderer/src/utils/__tests__/aws-bedrock-utils.test.ts b/src/renderer/src/utils/__tests__/aws-bedrock-utils.test.ts new file mode 100644 index 0000000000..f1d1417005 --- /dev/null +++ b/src/renderer/src/utils/__tests__/aws-bedrock-utils.test.ts @@ -0,0 +1,226 @@ +import { describe, expect, it } from 'vitest' + +import { + type AwsBedrockImage, + type AwsBedrockImageFormat, + base64ToUint8Array, + convertBase64ImageToAwsBedrockFormat, + extractImageFormatFromMimeType, + isAwsBedrockSupportedImageFormat +} from '../aws-bedrock-utils' + +describe('utils/aws-bedrock-utils', () => { + describe('extractImageFormatFromMimeType', () => { + it('should extract png format from mime type', () => { + expect(extractImageFormatFromMimeType('image/png')).toBe('png') + }) + + it('should extract jpeg format from mime type', () => { + expect(extractImageFormatFromMimeType('image/jpeg')).toBe('jpeg') + }) + + it('should extract gif format from mime type', () => { + expect(extractImageFormatFromMimeType('image/gif')).toBe('gif') + }) + + it('should extract webp format from mime type', () => { + expect(extractImageFormatFromMimeType('image/webp')).toBe('webp') + }) + + it('should return null for unsupported mime type', () => { + expect(extractImageFormatFromMimeType('image/bmp')).toBe(null) + expect(extractImageFormatFromMimeType('image/svg+xml')).toBe(null) + expect(extractImageFormatFromMimeType('image/tiff')).toBe(null) + }) + + it('should return null for invalid mime type format', () => { + expect(extractImageFormatFromMimeType('invalid')).toBe(null) + expect(extractImageFormatFromMimeType('text/plain')).toBe(null) + expect(extractImageFormatFromMimeType('application/json')).toBe(null) + }) + + it('should return null for undefined or empty input', () => { + expect(extractImageFormatFromMimeType(undefined)).toBe(null) + expect(extractImageFormatFromMimeType('')).toBe(null) + }) + + it('should handle mime type with additional parameters', () => { + expect(extractImageFormatFromMimeType('image/png; charset=utf-8')).toBe(null) + expect(extractImageFormatFromMimeType('image/jpeg; quality=95')).toBe(null) + }) + }) + + describe('base64ToUint8Array', () => { + it('should convert valid base64 string to Uint8Array', () => { + // "hello" in base64 is "aGVsbG8=" + const base64 = 'aGVsbG8=' + const result = base64ToUint8Array(base64) + + expect(result).toBeInstanceOf(Uint8Array) + expect(result.length).toBe(5) + expect(Array.from(result)).toEqual([104, 101, 108, 108, 111]) // ASCII values for "hello" + }) + + it('should convert empty base64 string to empty Uint8Array', () => { + const result = base64ToUint8Array('') + expect(result).toBeInstanceOf(Uint8Array) + expect(result.length).toBe(0) + }) + + it('should handle base64 with padding', () => { + const base64 = 'YQ==' // "a" in base64 + const result = base64ToUint8Array(base64) + + expect(result).toBeInstanceOf(Uint8Array) + expect(result.length).toBe(1) + expect(result[0]).toBe(97) // ASCII value for "a" + }) + + it('should handle base64 without padding', () => { + const base64 = 'YWI' // "ab" in base64 without padding + const result = base64ToUint8Array(base64) + + expect(result).toBeInstanceOf(Uint8Array) + expect(result.length).toBe(2) + expect(Array.from(result)).toEqual([97, 98]) // ASCII values for "ab" + }) + + it('should throw error for invalid base64 string', () => { + expect(() => base64ToUint8Array('invalid!@#$%^&*()')).toThrow('Failed to decode base64 data') + expect(() => base64ToUint8Array('hello world!')).toThrow('Failed to decode base64 data') + }) + + it('should handle binary data correctly', () => { + // Binary data that represents a simple image header + const binaryData = new Uint8Array([137, 80, 78, 71]) // PNG header + const base64 = btoa(String.fromCharCode(...binaryData)) + const result = base64ToUint8Array(base64) + + expect(result).toBeInstanceOf(Uint8Array) + expect(Array.from(result)).toEqual([137, 80, 78, 71]) + }) + }) + + describe('convertBase64ImageToAwsBedrockFormat', () => { + const validBase64 = 'aGVsbG8=' // "hello" in base64 + + it('should convert base64 image with valid mime type', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, 'image/png') + + expect(result).not.toBe(null) + expect(result?.format).toBe('png') + expect(result?.source.bytes).toBeInstanceOf(Uint8Array) + expect(result?.source.bytes.length).toBe(5) + }) + + it('should use fallback format when mime type is not provided', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64) + + expect(result).not.toBe(null) + expect(result?.format).toBe('png') // default fallback + expect(result?.source.bytes).toBeInstanceOf(Uint8Array) + }) + + it('should use custom fallback format', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, undefined, 'jpeg') + + expect(result).not.toBe(null) + expect(result?.format).toBe('jpeg') + expect(result?.source.bytes).toBeInstanceOf(Uint8Array) + }) + + it('should extract format from mime type when provided', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, 'image/webp', 'png') + + expect(result).not.toBe(null) + expect(result?.format).toBe('webp') // extracted from mime type, not fallback + }) + + it('should use fallback format for unsupported mime type', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, 'image/bmp') + + expect(result).not.toBe(null) + expect(result?.format).toBe('png') // uses fallback format + }) + + it('should return null for invalid base64 data', () => { + const result = convertBase64ImageToAwsBedrockFormat('invalid!@#$%^&*()', 'image/png') + + expect(result).toBe(null) + }) + + it('should return null for invalid fallback format', () => { + // @ts-ignore - testing invalid fallback format + const result = convertBase64ImageToAwsBedrockFormat(validBase64, undefined, 'bmp') + + expect(result).toBe(null) + }) + + it('should handle all supported formats', () => { + const formats: AwsBedrockImageFormat[] = ['png', 'jpeg', 'gif', 'webp'] + + formats.forEach((format) => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, `image/${format}`) + expect(result).not.toBe(null) + expect(result?.format).toBe(format) + }) + }) + + it('should return proper AwsBedrockImage structure', () => { + const result = convertBase64ImageToAwsBedrockFormat(validBase64, 'image/png') + + expect(result).toEqual({ + format: 'png', + source: { + bytes: expect.any(Uint8Array) + } + } as AwsBedrockImage) + }) + + it('should handle empty base64 string', () => { + const result = convertBase64ImageToAwsBedrockFormat('', 'image/png') + + expect(result).not.toBe(null) + expect(result?.format).toBe('png') + expect(result?.source.bytes).toBeInstanceOf(Uint8Array) + expect(result?.source.bytes.length).toBe(0) + }) + }) + + describe('isAwsBedrockSupportedImageFormat', () => { + it('should return true for supported formats', () => { + expect(isAwsBedrockSupportedImageFormat('image/png')).toBe(true) + expect(isAwsBedrockSupportedImageFormat('image/jpeg')).toBe(true) + expect(isAwsBedrockSupportedImageFormat('image/gif')).toBe(true) + expect(isAwsBedrockSupportedImageFormat('image/webp')).toBe(true) + }) + + it('should return false for unsupported formats', () => { + expect(isAwsBedrockSupportedImageFormat('image/bmp')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('image/svg+xml')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('image/tiff')).toBe(false) + }) + + it('should return false for non-image mime types', () => { + expect(isAwsBedrockSupportedImageFormat('text/plain')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('application/json')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('video/mp4')).toBe(false) + }) + + it('should return false for invalid mime types', () => { + expect(isAwsBedrockSupportedImageFormat('invalid')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('image/')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('/bmp')).toBe(false) + }) + + it('should return false for undefined or empty input', () => { + expect(isAwsBedrockSupportedImageFormat(undefined)).toBe(false) + expect(isAwsBedrockSupportedImageFormat('')).toBe(false) + }) + + it('should return false for mime types with additional parameters', () => { + expect(isAwsBedrockSupportedImageFormat('image/png; charset=utf-8')).toBe(false) + expect(isAwsBedrockSupportedImageFormat('image/jpeg; quality=95')).toBe(false) + }) + }) +}) diff --git a/src/renderer/src/utils/aws-bedrock-utils.ts b/src/renderer/src/utils/aws-bedrock-utils.ts new file mode 100644 index 0000000000..ec44ecb45e --- /dev/null +++ b/src/renderer/src/utils/aws-bedrock-utils.ts @@ -0,0 +1,98 @@ +/** + * AWS Bedrock 相关工具函数 + */ + +/** + * 支持的图片格式类型 + */ +export type AwsBedrockImageFormat = 'png' | 'jpeg' | 'gif' | 'webp' + +/** + * AWS Bedrock 图片对象格式 + */ +export interface AwsBedrockImage { + format: AwsBedrockImageFormat + source: { + bytes: Uint8Array + } +} + +/** + * 从 MIME 类型中提取图片格式 + * @param mimeType MIME 类型,如 'image/png' + * @returns 图片格式或 null(如果不支持) + */ +export function extractImageFormatFromMimeType(mimeType?: string): AwsBedrockImageFormat | null { + if (!mimeType) return null + + const format = mimeType.split('/')[1] as AwsBedrockImageFormat + + if (['png', 'jpeg', 'gif', 'webp'].includes(format)) { + return format + } + + return null +} + +/** + * 将 base64 字符串转换为 Uint8Array + * @param base64Data base64 编码的字符串 + * @returns Uint8Array + * @throws Error 如果 base64 解码失败 + */ +export function base64ToUint8Array(base64Data: string): Uint8Array { + try { + // 在浏览器环境中正确处理base64转换为Uint8Array + const binaryString = atob(base64Data) + const bytes = new Uint8Array(binaryString.length) + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i) + } + return bytes + } catch (error) { + throw new Error(`Failed to decode base64 data: ${error instanceof Error ? error.message : 'Unknown error'}`) + } +} + +/** + * 将 base64 图片数据转换为 AWS Bedrock 格式 + * @param data base64 编码的图片数据 + * @param mimeType 图片的 MIME 类型 + * @param fallbackFormat 当无法从 mimeType 中提取格式时的默认格式 + * @returns AWS Bedrock 格式的图片对象,如果格式不支持则返回 null + */ +export function convertBase64ImageToAwsBedrockFormat( + data: string, + mimeType?: string, + fallbackFormat: AwsBedrockImageFormat = 'png' +): AwsBedrockImage | null { + const format = extractImageFormatFromMimeType(mimeType) || fallbackFormat + + // 验证格式是否支持 + if (!['png', 'jpeg', 'gif', 'webp'].includes(format)) { + return null + } + + try { + const bytes = base64ToUint8Array(data) + + return { + format, + source: { + bytes + } + } + } catch (error) { + // 如果转换失败,返回 null + return null + } +} + +/** + * 检查给定的 MIME 类型是否为 AWS Bedrock 支持的图片格式 + * @param mimeType MIME 类型 + * @returns 是否支持 + */ +export function isAwsBedrockSupportedImageFormat(mimeType?: string): boolean { + return extractImageFormatFromMimeType(mimeType) !== null +} diff --git a/src/renderer/src/utils/mcp-tools.ts b/src/renderer/src/utils/mcp-tools.ts index e575917f7a..e2bf4e3f09 100644 --- a/src/renderer/src/utils/mcp-tools.ts +++ b/src/renderer/src/utils/mcp-tools.ts @@ -17,6 +17,7 @@ import { } from '@renderer/types' import type { MCPToolCompleteChunk, MCPToolInProgressChunk, MCPToolPendingChunk } from '@renderer/types/chunk' import { ChunkType } from '@renderer/types/chunk' +import { AwsBedrockSdkMessageParam, AwsBedrockSdkTool, AwsBedrockSdkToolCall } from '@renderer/types/sdk' import { isArray, isObject, pull, transform } from 'lodash' import { nanoid } from 'nanoid' import OpenAI from 'openai' @@ -27,6 +28,8 @@ import { ChatCompletionTool } from 'openai/resources' +import { convertBase64ImageToAwsBedrockFormat } from './aws-bedrock-utils' + const logger = loggerService.withContext('Utils:MCPTools') const MCP_AUTO_INSTALL_SERVER_NAME = '@cherry/mcp-auto-install' @@ -533,7 +536,7 @@ export function parseToolUse(content: string, mcpTools: MCPTool[], startIdx: num parsedArgs = toolArgs } // Logger.log(`Parsed arguments for tool "${toolName}":`, parsedArgs) - const mcpTool = mcpTools.find((tool) => tool.id === toolName) + const mcpTool = mcpTools.find((tool) => tool.id === toolName || tool.name === toolName) if (!mcpTool) { logger.error(`Tool "${toolName}" not found in MCP tools`) window.message.error(i18n.t('settings.mcp.errors.toolNotFound', { name: toolName })) @@ -835,6 +838,163 @@ export function mcpToolCallResponseToGeminiMessage( return message } +export function mcpToolsToAwsBedrockTools(mcpTools: MCPTool[]): Array { + return mcpTools.map((tool) => ({ + toolSpec: { + name: tool.id, + description: tool.description, + inputSchema: { + json: { + type: 'object', + properties: tool.inputSchema?.properties + ? Object.fromEntries( + Object.entries(tool.inputSchema.properties).map(([key, value]) => [ + key, + { + type: + typeof value === 'object' && value !== null && 'type' in value ? (value as any).type : 'string', + description: + typeof value === 'object' && value !== null && 'description' in value + ? (value as any).description + : undefined + } + ]) + ) + : {}, + required: tool.inputSchema?.required || [] + } + } + } + })) +} + +export function awsBedrockToolUseToMcpTool( + mcpTools: MCPTool[] | undefined, + toolCall: AwsBedrockSdkToolCall +): MCPTool | undefined { + if (!toolCall) return undefined + if (!mcpTools) return undefined + const tool = mcpTools.find((tool) => tool.id === toolCall.name || tool.name === toolCall.name) + if (!tool) { + return undefined + } + return tool +} + +export function mcpToolCallResponseToAwsBedrockMessage( + mcpToolResponse: MCPToolResponse, + resp: MCPCallToolResponse, + model: Model +): AwsBedrockSdkMessageParam { + const message: AwsBedrockSdkMessageParam = { + role: 'user', + content: [] + } + + const toolUseId = + 'toolUseId' in mcpToolResponse && mcpToolResponse.toolUseId + ? mcpToolResponse.toolUseId + : 'toolCallId' in mcpToolResponse && mcpToolResponse.toolCallId + ? mcpToolResponse.toolCallId + : 'unknown-tool-id' + + if (resp.isError) { + message.content = [ + { + toolResult: { + toolUseId: toolUseId, + content: [ + { + text: `Error: ${JSON.stringify(resp.content)}` + } + ], + status: 'error' + } + } + ] + } else { + const toolResultContent: Array<{ + json?: any + text?: string + image?: { + format: 'png' | 'jpeg' | 'gif' | 'webp' + source: { + bytes?: Uint8Array + s3Location?: { + uri: string + bucketOwner?: string + } + } + } + }> = [] + + if (isVisionModel(model)) { + for (const item of resp.content) { + switch (item.type) { + case 'text': + toolResultContent.push({ + text: item.text || 'no content' + }) + break + case 'image': + if (item.data && item.mimeType) { + const awsImage = convertBase64ImageToAwsBedrockFormat(item.data, item.mimeType) + if (awsImage) { + toolResultContent.push({ image: awsImage }) + } else { + toolResultContent.push({ + text: `[Image received: ${item.mimeType}, size: ${item.data?.length || 0} bytes]` + }) + } + } else { + toolResultContent.push({ + text: '[Image received but no data available]' + }) + } + break + default: + toolResultContent.push({ + text: `Unsupported content type: ${item.type}` + }) + break + } + } + } else { + // 对于非视觉模型,将所有内容合并为文本 + const textContent = resp.content + .map((item) => { + if (item.type === 'text') { + return item.text + } else { + // 对于非文本内容,尝试转换为JSON格式 + try { + return JSON.stringify(item) + } catch { + return `[${item.type} content]` + } + } + }) + .join('\n') + + toolResultContent.push({ + text: textContent || 'Tool execution completed with no output' + }) + } + + message.content = [ + { + toolResult: { + toolUseId: toolUseId, + content: toolResultContent, + status: 'success' + } + } + ] + } + + return message +} + export function isEnabledToolUse(assistant: Assistant) { if (assistant.model) { if (isFunctionCallingModel(assistant.model)) { diff --git a/yarn.lock b/yarn.lock index 7af86162d9..78695c5ad9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -339,6 +339,63 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-bedrock-runtime@npm:^3.840.0": + version: 3.848.0 + resolution: "@aws-sdk/client-bedrock-runtime@npm:3.848.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/credential-provider-node": "npm:3.848.0" + "@aws-sdk/eventstream-handler-node": "npm:3.840.0" + "@aws-sdk/middleware-eventstream": "npm:3.840.0" + "@aws-sdk/middleware-host-header": "npm:3.840.0" + "@aws-sdk/middleware-logger": "npm:3.840.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.840.0" + "@aws-sdk/middleware-user-agent": "npm:3.848.0" + "@aws-sdk/middleware-websocket": "npm:3.844.0" + "@aws-sdk/region-config-resolver": "npm:3.840.0" + "@aws-sdk/token-providers": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/util-endpoints": "npm:3.848.0" + "@aws-sdk/util-user-agent-browser": "npm:3.840.0" + "@aws-sdk/util-user-agent-node": "npm:3.848.0" + "@smithy/config-resolver": "npm:^4.1.4" + "@smithy/core": "npm:^3.7.0" + "@smithy/eventstream-serde-browser": "npm:^4.0.4" + "@smithy/eventstream-serde-config-resolver": "npm:^4.1.2" + "@smithy/eventstream-serde-node": "npm:^4.0.4" + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/hash-node": "npm:^4.0.4" + "@smithy/invalid-dependency": "npm:^4.0.4" + "@smithy/middleware-content-length": "npm:^4.0.4" + "@smithy/middleware-endpoint": "npm:^4.1.15" + "@smithy/middleware-retry": "npm:^4.1.16" + "@smithy/middleware-serde": "npm:^4.0.8" + "@smithy/middleware-stack": "npm:^4.0.4" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/node-http-handler": "npm:^4.1.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/smithy-client": "npm:^4.4.7" + "@smithy/types": "npm:^4.3.1" + "@smithy/url-parser": "npm:^4.0.4" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.23" + "@smithy/util-defaults-mode-node": "npm:^4.0.23" + "@smithy/util-endpoints": "npm:^3.0.6" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-retry": "npm:^4.0.6" + "@smithy/util-stream": "npm:^4.2.3" + "@smithy/util-utf8": "npm:^4.0.0" + "@types/uuid": "npm:^9.0.1" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/6aae8b8a8970f55605c89aa15d7efc189120cb54b64a9f57348ac4085b422d4d839fa5ed8b0d2d8ca4efc4a5326bf6988f61ded8f2b1cde79455c3bd4705ece6 + languageName: node + linkType: hard + "@aws-sdk/client-s3@npm:^3.840.0": version: 3.840.0 resolution: "@aws-sdk/client-s3@npm:3.840.0" @@ -451,6 +508,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/client-sso@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/client-sso@npm:3.848.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/middleware-host-header": "npm:3.840.0" + "@aws-sdk/middleware-logger": "npm:3.840.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.840.0" + "@aws-sdk/middleware-user-agent": "npm:3.848.0" + "@aws-sdk/region-config-resolver": "npm:3.840.0" + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/util-endpoints": "npm:3.848.0" + "@aws-sdk/util-user-agent-browser": "npm:3.840.0" + "@aws-sdk/util-user-agent-node": "npm:3.848.0" + "@smithy/config-resolver": "npm:^4.1.4" + "@smithy/core": "npm:^3.7.0" + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/hash-node": "npm:^4.0.4" + "@smithy/invalid-dependency": "npm:^4.0.4" + "@smithy/middleware-content-length": "npm:^4.0.4" + "@smithy/middleware-endpoint": "npm:^4.1.15" + "@smithy/middleware-retry": "npm:^4.1.16" + "@smithy/middleware-serde": "npm:^4.0.8" + "@smithy/middleware-stack": "npm:^4.0.4" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/node-http-handler": "npm:^4.1.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/smithy-client": "npm:^4.4.7" + "@smithy/types": "npm:^4.3.1" + "@smithy/url-parser": "npm:^4.0.4" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.23" + "@smithy/util-defaults-mode-node": "npm:^4.0.23" + "@smithy/util-endpoints": "npm:^3.0.6" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-retry": "npm:^4.0.6" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/758d98cec61ee94f90e476584955409800368346ce9cafaad9d2012579655ddd7500ec31e6e4f409d4d14365ed44379b248a47b2d5a7c4dfde6658d17efea25a + languageName: node + linkType: hard + "@aws-sdk/core@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/core@npm:3.840.0" @@ -474,6 +577,29 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/core@npm:3.846.0": + version: 3.846.0 + resolution: "@aws-sdk/core@npm:3.846.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/xml-builder": "npm:3.821.0" + "@smithy/core": "npm:^3.7.0" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/signature-v4": "npm:^5.1.2" + "@smithy/smithy-client": "npm:^4.4.7" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-utf8": "npm:^4.0.0" + fast-xml-parser: "npm:5.2.5" + tslib: "npm:^2.6.2" + checksum: 10c0/b23115868854939ec4d2eefcedd0fe6a2dbaa8bca83e4b757c21e5c8a153c99b61ea4b645e763257b2031717dfcc9c92264f83aa4f9d0071c806895eea6722fa + languageName: node + linkType: hard + "@aws-sdk/credential-provider-env@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-env@npm:3.840.0" @@ -487,6 +613,19 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-env@npm:3.846.0": + version: 3.846.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.846.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/21640b6eec50de4fa3a7e2ac1c4505c0cf27f2f7540781d2892b2aa281f28d7c4214bd385e11cdbfd5e3309cd12219c05d26adf7cad4c881c995a20b8bc4dbcd + languageName: node + linkType: hard + "@aws-sdk/credential-provider-http@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-http@npm:3.840.0" @@ -505,6 +644,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-http@npm:3.846.0": + version: 3.846.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.846.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/node-http-handler": "npm:^4.1.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/smithy-client": "npm:^4.4.7" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-stream": "npm:^4.2.3" + tslib: "npm:^2.6.2" + checksum: 10c0/5fbc05c5b0e622ce473dda41d5402982508e63496d36cb22ee6039caf563bb5d1c5633ced6901fe8c134090818400b865202c619288979132ba635f09aa98a97 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-ini@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-ini@npm:3.840.0" @@ -526,6 +683,27 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-ini@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.848.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/credential-provider-env": "npm:3.846.0" + "@aws-sdk/credential-provider-http": "npm:3.846.0" + "@aws-sdk/credential-provider-process": "npm:3.846.0" + "@aws-sdk/credential-provider-sso": "npm:3.848.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.848.0" + "@aws-sdk/nested-clients": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/credential-provider-imds": "npm:^4.0.6" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/af3f7aa9816618a4be600f4feeeb737cf5bd11db4f3f7e96cc30e45e93386a2e3ab4a2f9c40b2eb738b4d4e66dbe0db5086062846a8a75dfa2fd42acfb349b33 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-node@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-node@npm:3.840.0" @@ -546,6 +724,26 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-node@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.848.0" + dependencies: + "@aws-sdk/credential-provider-env": "npm:3.846.0" + "@aws-sdk/credential-provider-http": "npm:3.846.0" + "@aws-sdk/credential-provider-ini": "npm:3.848.0" + "@aws-sdk/credential-provider-process": "npm:3.846.0" + "@aws-sdk/credential-provider-sso": "npm:3.848.0" + "@aws-sdk/credential-provider-web-identity": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/credential-provider-imds": "npm:^4.0.6" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/9887a7a32dfc687c4cfb9aacf9fbc9468916dc6022802a1ddfccc6d948202e6cf6f2d15c3e526806714edd365490a828c18ec67de977a66d83b37ab75d170d56 + languageName: node + linkType: hard + "@aws-sdk/credential-provider-process@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-process@npm:3.840.0" @@ -560,6 +758,20 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-process@npm:3.846.0": + version: 3.846.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.846.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/3be6d4547cabd1fa71aa0acacc64f7996f6154aff01e7e5aa6f1cece3d89399c4f500b74db8f0173cf0c9c89275d8803970cb815d45c769808d339bdfae186fe + languageName: node + linkType: hard + "@aws-sdk/credential-provider-sso@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-sso@npm:3.840.0" @@ -576,6 +788,22 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-sso@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.848.0" + dependencies: + "@aws-sdk/client-sso": "npm:3.848.0" + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/token-providers": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/3ac50af20ff6646388175581cafab03b590eb5fccd1743ef45eeab3b3bb843a681e6c9e88d06c031a2886f77f649ab1a5df18cf7fb088dc8b34a7b225614ebaf + languageName: node + linkType: hard + "@aws-sdk/credential-provider-web-identity@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/credential-provider-web-identity@npm:3.840.0" @@ -590,6 +818,32 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/credential-provider-web-identity@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.848.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/nested-clients": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/bd1729dc05426d86c4feb4093b6c57eb2f11a8c10d6bd9a9b81d795bd4de1fa03f9c92c85ca35e6121c4814ba6a3416fa6bb7b3bf8171735de28999a1a239aa6 + languageName: node + linkType: hard + +"@aws-sdk/eventstream-handler-node@npm:3.840.0": + version: 3.840.0 + resolution: "@aws-sdk/eventstream-handler-node@npm:3.840.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@smithy/eventstream-codec": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/a95bc35719ed519d692d50983195ae1648edfa8c5da6750edf861e6f179daac75ab75b1235225efceae913eeebf438efb467409785aca989852adbb32637c255 + languageName: node + linkType: hard + "@aws-sdk/middleware-bucket-endpoint@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.840.0" @@ -605,6 +859,18 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-eventstream@npm:3.840.0": + version: 3.840.0 + resolution: "@aws-sdk/middleware-eventstream@npm:3.840.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/887e92906c5b026f01d292d4ebc58483da5676a19a63f34c33fc7d6e4ca00b2df9c4336d0afa141a2f231fb6e01c45851facdef1f531589629e7da7bcbbee02a + languageName: node + linkType: hard + "@aws-sdk/middleware-expect-continue@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/middleware-expect-continue@npm:3.840.0" @@ -732,6 +998,39 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/middleware-user-agent@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.848.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/util-endpoints": "npm:3.848.0" + "@smithy/core": "npm:^3.7.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/2ec977bd69711022a162e287584c04c66a6481ecc331ed8fe13b6fd334a9d2c3ebe13709933dd5b224915cf7fa6e196870077e428c853b772a4b841162e71752 + languageName: node + linkType: hard + +"@aws-sdk/middleware-websocket@npm:3.844.0": + version: 3.844.0 + resolution: "@aws-sdk/middleware-websocket@npm:3.844.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/util-format-url": "npm:3.840.0" + "@smithy/eventstream-codec": "npm:^4.0.4" + "@smithy/eventstream-serde-browser": "npm:^4.0.4" + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/signature-v4": "npm:^5.1.2" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-hex-encoding": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/ff626f40f2d7369cc96ac139548bfb51b04056097ac5ad06ef20776973030e50990e7b8d218955ab1ef4caf90cc55b6a7bc34e9b01ae04a7e29dd6e6d60223be + languageName: node + linkType: hard + "@aws-sdk/nested-clients@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/nested-clients@npm:3.840.0" @@ -778,6 +1077,52 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/nested-clients@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/nested-clients@npm:3.848.0" + dependencies: + "@aws-crypto/sha256-browser": "npm:5.2.0" + "@aws-crypto/sha256-js": "npm:5.2.0" + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/middleware-host-header": "npm:3.840.0" + "@aws-sdk/middleware-logger": "npm:3.840.0" + "@aws-sdk/middleware-recursion-detection": "npm:3.840.0" + "@aws-sdk/middleware-user-agent": "npm:3.848.0" + "@aws-sdk/region-config-resolver": "npm:3.840.0" + "@aws-sdk/types": "npm:3.840.0" + "@aws-sdk/util-endpoints": "npm:3.848.0" + "@aws-sdk/util-user-agent-browser": "npm:3.840.0" + "@aws-sdk/util-user-agent-node": "npm:3.848.0" + "@smithy/config-resolver": "npm:^4.1.4" + "@smithy/core": "npm:^3.7.0" + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/hash-node": "npm:^4.0.4" + "@smithy/invalid-dependency": "npm:^4.0.4" + "@smithy/middleware-content-length": "npm:^4.0.4" + "@smithy/middleware-endpoint": "npm:^4.1.15" + "@smithy/middleware-retry": "npm:^4.1.16" + "@smithy/middleware-serde": "npm:^4.0.8" + "@smithy/middleware-stack": "npm:^4.0.4" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/node-http-handler": "npm:^4.1.0" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/smithy-client": "npm:^4.4.7" + "@smithy/types": "npm:^4.3.1" + "@smithy/url-parser": "npm:^4.0.4" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-body-length-node": "npm:^4.0.0" + "@smithy/util-defaults-mode-browser": "npm:^4.0.23" + "@smithy/util-defaults-mode-node": "npm:^4.0.23" + "@smithy/util-endpoints": "npm:^3.0.6" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-retry": "npm:^4.0.6" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/77057a60ce0f86bee16e1daa5214385720aa433f1ff097350b41a85dab2da2ac0a6f196f17b94d51631448adeed9dabfd8b984976771d9cfd4bb27a449f26bc6 + languageName: node + linkType: hard + "@aws-sdk/region-config-resolver@npm:3.840.0": version: 3.840.0 resolution: "@aws-sdk/region-config-resolver@npm:3.840.0" @@ -821,6 +1166,21 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/token-providers@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/token-providers@npm:3.848.0" + dependencies: + "@aws-sdk/core": "npm:3.846.0" + "@aws-sdk/nested-clients": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/c37329f6f3f41c32464d4ca512baa0aa1cd8694964af4391eebb14e7a4980316041579745bc35930caf973aa5595326da95f652b26ebb8f167cea078fb893d10 + languageName: node + linkType: hard + "@aws-sdk/types@npm:3.840.0, @aws-sdk/types@npm:^3.222.0": version: 3.840.0 resolution: "@aws-sdk/types@npm:3.840.0" @@ -852,6 +1212,31 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-endpoints@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/util-endpoints@npm:3.848.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@smithy/types": "npm:^4.3.1" + "@smithy/url-parser": "npm:^4.0.4" + "@smithy/util-endpoints": "npm:^3.0.6" + tslib: "npm:^2.6.2" + checksum: 10c0/84567b4152ea823274855cdab4acdde1ca60b4ba0be265408da13ad59b9f5ec2f16578402ca0430748b57b57f3a457466517bf434d0e9cec79abf855a0468b49 + languageName: node + linkType: hard + +"@aws-sdk/util-format-url@npm:3.840.0": + version: 3.840.0 + resolution: "@aws-sdk/util-format-url@npm:3.840.0" + dependencies: + "@aws-sdk/types": "npm:3.840.0" + "@smithy/querystring-builder": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/9f1d55e00bc10523d786e9a7c4b387ceb38170a870a1c5c8772bd3cd7d0ab1f352ca1c49a52cbf751acee65091ae9e58f079e6ee94bbe104b8989bff26f40a63 + languageName: node + linkType: hard + "@aws-sdk/util-locate-window@npm:^3.0.0": version: 3.804.0 resolution: "@aws-sdk/util-locate-window@npm:3.804.0" @@ -891,6 +1276,24 @@ __metadata: languageName: node linkType: hard +"@aws-sdk/util-user-agent-node@npm:3.848.0": + version: 3.848.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.848.0" + dependencies: + "@aws-sdk/middleware-user-agent": "npm:3.848.0" + "@aws-sdk/types": "npm:3.840.0" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + peerDependencies: + aws-crt: ">=1.0.0" + peerDependenciesMeta: + aws-crt: + optional: true + checksum: 10c0/165308d1323ed0f56f4366e235674a73606c9d32a47c1572541c4befc6ce5ecca2d2334981f0d77791def22dad0a722773b1540f60f2d329710f2ade361801a6 + languageName: node + linkType: hard + "@aws-sdk/xml-builder@npm:3.821.0": version: 3.821.0 resolution: "@aws-sdk/xml-builder@npm:3.821.0" @@ -4789,6 +5192,23 @@ __metadata: languageName: node linkType: hard +"@smithy/core@npm:^3.7.0, @smithy/core@npm:^3.7.1": + version: 3.7.1 + resolution: "@smithy/core@npm:3.7.1" + dependencies: + "@smithy/middleware-serde": "npm:^4.0.8" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-body-length-browser": "npm:^4.0.0" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-stream": "npm:^4.2.3" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/3828f48b776a50ee58896fd8fdcd2ae28e2142114118b5ee78892c6e40f74c63f7dbb39199a324f9858d87ca3362e72563e47ddd81c38895da070c9503325405 + languageName: node + linkType: hard + "@smithy/credential-provider-imds@npm:^4.0.6": version: 4.0.6 resolution: "@smithy/credential-provider-imds@npm:4.0.6" @@ -4870,6 +5290,19 @@ __metadata: languageName: node linkType: hard +"@smithy/fetch-http-handler@npm:^5.1.0": + version: 5.1.0 + resolution: "@smithy/fetch-http-handler@npm:5.1.0" + dependencies: + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/querystring-builder": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-base64": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/9bd54f40f00f35a4eee3c359e5942fc5c6ea1c43d7c708e5dd2cd74e8291c55fc6f1ce043d66eea7c1ca687dda682899058967c5b92df75ab56e44a773bb8679 + languageName: node + linkType: hard + "@smithy/hash-blob-browser@npm:^4.0.4": version: 4.0.4 resolution: "@smithy/hash-blob-browser@npm:4.0.4" @@ -4971,6 +5404,22 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-endpoint@npm:^4.1.15, @smithy/middleware-endpoint@npm:^4.1.16": + version: 4.1.16 + resolution: "@smithy/middleware-endpoint@npm:4.1.16" + dependencies: + "@smithy/core": "npm:^3.7.1" + "@smithy/middleware-serde": "npm:^4.0.8" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/shared-ini-file-loader": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + "@smithy/url-parser": "npm:^4.0.4" + "@smithy/util-middleware": "npm:^4.0.4" + tslib: "npm:^2.6.2" + checksum: 10c0/9f19d65ec1ed88e6a7a214821087286304199bbc613b157cca9dd7eab12f3ab6554fb38b9681759c75285210b21b4cc1527add1eafd46f9f5bfb8ca5679eebeb + languageName: node + linkType: hard + "@smithy/middleware-retry@npm:^4.1.14": version: 4.1.14 resolution: "@smithy/middleware-retry@npm:4.1.14" @@ -4988,6 +5437,23 @@ __metadata: languageName: node linkType: hard +"@smithy/middleware-retry@npm:^4.1.16": + version: 4.1.17 + resolution: "@smithy/middleware-retry@npm:4.1.17" + dependencies: + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/service-error-classification": "npm:^4.0.6" + "@smithy/smithy-client": "npm:^4.4.8" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-middleware": "npm:^4.0.4" + "@smithy/util-retry": "npm:^4.0.6" + tslib: "npm:^2.6.2" + uuid: "npm:^9.0.1" + checksum: 10c0/d8b8ce6180a1b9bef099c95a0f8bfcd232f12fc662a65f7ac2d65839009678af33665284c29b8abdb92de47f20f40ec95307a5f1d74623a3374158d800598b43 + languageName: node + linkType: hard + "@smithy/middleware-serde@npm:^4.0.8": version: 4.0.8 resolution: "@smithy/middleware-serde@npm:4.0.8" @@ -5034,6 +5500,19 @@ __metadata: languageName: node linkType: hard +"@smithy/node-http-handler@npm:^4.1.0": + version: 4.1.0 + resolution: "@smithy/node-http-handler@npm:4.1.0" + dependencies: + "@smithy/abort-controller": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/querystring-builder": "npm:^4.0.4" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/6212b86b62dc44d0d8eb3949428b2ddbb5d064e722979fc5384ec52367b8246b19619732822514e0be9d6455b8c2c41d29f46a74bf43548cc2713ea7552c07a8 + languageName: node + linkType: hard + "@smithy/property-provider@npm:^4.0.4": version: 4.0.4 resolution: "@smithy/property-provider@npm:4.0.4" @@ -5125,6 +5604,21 @@ __metadata: languageName: node linkType: hard +"@smithy/smithy-client@npm:^4.4.7, @smithy/smithy-client@npm:^4.4.8": + version: 4.4.8 + resolution: "@smithy/smithy-client@npm:4.4.8" + dependencies: + "@smithy/core": "npm:^3.7.1" + "@smithy/middleware-endpoint": "npm:^4.1.16" + "@smithy/middleware-stack": "npm:^4.0.4" + "@smithy/protocol-http": "npm:^5.1.2" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-stream": "npm:^4.2.3" + tslib: "npm:^2.6.2" + checksum: 10c0/2e7a0138dcf8afed63e998254f75d90fdb8da34f96cd09f84c7736eb5118f2b539b1ccb1dce697fdd7df7653d9c34b663731b22bfd1e0cb5dbdd8f797a01dfd9 + languageName: node + linkType: hard + "@smithy/types@npm:^4.3.1": version: 4.3.1 resolution: "@smithy/types@npm:4.3.1" @@ -5216,6 +5710,19 @@ __metadata: languageName: node linkType: hard +"@smithy/util-defaults-mode-browser@npm:^4.0.23": + version: 4.0.24 + resolution: "@smithy/util-defaults-mode-browser@npm:4.0.24" + dependencies: + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/smithy-client": "npm:^4.4.8" + "@smithy/types": "npm:^4.3.1" + bowser: "npm:^2.11.0" + tslib: "npm:^2.6.2" + checksum: 10c0/f0738ae262dd79c17cfa060a26cfd84de6b51d7a238f3d48bc960f2e9888e68af719b825243c99ec65828edda52883bd70361cedd7224f290981d71963edbc07 + languageName: node + linkType: hard + "@smithy/util-defaults-mode-node@npm:^4.0.21": version: 4.0.21 resolution: "@smithy/util-defaults-mode-node@npm:4.0.21" @@ -5231,6 +5738,21 @@ __metadata: languageName: node linkType: hard +"@smithy/util-defaults-mode-node@npm:^4.0.23": + version: 4.0.24 + resolution: "@smithy/util-defaults-mode-node@npm:4.0.24" + dependencies: + "@smithy/config-resolver": "npm:^4.1.4" + "@smithy/credential-provider-imds": "npm:^4.0.6" + "@smithy/node-config-provider": "npm:^4.1.3" + "@smithy/property-provider": "npm:^4.0.4" + "@smithy/smithy-client": "npm:^4.4.8" + "@smithy/types": "npm:^4.3.1" + tslib: "npm:^2.6.2" + checksum: 10c0/4ca648d7d660bf62c096d2a4b7639e0178898def45aa5e9d0b5ddd4cd6f49478155465145a44c1634e8e3149b7e6f79a19f91f93e584d765118504bac81225c0 + languageName: node + linkType: hard + "@smithy/util-endpoints@npm:^3.0.6": version: 3.0.6 resolution: "@smithy/util-endpoints@npm:3.0.6" @@ -5288,6 +5810,22 @@ __metadata: languageName: node linkType: hard +"@smithy/util-stream@npm:^4.2.3": + version: 4.2.3 + resolution: "@smithy/util-stream@npm:4.2.3" + dependencies: + "@smithy/fetch-http-handler": "npm:^5.1.0" + "@smithy/node-http-handler": "npm:^4.1.0" + "@smithy/types": "npm:^4.3.1" + "@smithy/util-base64": "npm:^4.0.0" + "@smithy/util-buffer-from": "npm:^4.0.0" + "@smithy/util-hex-encoding": "npm:^4.0.0" + "@smithy/util-utf8": "npm:^4.0.0" + tslib: "npm:^2.6.2" + checksum: 10c0/3321f944a36c7a9a8ef17f5c58b29ef06107c9bc682d7932f2ea9e1b6f839174d07d053e81285bad8b29c11848e799795e6c016648a6e3a8636d8acfe24183ef + languageName: node + linkType: hard + "@smithy/util-uri-escape@npm:^4.0.0": version: 4.0.0 resolution: "@smithy/util-uri-escape@npm:4.0.0" @@ -7209,6 +7747,7 @@ __metadata: "@ant-design/v5-patch-for-react-19": "npm:^1.0.3" "@anthropic-ai/sdk": "npm:^0.41.0" "@anthropic-ai/vertex-sdk": "patch:@anthropic-ai/vertex-sdk@npm%3A0.11.4#~/.yarn/patches/@anthropic-ai-vertex-sdk-npm-0.11.4-c19cb41edb.patch" + "@aws-sdk/client-bedrock-runtime": "npm:^3.840.0" "@aws-sdk/client-s3": "npm:^3.840.0" "@cherrystudio/embedjs": "npm:^0.1.31" "@cherrystudio/embedjs-libsql": "npm:^0.1.31" @@ -11414,6 +11953,17 @@ __metadata: languageName: node linkType: hard +"fast-xml-parser@npm:5.2.5": + version: 5.2.5 + resolution: "fast-xml-parser@npm:5.2.5" + dependencies: + strnum: "npm:^2.1.0" + bin: + fxparser: src/cli/cli.js + checksum: 10c0/d1057d2e790c327ccfc42b872b91786a4912a152d44f9507bf053f800102dfb07ece3da0a86b33ff6a0caa5a5cad86da3326744f6ae5efb0c6c571d754fe48cd + languageName: node + linkType: hard + "fast-xml-parser@npm:^4.5.0, fast-xml-parser@npm:^4.5.1": version: 4.5.3 resolution: "fast-xml-parser@npm:4.5.3" @@ -19456,6 +20006,13 @@ __metadata: languageName: node linkType: hard +"strnum@npm:^2.1.0": + version: 2.1.1 + resolution: "strnum@npm:2.1.1" + checksum: 10c0/1f9bd1f9b4c68333f25c2b1f498ea529189f060cd50aa59f1876139c994d817056de3ce57c12c970f80568d75df2289725e218bd9e3cdf73cd1a876c9c102733 + languageName: node + linkType: hard + "strtok3@npm:^6.2.4": version: 6.3.0 resolution: "strtok3@npm:6.3.0"