From e7edf4cf918f69ff2d695cfe97974b2ec622c843 Mon Sep 17 00:00:00 2001 From: Nithin Chandran Rajashankar Date: Thu, 30 Apr 2026 02:58:01 +0000 Subject: [PATCH 1/6] feat(bedrock-agent-openai-cdk): Add Bedrock Agent with OpenAI GPT OSS pattern Deploy an Amazon Bedrock Agent powered by OpenAI GPT OSS model with a Lambda action group for tool use (weather + time). First pattern combining Bedrock Agents with OpenAI models on Bedrock. --- bedrock-agent-openai-cdk/README.md | 104 +++++++++++++ bedrock-agent-openai-cdk/bin/app.ts | 7 + bedrock-agent-openai-cdk/cdk.json | 3 + bedrock-agent-openai-cdk/example-pattern.json | 50 +++++++ .../lib/bedrock-agent-openai-stack.ts | 138 ++++++++++++++++++ bedrock-agent-openai-cdk/package.json | 15 ++ bedrock-agent-openai-cdk/src/index.js | 46 ++++++ bedrock-agent-openai-cdk/tsconfig.json | 17 +++ 8 files changed, 380 insertions(+) create mode 100644 bedrock-agent-openai-cdk/README.md create mode 100644 bedrock-agent-openai-cdk/bin/app.ts create mode 100644 bedrock-agent-openai-cdk/cdk.json create mode 100644 bedrock-agent-openai-cdk/example-pattern.json create mode 100644 bedrock-agent-openai-cdk/lib/bedrock-agent-openai-stack.ts create mode 100644 bedrock-agent-openai-cdk/package.json create mode 100644 bedrock-agent-openai-cdk/src/index.js create mode 100644 bedrock-agent-openai-cdk/tsconfig.json diff --git a/bedrock-agent-openai-cdk/README.md b/bedrock-agent-openai-cdk/README.md new file mode 100644 index 000000000..7c7fda510 --- /dev/null +++ b/bedrock-agent-openai-cdk/README.md @@ -0,0 +1,104 @@ +# Amazon Bedrock Agent with OpenAI model + +This pattern deploys an Amazon Bedrock Agent powered by an OpenAI GPT OSS foundation model with a Lambda action group that provides tool-use capabilities. + +Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/bedrock-agent-openai-cdk + +Important: this application uses various AWS services and there are costs associated with these services after the Free Tier usage - please see the [AWS Pricing page](https://aws.amazon.com/pricing/) for details. You are responsible for any AWS costs incurred. No warranty is implied in this example. + +## Requirements + +* [Create an AWS account](https://portal.aws.amazon.com/gp/aws/developer/registration/index.html) if you do not already have one and log in. The IAM user that you use must have sufficient permissions to make necessary AWS service calls and manage AWS resources. +* [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) installed and configured +* [Git Installed](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +* [Node.js 22+](https://nodejs.org/en/download/) installed +* [AWS CDK v2](https://docs.aws.amazon.com/cdk/v2/guide/getting-started.html) installed +* [Amazon Bedrock model access](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html) enabled for OpenAI GPT OSS 20B in your target region + +## Architecture + +``` +┌──────────┐ ┌──────────────────────┐ ┌──────────────────┐ +│ User │────▶│ Bedrock Agent │────▶│ Lambda Action │ +│ (CLI) │ │ (OpenAI GPT OSS) │ │ Group Handler │ +└──────────┘ └──────────────────────┘ └──────────────────┘ + │ Orchestrates tool use │ │ getWeather │ + │ via OpenAI model │ │ getTime │ + └──────────────────────┘ └──────────────────┘ +``` + +## How it works + +1. The Bedrock Agent receives a natural language query from the user. +2. The agent uses the OpenAI GPT OSS foundation model to reason about the query and decide which tools to call. +3. When the agent determines it needs weather or time data, it invokes the Lambda action group with the appropriate API path and parameters. +4. The Lambda function returns structured data, which the agent incorporates into its final natural language response. + +## Deployment Instructions + +1. Clone the repository: + ```bash + git clone https://github.com/aws-samples/serverless-patterns + cd serverless-patterns/bedrock-agent-openai-cdk + ``` + +2. Install dependencies: + ```bash + npm install + ``` + +3. Deploy the stack: + ```bash + cdk deploy + ``` + +4. Note the outputs printed after deployment. You will need `AgentId` and `AgentAliasId` for testing. + Example output: + ``` + Outputs: + BedrockAgentOpenaiStack.AgentId = 2VHQREVYJM + BedrockAgentOpenaiStack.AgentAliasId = WRP0JKNQFL + BedrockAgentOpenaiStack.FunctionName = BedrockAgentOpenaiStack-ActionGroupFn-AbCdEfGh + ``` + +## Testing + +1. Invoke the agent. Replace `` and `` with the values from the deploy output: + ```bash + aws bedrock-agent-runtime invoke-agent \ + --agent-id \ + --agent-alias-id \ + --session-id test-session-1 \ + --input-text "What is the weather in Tokyo?" \ + --region us-east-1 + ``` + For example, if your deploy output showed AgentId = 2VHQREVYJM and AgentAliasId = WRP0JKNQFL: + ```bash + aws bedrock-agent-runtime invoke-agent \ + --agent-id 2VHQREVYJM \ + --agent-alias-id WRP0JKNQFL \ + --session-id test-session-1 \ + --input-text "What is the weather in Tokyo?" \ + --region us-east-1 + ``` + +2. Try a multi-tool query: + ```bash + aws bedrock-agent-runtime invoke-agent \ + --agent-id \ + --agent-alias-id \ + --session-id test-session-2 \ + --input-text "What is the weather and current time in London?" \ + --region us-east-1 + ``` + +## Cleanup + +```bash +cdk destroy +``` + +---- +Copyright 2026 Amazon.com, Inc. or its affiliates. All Rights Reserved. + +SPDX-License-Identifier: MIT-0 diff --git a/bedrock-agent-openai-cdk/bin/app.ts b/bedrock-agent-openai-cdk/bin/app.ts new file mode 100644 index 000000000..315f38881 --- /dev/null +++ b/bedrock-agent-openai-cdk/bin/app.ts @@ -0,0 +1,7 @@ +#!/usr/bin/env node +import "source-map-support/register"; +import * as cdk from "aws-cdk-lib"; +import { BedrockAgentOpenaiStack } from "../lib/bedrock-agent-openai-stack"; + +const app = new cdk.App(); +new BedrockAgentOpenaiStack(app, "BedrockAgentOpenaiStack"); diff --git a/bedrock-agent-openai-cdk/cdk.json b/bedrock-agent-openai-cdk/cdk.json new file mode 100644 index 000000000..a6700a2ff --- /dev/null +++ b/bedrock-agent-openai-cdk/cdk.json @@ -0,0 +1,3 @@ +{ + "app": "npx ts-node --prefer-ts-exts bin/app.ts" +} diff --git a/bedrock-agent-openai-cdk/example-pattern.json b/bedrock-agent-openai-cdk/example-pattern.json new file mode 100644 index 000000000..1a26ca6e3 --- /dev/null +++ b/bedrock-agent-openai-cdk/example-pattern.json @@ -0,0 +1,50 @@ +{ + "title": "Amazon Bedrock Agent with OpenAI model", + "description": "Deploy an Amazon Bedrock Agent powered by OpenAI GPT OSS with a Lambda action group for tool use.", + "language": "TypeScript", + "level": "300", + "framework": "AWS CDK", + "services": { + "from": "bedrock", + "to": "lambda" + }, + "introBox": { + "headline": "How it works", + "text": [ + "This pattern deploys an Amazon Bedrock Agent that uses an OpenAI GPT OSS foundation model to orchestrate tool-use workflows. The agent reasons about user queries and invokes a Lambda action group to retrieve weather and time data.", + "OpenAI GPT OSS models are available on Amazon Bedrock with the same security, governance, and API experience as other Bedrock models. The agent uses the standard Bedrock Agent orchestration to plan and execute multi-step tool calls." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/bedrock-agent-openai-cdk", + "templateURL": "serverless-patterns/bedrock-agent-openai-cdk", + "projectFolder": "bedrock-agent-openai-cdk", + "templateFile": "lib/bedrock-agent-openai-stack.ts" + } + }, + "resources": { + "bullets": [ + { "text": "Amazon Bedrock Agents", "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html" }, + { "text": "OpenAI models on Amazon Bedrock", "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-openai.html" }, + { "text": "Bedrock Agent action groups", "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html" } + ] + }, + "deploy": { + "text": ["cdk deploy"], + "file": "lib/bedrock-agent-openai-stack.ts" + }, + "testing": { + "text": ["See the README for testing instructions."] + }, + "cleanup": { + "text": ["cdk destroy"] + }, + "authors": [ + { + "name": "Nithin Chandran R", + "bio": "Technical Account Manager at AWS", + "linkedin": "nithin-chandran-r" + } + ] +} diff --git a/bedrock-agent-openai-cdk/lib/bedrock-agent-openai-stack.ts b/bedrock-agent-openai-cdk/lib/bedrock-agent-openai-stack.ts new file mode 100644 index 000000000..c20a4342b --- /dev/null +++ b/bedrock-agent-openai-cdk/lib/bedrock-agent-openai-stack.ts @@ -0,0 +1,138 @@ +import * as cdk from "aws-cdk-lib"; +import * as bedrock from "aws-cdk-lib/aws-bedrock"; +import * as iam from "aws-cdk-lib/aws-iam"; +import * as lambda from "aws-cdk-lib/aws-lambda"; +import { Construct } from "constructs"; + +export class BedrockAgentOpenaiStack extends cdk.Stack { + constructor(scope: Construct, id: string, props?: cdk.StackProps) { + super(scope, id, props); + + const modelId = new cdk.CfnParameter(this, "ModelId", { + type: "String", + default: "openai.gpt-oss-20b-1:0", + description: "Bedrock foundation model ID (OpenAI GPT OSS)", + allowedValues: [ + "openai.gpt-oss-20b-1:0", + "openai.gpt-oss-120b-1:0", + ], + }); + + // Lambda action group handler + const actionFn = new lambda.Function(this, "ActionGroupFn", { + runtime: lambda.Runtime.NODEJS_22_X, + handler: "index.handler", + code: lambda.Code.fromAsset("src"), + timeout: cdk.Duration.seconds(30), + memorySize: 256, + description: "Bedrock Agent action group handler", + }); + + // Agent execution role + const agentRole = new iam.Role(this, "AgentRole", { + assumedBy: new iam.ServicePrincipal("bedrock.amazonaws.com"), + description: "Role for Bedrock Agent with OpenAI model", + }); + + agentRole.addToPolicy( + new iam.PolicyStatement({ + actions: ["bedrock:InvokeModel"], + resources: [ + `arn:aws:bedrock:${this.region}::foundation-model/${modelId.valueAsString}`, + ], + }) + ); + + // Bedrock Agent + const agent = new bedrock.CfnAgent(this, "Agent", { + agentName: `openai-assistant-${cdk.Names.uniqueId(this).slice(-8).toLowerCase()}`, + foundationModel: modelId.valueAsString, + agentResourceRoleArn: agentRole.roleArn, + instruction: + "You are a helpful assistant that answers questions about weather and time. " + + "Use the provided action group tools to look up current weather and time for any city.", + idleSessionTtlInSeconds: 600, + actionGroups: [ + { + actionGroupName: "CityInfoActions", + actionGroupExecutor: { lambda: actionFn.functionArn }, + apiSchema: { + payload: JSON.stringify({ + openapi: "3.0.0", + info: { title: "City Info API", version: "1.0.0" }, + paths: { + "/getWeather": { + get: { + operationId: "getWeather", + description: "Get current weather for a city", + parameters: [ + { + name: "city", + in: "query", + required: true, + schema: { type: "string" }, + description: "City name", + }, + ], + responses: { + "200": { + description: "Weather info", + content: { + "application/json": { + schema: { type: "object" }, + }, + }, + }, + }, + }, + }, + "/getTime": { + get: { + operationId: "getTime", + description: "Get current time for a city", + parameters: [ + { + name: "city", + in: "query", + required: true, + schema: { type: "string" }, + description: "City name", + }, + ], + responses: { + "200": { + description: "Time info", + content: { + "application/json": { + schema: { type: "object" }, + }, + }, + }, + }, + }, + }, + }, + }), + }, + }, + ], + autoPrepare: true, + }); + + // Allow Bedrock to invoke the Lambda + actionFn.addPermission("BedrockInvoke", { + principal: new iam.ServicePrincipal("bedrock.amazonaws.com"), + sourceArn: agent.attrAgentArn, + }); + + // Agent alias for invocation + const alias = new bedrock.CfnAgentAlias(this, "AgentAlias", { + agentId: agent.attrAgentId, + agentAliasName: "live", + }); + + new cdk.CfnOutput(this, "AgentId", { value: agent.attrAgentId }); + new cdk.CfnOutput(this, "AgentAliasId", { value: alias.attrAgentAliasId }); + new cdk.CfnOutput(this, "FunctionName", { value: actionFn.functionName }); + } +} diff --git a/bedrock-agent-openai-cdk/package.json b/bedrock-agent-openai-cdk/package.json new file mode 100644 index 000000000..46fbfe842 --- /dev/null +++ b/bedrock-agent-openai-cdk/package.json @@ -0,0 +1,15 @@ +{ + "name": "bedrock-agent-openai-cdk", + "version": "1.0.0", + "bin": { "app": "bin/app.ts" }, + "scripts": { "build": "tsc", "cdk": "cdk" }, + "dependencies": { + "aws-cdk-lib": "^2.180.0", + "constructs": "^10.4.2" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "ts-node": "^10.9.0", + "typescript": "~5.7.0" + } +} diff --git a/bedrock-agent-openai-cdk/src/index.js b/bedrock-agent-openai-cdk/src/index.js new file mode 100644 index 000000000..5c0541c69 --- /dev/null +++ b/bedrock-agent-openai-cdk/src/index.js @@ -0,0 +1,46 @@ +// Bedrock Agent action group handler — returns mock city info +const VALID_PATHS = new Set(["/getWeather", "/getTime"]); + +exports.handler = async (event) => { + const actionGroup = event.actionGroup; + const apiPath = event.apiPath; + const params = event.parameters || []; + const city = (params.find((p) => p.name === "city")?.value || "").slice(0, 100).replace(/[^\w\s-]/g, ""); + + if (!city) { + return response(actionGroup, apiPath, event.httpMethod, 400, { error: "city parameter is required" }); + } + + if (apiPath === "/getWeather") { + return response(actionGroup, apiPath, event.httpMethod, 200, { + city, + temperature: `${Math.floor(Math.random() * 30 + 5)}°C`, + condition: ["Sunny", "Cloudy", "Rainy", "Windy"][Math.floor(Math.random() * 4)], + humidity: `${Math.floor(Math.random() * 60 + 30)}%`, + }); + } + + if (apiPath === "/getTime") { + const now = new Date(); + return response(actionGroup, apiPath, event.httpMethod, 200, { + city, + utcTime: now.toISOString(), + localNote: `Current UTC time is ${now.toUTCString()}. Adjust for ${city} timezone.`, + }); + } + + return response(actionGroup, apiPath, event.httpMethod, 400, { error: "Unknown action" }); +}; + +function response(actionGroup, apiPath, httpMethod, statusCode, body) { + return { + messageVersion: "1.0", + response: { + actionGroup, + apiPath, + httpMethod, + httpStatusCode: statusCode, + responseBody: { "application/json": { body: JSON.stringify(body) } }, + }, + }; +} diff --git a/bedrock-agent-openai-cdk/tsconfig.json b/bedrock-agent-openai-cdk/tsconfig.json new file mode 100644 index 000000000..3628e7ff6 --- /dev/null +++ b/bedrock-agent-openai-cdk/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["es2020"], + "declaration": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "esModuleInterop": true, + "outDir": "build", + "rootDir": "." + }, + "exclude": ["node_modules", "cdk.out"] +} From 043a3da8a1dbb2bf80f3c666ef28f8329730f88b Mon Sep 17 00:00:00 2001 From: Nithin Chandran Rajashankar Date: Tue, 5 May 2026 09:12:39 +0000 Subject: [PATCH 2/6] fix(readme): replace invalid invoke-agent CLI with Python SDK The InvokeAgent API returns a streaming response that the AWS CLI does not support. Replaced with Python SDK snippet that correctly handles the event stream. --- bedrock-agent-openai-cdk/README.md | 79 ++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/bedrock-agent-openai-cdk/README.md b/bedrock-agent-openai-cdk/README.md index 7c7fda510..88418b5c5 100644 --- a/bedrock-agent-openai-cdk/README.md +++ b/bedrock-agent-openai-cdk/README.md @@ -63,34 +63,59 @@ Important: this application uses various AWS services and there are costs associ ## Testing -1. Invoke the agent. Replace `` and `` with the values from the deploy output: - ```bash - aws bedrock-agent-runtime invoke-agent \ - --agent-id \ - --agent-alias-id \ - --session-id test-session-1 \ - --input-text "What is the weather in Tokyo?" \ - --region us-east-1 - ``` - For example, if your deploy output showed AgentId = 2VHQREVYJM and AgentAliasId = WRP0JKNQFL: - ```bash - aws bedrock-agent-runtime invoke-agent \ - --agent-id 2VHQREVYJM \ - --agent-alias-id WRP0JKNQFL \ - --session-id test-session-1 \ - --input-text "What is the weather in Tokyo?" \ - --region us-east-1 - ``` +The Bedrock Agent `InvokeAgent` API returns a streaming response, so use the Python SDK (not the CLI). Replace `` and `` with the values from the deploy output: -2. Try a multi-tool query: - ```bash - aws bedrock-agent-runtime invoke-agent \ - --agent-id \ - --agent-alias-id \ - --session-id test-session-2 \ - --input-text "What is the weather and current time in London?" \ - --region us-east-1 - ``` +```bash +python3 -c " +import boto3, json +client = boto3.client('bedrock-agent-runtime', region_name='us-east-1') +response = client.invoke_agent( + agentId='', + agentAliasId='', + sessionId='test-session-1', + inputText='What is the weather in Tokyo?' +) +for event in response['completion']: + if 'chunk' in event: + print(event['chunk']['bytes'].decode()) +" +``` + +For example, if your deploy output showed AgentId = `2VHQREVYJM` and AgentAliasId = `WRP0JKNQFL`: + +```bash +python3 -c " +import boto3 +client = boto3.client('bedrock-agent-runtime', region_name='us-east-1') +response = client.invoke_agent( + agentId='2VHQREVYJM', + agentAliasId='WRP0JKNQFL', + sessionId='test-session-1', + inputText='What is the weather in Tokyo?' +) +for event in response['completion']: + if 'chunk' in event: + print(event['chunk']['bytes'].decode()) +" +``` + +Try a multi-tool query: + +```bash +python3 -c " +import boto3 +client = boto3.client('bedrock-agent-runtime', region_name='us-east-1') +response = client.invoke_agent( + agentId='', + agentAliasId='', + sessionId='test-session-2', + inputText='What is the weather and current time in London?' +) +for event in response['completion']: + if 'chunk' in event: + print(event['chunk']['bytes'].decode()) +" +``` ## Cleanup From a3f1cd52447d12c8aa5d1bdc82a5803ac0b250ef Mon Sep 17 00:00:00 2001 From: ellisms <114107920+ellisms@users.noreply.github.com> Date: Fri, 8 May 2026 10:18:53 -0400 Subject: [PATCH 3/6] tagging --- bedrock-agent-openai-cdk/bin/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bedrock-agent-openai-cdk/bin/app.ts b/bedrock-agent-openai-cdk/bin/app.ts index 315f38881..3fdcb0090 100644 --- a/bedrock-agent-openai-cdk/bin/app.ts +++ b/bedrock-agent-openai-cdk/bin/app.ts @@ -3,5 +3,6 @@ import "source-map-support/register"; import * as cdk from "aws-cdk-lib"; import { BedrockAgentOpenaiStack } from "../lib/bedrock-agent-openai-stack"; +const description = "Sample app (uksb-1tthgi812) (tag:bedrock-agent-openai-cdk)" const app = new cdk.App(); -new BedrockAgentOpenaiStack(app, "BedrockAgentOpenaiStack"); +new BedrockAgentOpenaiStack(app, "BedrockAgentOpenaiStack",{description}); From 0759a629093a0d9fb82b675a9efb0c1a2ff5805d Mon Sep 17 00:00:00 2001 From: Nithin Chandran Rajashankar Date: Fri, 8 May 2026 14:23:12 +0000 Subject: [PATCH 4/6] fix: address review comments on PR #3084 - Update description to use full 'AWS Lambda' service name - Replace ASCII architecture diagram with PNG image - Add figure caption for accessibility --- bedrock-agent-openai-cdk/README.md | 14 ++++---------- bedrock-agent-openai-cdk/architecture.png | Bin 0 -> 20789 bytes 2 files changed, 4 insertions(+), 10 deletions(-) create mode 100644 bedrock-agent-openai-cdk/architecture.png diff --git a/bedrock-agent-openai-cdk/README.md b/bedrock-agent-openai-cdk/README.md index 88418b5c5..483fc1a33 100644 --- a/bedrock-agent-openai-cdk/README.md +++ b/bedrock-agent-openai-cdk/README.md @@ -1,6 +1,6 @@ # Amazon Bedrock Agent with OpenAI model -This pattern deploys an Amazon Bedrock Agent powered by an OpenAI GPT OSS foundation model with a Lambda action group that provides tool-use capabilities. +This pattern deploys an Amazon Bedrock Agent powered by an OpenAI GPT OSS foundation model with an AWS Lambda action group that provides tool-use capabilities. Learn more about this pattern at Serverless Land Patterns: https://serverlessland.com/patterns/bedrock-agent-openai-cdk @@ -17,15 +17,9 @@ Important: this application uses various AWS services and there are costs associ ## Architecture -``` -┌──────────┐ ┌──────────────────────┐ ┌──────────────────┐ -│ User │────▶│ Bedrock Agent │────▶│ Lambda Action │ -│ (CLI) │ │ (OpenAI GPT OSS) │ │ Group Handler │ -└──────────┘ └──────────────────────┘ └──────────────────┘ - │ Orchestrates tool use │ │ getWeather │ - │ via OpenAI model │ │ getTime │ - └──────────────────────┘ └──────────────────┘ -``` +![Architecture diagram showing User sending a request to Amazon Bedrock Agent (OpenAI GPT OSS), which orchestrates tool use by invoking an AWS Lambda action group handler with getWeather and getTime tools](architecture.png) + +*Figure 1: The user sends a natural language query to the Bedrock Agent. The agent uses the OpenAI GPT OSS model to reason about which tools to call, invokes the Lambda action group, and synthesizes the result.* ## How it works diff --git a/bedrock-agent-openai-cdk/architecture.png b/bedrock-agent-openai-cdk/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..4d4dc70521335696075637c7157ea10da2b5cca3 GIT binary patch literal 20789 zcmc$`bySp5|1XN7C?Mc~h=70+QUcNqA_GW+bW3-~(1?l*E!{PABR!;&(wzeg-7xgf zb06Q|JvYu;=lpf=Icv>Y4>JR^pV{%hQIHrHhe`6udccZx*mk!ZuG;^Lr&j6 zyuJrCgjE^XfBx@^wX_-Z?%&N|l}fyL`0qOPD*WHAVA(#E{`Z?-cpvBdd-|K=yXwE| zXM%R7f7ePJ<7fY_+TZ?v|8otVfJ<)@AI8MHoK~NHQJhG=Uyzh0&q0Xe3 zU-X&A@EFaee}YI1jb$3vp~0*0_F?mZIKemPN(1627DI$o*OAFwo7>f7c2T>j`seW1 zDHA1I^}OTTD;lZAbYTHL)!XFByLEdz=V2v^tYnC(1#bfCYWL|sX=(E)fseiPA}MFVmkqYOvXejT2b9L>JBt2KmSFJqu@-4!+4TkK%e zt*s<#-0?c;!gr}JWMM_jX%D3A zSUA{#!8)^o@>-6q8#KAau=#TLu+lwDe+AIZk>0m;C9Xc^3|+!R)F)4Fzbus$k@BHydQ3F*fG64|!%)3IfrtTy>53ZzwUj;eoxqwFZ;rw?Kb6!j)N0oYa4WhbyS6j%MdrrXlKI!@l(l zLGh&A=|w8&#pM}>4=80beBc~UdpQC*L|5XyhCU`)!_x_!({&w$%Y@O&*FVK9)|P@? z^FgEGUi~dM4s+VcMgpxe?YYG$C7i<8N-jL{imzYW5fJL9(Z!)v(b?2$4W5(vlazHu z{B}>*HsSu0_b~{_qZ^^4*^`g7x|P1S44J$6(m0!u2M05)5va2-RrZEWq%#AH8&_SX z{OmN0uuJ*rGK^1RTAJM#bZ@{kM;nIebowaZo#PC+X2P$(iZ`Gj&rhV;Cl;8w8~M@@ zR4}wYAuf%}=4N1`hG-vAH(%{;KT9tM-ekYVdvITabX~E8%vm6waroWx|bTvpTXj5S@Oe5$E_wT)W!q5y(KSCEy~f6>MgfMMg#Ol#1e2 z1~{a!R+4*zI?@v)1%9pE9IJ#EnLpPrNR`9nB-$G*xFea{l(w4XIc28jRWlh#F;$>Z z!f(=}OpoVREejLVyw8Q1?}wOS-T+#Plii=v1e9*O^M9uLn(g`(?cN3xZn3fU)4}S0 z9Rb}+JbHorQN(XE^XHd2LUZu){vV_;;XA){5uapezS2b*yrnF(>Jw&>Jw0tMG{qaU zyjpm~9UG%2RA<|A?Fh*qtQs;reGO|BZQ9zl;XE2TS=sE!Il`4yc<$^`9AfOJ5#Pt7aT(nl5@O0HSC+&#rOpUzZ-;f}nyF^zCCg?~r%zH$KwPP$ z!CHqXQtb@`M!usQ%Ny{r1>!QrQ2;l~AFIxgd?1pK{1z2~>tCrIavvAMJH=4#h;R5;#3F#FN6A6JbqJ#3W7=RPUF zS?y$1ulp#GSG1I@C+T{cy?_74>1`T+)VA}b1rcnGr$cd0_x(}Jv3h|J@qA03!ip=F zE4J|*rdf$4%z z5q^gkIgHCu8Q(#ww!!)Fb_K_DAcND6=!VFycO#gak0I1mTBDBmczA8=V$nBF>K2jV z_xzgd7wgbBq-`rE{-%m&2L@?(vtBB0CEqvW*DS3WXpX9Y5u)Lot zcR5($_=#t9U&H@EHVNoIO$m7H)toT-lI4$gc;X!7@EL-Ek9Ud`T{TwRg#-oQ{lTWm87W}m9J{TIdqJae~REMJ3cw4_U@?{<0Lbdmv8aIjL1{Hs~ znZ|~_U9%MgH@56a?<4jiv;7lO?;pdHdUcx5cL*jGA_#^I&e@ol)|>>`V~q14Ytv2ASZ4%yJMK}0=TJ367slLOpORXta%`@BfAPeFjn}cfmH{6}@1g7qj$f*lKd28C-cLDBlz`8?|nr!UvSCX~s6$^b!*j z9nG?O^ay@<%lV=fj7<*rk zbCSISMK?F6wWLpOfxgYvI)8T1tu>2G4$0n>%KX!&sQNRJpKD}yx@4E5r3n;$JqG9E z8k=@}h^7=<{N;WEtnj{;EW`Pf^%I3~0-%UH?{LNeAZ)g|w+6SIEfv9CU#`!C80h?a z@)cc(%dHU?e|^5kWqSPLXdy2*x6V;t&}1I9JWRKcKPcQ9P;&98)6?+qH7yC9-%&gZ zKDVi$&g{+C`@>;kK>0tA-|YJ+Z*)SmBRnt&G_Is%?}#%WosdxMR7Fa`S2^7Avmh!{ z#CEbs9CVp3ZlZr2@_@FCDy5r|9;6zU?*X2GB~zUw%=i7d(@TkeuO+j4Ty*P0l->+_ zy0^vk6ME`iTcCV1IOwk3;*Gb$+ay%qMs@S~tb1QaXI9i8O^ZEcFiz`ItZ1M^^)lq+ zoB!+qS8P!Y4>U6V&FDTRv>=^vzR^z2yvOt5e-S$Zn)%F~@H&@M_fwz@NUWexab3gVCAHyu|sfCFpSI zh3!>S43?c3Hy3WAyI0sOp;f>|Ihig4lD=ny7YhbSW+#}?G9PbEo5nDiFim_?pf8&e z3B^ysvUw20G~qE&O}3fr%RsMMxSwR{Ses$__5UWVh5p*lgBtIJ$RaST!UV`>TC)|5)b~VFrD+Ir-K6r1=;)w8UFk-A{ zZeuGxP?g|~w(!BiI;7HX^@nU!r4Q8A2R9{06E>|DrEpgBKUgHPtjlZAH_!9tdyW$j zPC3)r2VDrfcT?$r^sTg>+!T+fJ1{DDEK~$QDdQDmoCT6R|M)Z$}cBiwFa|F ziGzsaHRJCwRV$pb9Hs;*8~H6h_K^Z>dgKp86-4UKw%w{@ z^8#b6Nz-zOj^Pc^o=x5`+noAKzhoI4ulhxoL-1@Bm;nHP>|X1w-U`z~4Wx^J<>W%) zljfbx{LZLGh?|OPIYjhbZe?LZs#@6cZ5scc5EU_XUNP)+mm|I4W-1Y?Z&})OBJdU3 zpdT3;W8x}2E*SfRVwe97>@d+Wz*$eX7@55KNa?nW#^}{dK>KE?@@IV$7G>$iki4T) z&ReRz!DJy(>A@)P)UB~>FFIZgOp`LVm^ptvuWKg1rdmtjnrv_HahfjT@}Wpy-%v!P zY)w5M=<)Yp(Ta@LJ(|>?u;NlHTWcQMoA<7!2KoM)9tUHJ!4(gG6tYa)ZhnqE!(7Ib zOHZE<#>YQ95D8s6GIL0qe`UOOKk)D(h_ayKL34;-L8*F0rhF>0hwx|OYCMIR-G{!z zq7pT6Gl9Cw#TJMBG`np)tjV2@>(h~*;gG-WeHZH|(|6Mc@JJeZhAv)C{-3e2gTow9 z&#S&{#n{~Map9-REX8ukjo6@otiATwTe`w$?j^dtaK+VRMFbU zoB0K=IiS#vWhUn7>KaaGD)Emp%CXS=n>r>=F}Qv3MyTA`!6R{I78Zx`RvomM61C58 zOE^^Xljh#+u-9QlOQ&A{U@xNX$Z0DFTBs?|il=Zn)D|W7m{3E#+!8s@ zg2ou3h`X`G-;{>mpYY!F{rcd3c5&!Repjr(OQpFU1)$&MC*jXuj1|bIN~UgFm~VP} zFWjA>c~A16AgUcSZFH|TS~4Is;*7LW0UJ_}yugpVM9vol3$?Cy17DMD+B3gpc|)s* z53t(5h~PQC`sa>bcPW0mkc^nsqx(a4SCI9Z>uipITR#F4n=T*6@qwLz1BNq=XO2iB zz3N+VP%I16+eSa}G^o19vxw7LsMS&Tw~~5lH7zv)AAAJsqK(m$>dss5i2Cci*bbe!DaUsi`R4`T632fN9fWG^s%7Sa2RZ_VPXt#S z97=uA7)vl%mYGI+P&@VNb&ek^LUh;ib;yUorfrA}(=!%k)*=0+?qw&gF>%pW8foyS zPx^1<#PEHj7)r8R9=RnXBt$-CeND@X7&hi%WetXkMEUqoqa#DZL60A3P>zL0RC6rO zLyk6DR}U z9>w15$Y_4%xNkT@(qxg4>cKX}KStPm`FZzBQsJ^LBG?hxP*H;PT#XE3(?u-6Z!b!K z(F8=rFS@8wyR?3KMG3~EE>IEhU)anMBu|u#6u`-{o z3nDdob>V{)JZjl1i)a!SE-Wb$;`#Lowpn4qpukASjmS+eaW8NN#zFAqP+Ev&94V;@ z$tNWv!dEbB(<^=z4V%r+Ww|r>*%xT{ll`f}Kso+`=XKA2nCm&1 znDf*)%IIV~0m;7b0@h)#{2iFb-K}k-E}up2>G2RT!g0KmH`GZ?l{{t^-a_C zklEaWLSz1$uOWYnTv-*%r1=yFLbiUOFjPeWB&4aCTE8ERv#%FCI15B|_ z0#Ye|i^F0+$Is2le^Jc&I|>H?IX3md%5wkmS@S@{40n+<1TuB)H9&RqUfEo4YCstj^>d@?kOIUNJCmJDK`DCXxr-!NiM`uTsO-SiASP!?4x(s*00? zag-|wzszocz@u^aXY?PAPoMvs92P=Ciog>^dU_j}!;wTHRFJuaSy3Sir*YgcSu+$G z`8X;jHj$Tavf9Dq{P=Qrb6FLnOeeedLKLK!%p1zu1*bXvK1}vh)kCu!x&CDWV%;vKISZ6>7uRD7Yo1rMguy@$f#P-BCdNjY zYC&YNe>*j4ZAvG%PRizXMoj`#wFGc3MwcK=@Ao~**Ie@MRuiCjVPThK6^rEDxv7QV z(CdI;iQHT{|F@TlRIxury#9!Hb=?TY28UCPiE=WO^;g2doz2{!(eX{k=Vh21PFC&( z91j~?qf3d-xHIWN}{j{u;x&`{y;4E;)fXn zBqVo~mw7~$Af?97xG-fQc;(gWsU3v+hKlJxUwWUKDwsH&Dr^A zpAxMWJDyTkx#0qz^02T}zLBaW<2TsS)6ST$dvi9U4uT#o`o4Pl zIO9k264^;!ZXSzZZtnMIXa>Y(m+$lu_BFvlO3ICK)$Rvc;zNw^*6?jRiq=?=V;1wc zzXiU=z~ZlG{;#gQ%zsqab$pE9>?ryQW{MfI9NG>iJk}Pw=BE|fb-yl235ABUv2T!! zexcqsH_JtKGK3*hu3noSe+@_?9i$#&OUBQDestpzc_X%dBK@Jt^O7Hgm(0&ZZp|#* zKTPoByG(qUmCeOvPN@lrIMFv9&iME3f2I854fII27k_neEFk_V1^o~lQBO_yC6+J$ z<>kYH?48Nf&3BtJhRtxtF`72wQG(3Rv@1tu3T#iHOiNdyEIJQrYj~Gk;PsC4rW7C} za&snTR$yVeOx>@~xJ?iFXed#BEE@-11a}>UUH)gbT3c^-Uf>!2AeCeBlH#`g4bHX9 zDznToC|0Rar850O@#P(!O4#MRcT#NX@VZN9M`lYcC#c1jislGoX(Vf5k=wEE0^QO) zj0H+kJyr87f7_+o!-*O<+A5w=y*8(>h4U&}uJ5Bfz%{7vke%T0tVhEKV*cy^v0vs} z(%X;%OG$M-QocTVc%LwMe6aV=dl^@!3PNzr?O_*Gi&GGOshruSbA*mwC37H-&ZrZr z7V$caLtaNE``?SAU;B$E1qoH=m%?h01d>F z-JGoHobnHmEtSmUdZs0&4lg@(Dkt((^U%YR_;D+8Op54jxgPPCrY3=+zkY2F{6(k+ z%X;N#1!J9q9PLFU4jV@KrE06FT!@{mmXJCAtFt8)6!96^e69_*qYIU%QON}&?0%~} zNa>zO3*Je|(eBGNG@x3CX?1xSNwpGH1mR%F)>v}MHVrol=LeJ~2XpYRcRNn8YLg14 z?P<9KyXl91}Y*zM~D<{h4B%l)#!CoHpZMcH-N&CUoy1O3L?)sf^9$t!`N7EiUh zxv(t(1iQlk-^r+w?M74b3#-gCTsI1yFh;tCs*tW4&Rg9%J$0{70}mCz^c;+~j`m#M zmGVsqeBc_JMQv_6DrMB~KO|aAfBPx6ZO>e-ujL^!798ld?p}bl6M4@&?h*GqpIQ(W zit~|Z5x}K0y4-xhElH(Zfyl8a)lk*kL(~q2JLj#|#>GvXPmaqdxDo|iPT3FTuOgm9 z#Vql%8aaEm&Ysk)t(i*&;Yc@%=olJHECVyvRLw8-%|=E~%k~M&_GX)w{oVi)+y#ox zi@=rHQ+Vb+_+z>mTiIKGsK0;nsf>Y|{n88lt^AOj?+KRT0;qAYd}VwDz+gHPZEBp~^}-JC!94dIU&fmNloKjq zP**Mb^ot|!){Z)@H|L&>J5MAqc>m~Y3WcbGqX|kqcHuS+CW$>m{m=e6t?vcbW=_Osiw3PYR5)q-+I5zMDmTfU-xQR}jf%Z$la{WR>qxsKj_4gR>Vc(wa z-OqG?G(-LPCj8Jn3(Nh_`Yyzh9nov&Mz0t- z3Sh;#WhF)D4%)P|67~?*3`nyEPOgB6);2}=lp*E;$h)gjGFkO*E0#Q zqP;?fNLZ`q+0cBiWNvP5l3sO{D}Zf%+1`OQ;2AmJ6g`wODln3xq51D$iR^iuotk52 zzCY72m(r8Z(OG?zLb*$<8l`%Yv-qab&1&(Z;w0u^JY0Ep(0*`!Gh$NRam4ZzMmFjU zK7DhLE-S1BIDnsTerN3KG~om41I=PVu$aFR__<~`M`qi3o5!&G%`4`jVa6rgpbwd0 zchkQ2NmgP=NlDWhYpBH;B2u+ED$|MYq278-6U1c9W9dC2N3d@69Tw;Z69 z|L3K)ZM5p0RGTxjp0r#UzJt z`+lkj@X3j>u?Bm0O`*lapd#Bs;8D9jqOV?%`zQbG87Z*q{fv%YboQJ~^k#%1afbRn zVkRJ;r=8V;iAR6LH+^#u<>4DgHrxL4w3X`%&5ok25?dFjvFEysGTLQkQD3FIhs4?Z z9}*;~dUkEd(pYU1P9udSn%&jLesdS2;*0E}Br0F@RxnWH-MSIqB~v_XBN6(1Q)L;= z3B#MdFFD6kEmZ9z>qpv!KzB^piA#VJiOMJzhm)bs~q(swQFUG5D5$U$@jTm&)_x z&(v8kJ(_Uu!@o&7boGE(6L_~^655TX+dL(4bf)8lm!lq z3c$MmBQ~H)ye-=RMKo3H<60;X53XAw`txcx~KD~PSQruHQ zy=Q)`uuSdb%7$g&>w0QoL)Cs~&l_L@11K?XD9+9UIb9J;d4jsJ7C-9CfBu8LMd;9z zD}Fm2kTqnjCq}gEB?}S&N`D*dMhEkecrA;|9G@&)c^^BxcFWN0alh3#}#I3 zVI+!N2YkAtc>l!Wb5=?31pmbNvwh0*V*=M*Kve)Vtdts80^BHCnD#H^oHqlCwn~JY zmgOx=d5F%v_fi?bGA;573^1jIxzM`+PmZ_TbYV~!t!a{0eMs`%blpn>7dx=L*6PWR zIvkLc%pJPE@P{Uy#kZc=H?Wmsf9}UY40;T3X8`bUw+i>~1G{g|af{Z+i4-e3_BX$d zn2!@{bA z{`c5)H-H1RgZ-(XU&5!KXSv}3bwuH_0xfA9`Uj%R z9)aEVke37S)KLlQeoKrr*s{d|a5|#_pu!r<9+gSV`4arAFX(`szuwlOrijOvw@>9X!T3&H~D<%N|6;3f}0uONY9Y} zG&2%L!aR5}?Y3Ba3rMP{Y>9C{NOylDx&19Be@A+fO{_9N(P!24FK- z3XV|9Hy`&`u>D{T>E_Vh-ob#Yo59ewsF!U{)$Qe!wuK;7Io+$^Q)Q%&E|yB5@V%%L zmlMI4kxY%C=;XZDpsr?FPb$)qyqx8+5^PYq;LaJ>io24>L0Jjp;88HKDjfkY?bXHW zZ-QAyfb4+d3K*HzZKp)Z%G6TdMZJ30U1Y+yF}15{LI@2lBUXO?VZWpE`ij-CurO1k zrc*<6`yxSvdkE8BZ@+T#Y#={PoKNEpV(TJHkBFPQiaqU|4mP!)5*j((LG({{x8Ve! z4cN>itLzmABTLP@srcCSb+TvP-Vb$C$s2|#S?So^+1}-%W*8#bN`(daTF7s}x>qNU z#LH6nrv^Uuj0-y*c9P;9S4m&#-s;cYeOjEX&3m#teq_AW-?OY*cBMc^+h)2OenzP^ z{PtcJ&&G?EjKG8o8Fz{o+s9^JK@WrYeZNL1o)rvGD zfQ-`Uav<&WJEzUxNKajxzT#CyUQV`Sq5Ye4##61c13r6gV+rH6Fn(^va;w?=5J}3W zU`U5t?MS1+_|M?sbCf`QY&xPmr(-QSr`2OkC01Y(BJ{8|HN!nJatQp4isJYAdw=i$ z3pRm31St))JhXFpk|$IL+%wep6CZjApwKr|g|)o#cJOI7shfy=VI*)6Vo;*>-WKHAKO5>xWPn%3Kt{0QOud&H9CR6U_=bK;5dpiLOCsSSz_>xZiQ;xp- z9)I`Zo4yWXNT}8%z#OoZ?tw)o)L2`5rc!%T%|lzXqtUHTN&fTbidE4eLtAS{Rfpwz z<(F7kHeS_|8kOHQI=f=Qne_{(UF>!o+JR92} zqrwYIJ3BDA?M`T8ACW{zH3ulkV&2c%S9{Zh+~f9(ux=RnUU%^?EtjcL@=j7dRfSjv zuhm2WbnA0_;XjWhHkevuot2ff`Vbv$fZ%6@{X8tx(2J64Q5>1F;|Z8^Dwy(kv#(F4 zMDq*X!0#;3Z`s5(3Ee8yS_&1HL7g_Z(QU~BpUDyN`pxUv>nZHf7pLw#Zz6W+3?<~` zikqrCzPewp#(dJycvixfUK2%ba~7YjivX#Tu&ydG)wo#-3)_d{H3`Ie^0zBg1_e=5EjT zU+L-Xsue`O3Tcmev!W5+T8Bfj@S-eLrzJdc6aT?L6iVDoUmR{cIsYpFj=D~Yjz40y z?Cq8;*$BrynyvL;zIeEMzPV0DtZJb-bQZh2uo+gd}uZ*7z z8+GkimxM)SKWlxzb z3NkV+ZEYaw@r;s^@#*8e{r&j`t*xD%r>Y-5tgQDNf_W^$ONxt&ze(cT+V;1%x107T zg?iLiRc#^a`J;MF?eAl0@VdKUyzyN2U)llUtRx+bCRnP~mkJ5lGm+o?h26~|@0CfN z87BvhHMj=ECwIGXdQtACh9qThhG8IZ^Ng^eNW~7LRzAc0NE8eLs+?0@Hpq{%G<@I>VBZp-A&g*;~6=R)y4UK zQ&?zd$W~Wa;)m>?(0qmD<*lu~t*w{T)DmEryBh7-=;-CAeyqJJuJI^E1(0$mTGCKE zX-m#ozO5#xeHc@3V?$20_WG(vKa{>d*0|VN;AQK36>W9j%enN3CZ*IG*IGB~Yfie| zH096c-Jc!piK*6(rY8V+-6A?q=Sb7&>>`O`FKhD?dV@0u?CLYM8&P}n&464(|Lp#k zzZ?c{4lnQ13VAQx46$Vr9f>wmPF2L}=?`qaZE*QBWxHtPn=Eft-ACJQC@U|&y<_WF z)Sl%Ki-#Y^vL`PWih!rC290aAnZNs8E<`L1*JlUeKKP&-lC}1QDzRTfLt~-F+HZG? zjg)j3G};8|?E#Vjt{ZRTnJb;UvKrQH`>Rvz}q8$j1H zY?1xjJBY^jtU3FASyX-tCat4s{27}{bHlWPpb&;(8k>f4 z+cxC>Ziqd;Xxk0Dc~;KsLa*@-EFe=XAU)A2DLFp&kUc{1^|i3lrnBcnaX@5Cq@R|G z_Olx%T4uqr=oC44kj56-5~DGq^F~LTzWR1=Tb^4!$1*z_Ob;lJ!7{UaWuv>8^6Lk+ zyG+|T;v%;mM{;*c2?M`O!zf$-e8{d`DL#}erXzc2ZBfzyGZ2a0)1aLdCLCh>u zYU=9rv_3wE}-YpY!I<&Rl-SMdIkZJi+k~o)_GblGt_KM74|5go>Xx(Mvz1 zNcd1kFGXE%dj{T08Vs&i2avSQ6h^1mY#O_od2!j2HSnrv(8ByEEy`v+OuCRVfW)-E zZq`wOVngH?XuWb}6UmVx;TAJGe8)5PXR&#nv(!kyACVo#o#3D>+dpEZ-R38sI!p2> z0J%M*M=k~KR?xXn{xEjky<-!g^m44TFKKu)k*!p>4NIeQ(N$s!G2@`!l+I=ly8?-?*YjqZW7G0UO=WTvhjpCRhU zJ5Y-nEcqjPE!-9os#eHYG25UzyAZNfA6N}|Q@y?Yx`^b#Bz{dP4cX>FHA6(mR?KFt zYk{v|XR?5)*{+9TKNT+MY%du*vcV_Fyjc@l8!QaIBU$&n$2LOQdYD}FFG9v!%J zplYh4p0FP~>c^Dp)u~NPLpg87&CMb*#nPZ$+*STG^=`vQwN+Ijq#6u@Ub7c75N{kK zeaj#k9V*-$zw7g(<6~e?IX@KOb6KmLu0YPiU8A5lPqqMwab=an1GUI+HG)M#lH+~0 z1LXgnMn^=Dg0^>dP7fAV`$#h-gCmntQ+Ic4dOABVFAcbPCQ!&Wj{fSebLK?BP@6k@ z*#t)JfVsoV@gIpkyWgW*-h}Tl7y|u$u@)({!Z6Uo#+hX2{dqidg;d~WBqmvL;GC|4 z%G@V9Iyytpe`(+dTRuKfFB$q)@vQGwpAmOFIwr=2YGTq|Wf~9vo(%Bh^4b(%{Eb~VK;ya`%t_bfx^zgNsV%n1yeP}t`S=3B0t2g`P_xyDFZXUkKFY{6$q*&d$wW#?xAyh-kB^KbiFkcz^UuV*O65l>)6q$Ca3DiS z3V`>vcX#0pZu^T1L4%j?_q#sPKg3Fy+_S|1wl`ov)SW*E^Z2?Mp~C8+TV9^(1F7GW zNwlEF42&(){1eZSqf?7Fv*RDBqb$vB+t*zHMIM;)89~x@`y)5p5gU&FZ!Ns2|TB4r1{L<2pj-a*&-BF&_q*|v) zOPoI6yY6&x|4*Xy2k@)T*j0z^1F3}SV@QQ(%2bqJ3o>iyX~ja{mPQ~M@}EC@c22qX0St^9rc^kq zurRB9Rz=CMeDC1l!yv%g_Ie0EB_iKcz6@y%S8N`1`GF3KhF06#fG%%%NuF7u7Tw&}ghy+#$;qKprsUbLSyRrUAou7RXX&J|{~A{H@{p_bg&_GJHj zGj0+94(pqwfbwFIAPr>F|HW#OQz(5sGaXDF@A4M*Q*>V>?~E`t77vR4dg(-@vjN2nOd;d~c%6 zep0Lx+y6n@&Nb76e@7nh08v_TUor>~rE?1AEqtDdx8Sx9qh$Xn;kf^l@ZaZ;ZK7~L z^vAM;*S4!#u7r9A2ZbSHXhrq;7+&t;ibR_#yTt@&wI6a9g`-tK*@rj?npoS9)oS_V zgI_%zNZx6+TcDBa)4=Ew6pmz-r~yc)(&kb`>t%k$s)C0blra9(Ao9>JuIa&7>{Au3 zWjI^=qHVxJRXW5$JRvrgx1KA73sH;XeRGfiz*c7l&Z1sx66v9OTZ`@avWUW;{p${M z@Q>|=hpUnR|HJVt!MPBeT(S*Vtm@^RnkM>SP`w;Px$euuHQ@nJKP0IM)9+#23coMK z0A0LLI@Ek{=-O^evxHazMi6xmC5iYW4 zj>ta}-+l-SL$3Gv`Ni9871A?AuUouMG<`Ypf!I;87y}RNvmkicNCz0lC9_lhNniOCZ)+0%mBX!E78kWB?ssGXz}@;`2h~!>HoKF}3i?~y{Z_&< zJCxDlRBPUTyL(KlRlQ|_rezEEk@o|v3)zY2cNE0Oo!#9jP+${uSU5In@eYcQ4@yf* zi;iAi={nI+k7GcU7Zy#Pbv>R+i zrys)SocwugXwrJ*EiH>4t&*0!-`V`HAB`z}p?ED#HA=Gbj4((MjgfSZqQ`zoY2mxs zTF05NX_UAH*O`1o1eBtXh52u_R@@z$JqnnF#5#5T-N9?soS_9u32locuG*(`wCg*F@yg z$_}2yAW_ra^9{y<^YTpdMdQ;Gy=x$4E600rXSz{J+H_~gmlu>i3#1(^%Vq$E(>6gw zF0py1`APlr&I2)D&Ei~rAjH+#rRUdJ_ZkLBAru6Ze~-4zI?|iB|8#J2dG4FmF3fLn6F#-%*QLpCv3vjq#n`9F@DJ3_cA%^A)fdOsUNbPfHV_8ZDoi&jO9Apcy&KwT9o>!QdOAf zeFu5ov;6|f$Hfc{S_LPQBT3Xt!{a%7*p2gK(7V2Mm&r-WmViuYu!Ti_NJz-Qxt15^ zt|dWp)#e4&d)}B87s?X;&+Np-14bqo4N#bOtp7e0)f$Lujnm>|eN_ZN6fzJ^1Mjs~ z(;QVQkk8l1o>6S`vTM*T-Uk5|JCLEoyZFi*5V7hc0M5-6;dkjtH=rrvJl)z5-`a0Cz|3R!_jS6t+}+dCgx=~moUZr(1$15j-k0mv z=C|V~adC5>93Llz9o@4@oEm(a2?mp>a_fx;XLHbeZyo3zM0y;4^-SLnW?x&|cqAU` zd396UQi}^>X71~Glb>K;mRz~{AJ1rSlLfUVNxeVF9m8o|A~pB89zI74<@2vY5Zb6QTPjH zaC5^RR_8c>h#JiieiZyL`#Hrt!WzX{;m>YAIjOES1PCF03xKgt=f7Q=%fwMU{!y{^ zq*Aa-B)JxUJ}H)K;RpJqfU%dRhr>**DBiIPX3{RJ%Bz(9+OcAm3C=(M5of?9qR@ZXCIASTT-CZa-^V^2I^z@kz1};|* z=KX!g(UFb$b4L9IR=YL{_G!@e%;uLu#YCX^{f`sJ(|kUItWJph4j71CM>q#yQ!?mw z!UM6`gsahsd8Zw_>F&9mfiD2^_CAQ?2o@l*47Xb-w}wN$h8D-9HQV{_35(vuUjszc zxJH(wsUtY5yR(zx#a92{kIHFVe9kbvBB8}avVJxo+Gl7emdamIk^SqwuNI-=0K`*2 zG*Xs_bL3zWu2C^mR^@tp{t|7XNls28eV+2JD)GV)Scan8(~IkTTk}(k@UoUI89%BB z(5-NY){D_LwIX6?Aejf4A?E#x1hpJ{Myka>ioK8Bz!qMFt>^9B)}w;mDSkME>w9n z<34fw!|^b*?an!s@8%FbXc_4ZI1KB6-aXq5%=q!e0)DGPIdF{dRk20WxeXG4Dzx6m z@7mE-ZGNu1K%OI26Lsr)^njI8ZFqGtbpdTZ)B2w0|IJ@qP!Du;4F4Mmx#a{lS~;+W zQmj5Z1aoJAguKJzm3_95&vrFEjmd6Kvs1H;ojmET6fQ1~UU3;l=?$GTVfniOwsKt^ zcXe(3E7)?*wYO2T6d1_Onk>=}q+KA5{CZ_kXKlx7%s5X_e^z@1YOGyWM)Dk5grBO0 zO?d=+WHQ$~8{GC8+8${Pa+yX(h6@JtL6KYg12yIBD^%gMDfpq%S;@%_ZaRE~;Q zGT?90=RjsCrM~JmE_sk+BcMn^KmUfVL>M@aU00T3SXVjkE{9b(*(Z9d%0y4;b26DK zPosTN>}r^_diF`be9KLlJ(2b4|gS^IfxZx&xsLd`+eJ`1MhY z(UP`9KR^KfLkB2s{sZx|JBzSwcm6(90F-)hB6-_bXr&h5&u*-5WS(C5;(pJIkex?# z0)QTX=PU7~JIwTq@veVXrq3>dy6sbS!D0ah>ydr-e1Ky+b@s?|h^8R7^lzNDHf5Xl z<@wRK!<*)>B-DxFif75@qjG!~%-q7_67EA^c6H{Dltmt}6I@F(hZhx4$#MSkjf6_py3{9 z^nou}DNj4Y?KQ1(;{N2c6mU!q9^2{&TS+KQR`qN7SodF;n~R3`3Y+-x1K0dU4n1_R zRXS<$=aI=G@TrM*t*<`of3hJqneP1_i||`*C8eqPKC3=Et>-dTb_)v6eJY+N_Ak`9 zf)F`avi~`;Z!50)Z*}H#-QT`X4Xsb*>XeNCJ)hi+-#FCk8Al=F{qZ zcPHSxns)Q(i|w$T1Lxy3-ur=BS3B5Pzm=s@_U~c+<`;B3?hB40A7^}GJM;d`Yb}+o zparh)pr+?q*8@N{6=neL*J=ad?byo1lIKcA6)-S(aPRFHcXf05Lr!D26+3jGpAfR) zHp^aKn9_B1Jh7bdP2O`-vM8$2dJR`f+D8BDKa+ZB0dU77kNSE}I@mNPZUKkByqv6B zNd;G-qa`K&s)-opu$R>sq?Tw(AvW#KsmfbN&v@@814+HXOG9o-h|n`8(`gtv{tAXN$D zXcTa?i~oS|VA?zd@l^Fzu8s&;s-*w2J*6^aKr(rtU(3;*()L|RHYUJUkKEdtQhs$W zO<&CD=`G*uWrLmK!D}hfF)<4(o>B}u!~WO$Hh4&DL=a~b<4K+&bgK%vpXHOCtRwg# zdt|P?P`#F=o(N04bU&sJVcXkQ&C2q_e+NFX z>AdtKr7FqE`|~!8I6CcZ6!bf|li3oI9D^oe52kyH_mPQ*dn!}Z+^opv#4_CL`0epQ z&Y`Q816w+GtDT+#M};Xd^^evI*Ey!zE0$#rL*x@*Z5JQe+rC{MYCV_sj5g~C=$aLdRkcjy_~h*~i`a1IAJKR2K}tL3;r5+AmsRdrj@LV~p<^Ui&Jz%e8S*&sY&GkNh_ zCKxAaMi{6Yj~*e5TMd`w|3%4|gm}K}2fja}5N#fo%KXv>$^1LiJ86~6XYv_s;qg3g zhiOVJiOXVSJ8YULz2VcqW*GZt7Cn1lh==9*l?)qnwY34;V7Ad>XkYks&(M{NKyGR7 zOjnWlx2ryOD!q!!O%+4`d#?9ltst%>eg^gtK_&ImS{ilLTp{ub#(iD8TKTs-O%+%> zxn(E(b*S~1F4y;*1*opwIqSHL@u+;*W53>f?VvnY)E0?{KDhs9 zC=a7xAb2vi?D`?l3DG_X=JC3Gk{oklMm^u0nwg5suIC1=Z*F+m&52tqg2^)mS|^2F zs$I=Jx#oT}8a#4O)KY&+AX!s$DMY(-92)f@%y87A=w9C#k+mCr^;+M z-ckPW)^*K~Ag-9owyy>bmxLs`p(gTu3i!+s%T5BOGN)|9PmZqQt!c1YH6;vNcQYMA z99JFF+uq>W2xhwITSm!8`fR$cR88&u(q}HJ5!|w&^{93I;y?4HX}gxU-jRDH**RWlo1cZvdy(rN>8bxm zHRl=CRGP+dU{)PKWE2>XBC`<$1f&d2iUCPfdcY_#3Q-x9DiEqbXk%znq$5ZR(xnUn zBLTun3mt{fJ4p}&p(IjbD04GAbIzW#`(;1up50IP)4lh+_kGS&?)&@y)5t-+6~vmk zc!4@;)_iMVuj`GT7z66yX<8&rpb#PH$e#}7<_bA?YOwP4>mq^vcm|sJmtbz&STl&S zUj1SZzY4jmzUi^-DYk=g(f}u|zo^AwscC>HKypb$` zm3llv_!0fROpwQ?@LhorQn~kZO_0^a#zH553p)#pw=u|Nw$tnSLVH`p)m)_wGw)~k zf+^c;(5I=<-IWaD89t_^g;LaZ2$x_p5_A6X!#NzP^X?c0n~%kL+^vPU}}1YSr? zMp#DBB4zlvHdBH;nNL=$5)`&JlF9RpCqKVWp?Vd)UP2L_X<8waP!v2~PA;4E*TRs( z<3)bjzo-d(!Hb~T1-IS~m1K&Fih4KR%av4-QmOphx79;XKDJ3*6OOF_d%Ox?){CT zUT3R0qqf<;2uLFuh+MGoe`+b3z2LD_6HySuXVRW&2L$RCAVD7sZiU$j;C0iY?N2r# zrQ*q{{9$W1nQJw`##(DWhd2X(-a7XJ>=%4mJdmn#;OwPhhE$Q^KE+Q73lc9*Df?HWVa7SxHt~CG=xfPPT2o3~*kriaCs= zuP%!)Sy5K@yw9V1Rpj9n)k_4Yi>F%>Omr}dNI>6##H1Nv^rjJF<7;t1k*orYhDtk& z8wFnKKOWfeWxl(&4lpAJ*H!TGG>?a+t3l+!a0k(&EH(U0o2k~JKEr*vWUbz;xUa8A zUG`rW#}1*UeL%*$;JT=4U?{bvd*QvIRbN*d!ZLll&`PbUNZrBW8 z3SdV)Yf(~C0^wGE<>lS5v2~vV`>x|PL#6w>`%T%I*6}xa!lWn0SQ4$aH;*pObhx>p znz4zlilJ8!XOETA2}_FRglBzJzGHddHzhTciaQ#l(d8jAfKsQ-USIrFHG|ZBtj~*m z)b;hP8R4QhSAG`o0LS6s&o~de2)qCXEX!_gUSk8Gy}H(im>9Fb9fq%w(PCOfc;HkP zy0#h3-=_tV>q|*qBE-ci$jg6GW(^C2Twth1@1Ur~R-e8;mG0g_O)Zj%X^3?2k-}RT z9~U^{e72x4MYP5scEb&*d^d1lLH%LiO=iR~*Tc)H8K@dyZ@pS~n9V+9hrr_S+_8zI zgXkM~%IqiG&;s<0+M@~Rr6}^!OqN0;MvgLZ2X!hcHBGolr``>Q0?b7k1-5`YDcA}u z77EPjKz=3lYjEeg%ynLvC7_wcy(g$&d+9-bByH^(-B5?7T+0HZMCH2^b)Tm!_laG2 zq|p`b{$Hhi#TRhp#io!V+H>tgnH8^Y`iYK3pSAJMiQZ??JC$=u**S{sDIc{+bluXX zW*pDRRkr)dabXBFg*y>c!j z^mTLRMFrvKWzF)~4&&*tD@Z>u!BJ#Zf-@7CEg%Dr~)Up17-o}uz z>QCJSaosHc>f`RZ`#Ui;m##;G1mv?px1Qne7ch;##>Jmi+ z)D;CSHD%U8OsD}w_NDZXF{M!A?WNI7X)^AihOg%KfIv*CuP9L}T#%oi?`dsw?KV{M z)m;-4Gl@(IDs`E6kEcp_cW!$jI%=_z)4svx`!~%r=R0Mc&pNG&ub#H97<6x6H%L+) zv0+~z$~sHXR>W?(ph`vlm@1M&;~r@xxLr~GsrSZYa^ih9_-a8y(t6mIv6%?-@My-% z{%J|FZE?g(o#m;h^TK>UP+Z4CPi3i^ml4qBl+SD(ati^; zX_kaQv5ifU9fg}qxL6fkw>Kqel6jI6tcKE>mBV;F8d6*&l4KM6{5gOfSONTWnh=^D zP9Y>eJVQniMZOoF6K!&;RTp1%l_OZ(2$n!0V0#P8<8=PtrJ?|QW5L*_u=llo=$-~I z3=b^fKtKyZq5epK-!Uq)-z{k2X*qbwpLs8G=j+tEPn?g0bD1=<)z%u?^Pz1IV-x#~ zfIqqBH#@RxCaP)zvntDFs@PTM?f^O|zsj{f)R{;m_GjvoFhCGz4AB5ZQXg;yH<6D6 zKm9hltQFGb?4r8?(faf^W!ZfEe9|ZM1M*U*{J(HD5N&qP?1{Fq7wag00?#@p7iRf5Uh!j7AK;s>5_% Date: Fri, 8 May 2026 14:28:46 +0000 Subject: [PATCH 5/6] fix: replace Pillow diagram with proper AWS architecture diagram Generated using diagrams library with official AWS icons (Bedrock, Lambda, User). Professional quality for Serverless Land. --- bedrock-agent-openai-cdk/architecture.png | Bin 20789 -> 44811 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bedrock-agent-openai-cdk/architecture.png b/bedrock-agent-openai-cdk/architecture.png index 4d4dc70521335696075637c7157ea10da2b5cca3..1e72db76dad91e1f4fc90967e9d7d15bb38d0d71 100644 GIT binary patch literal 44811 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�itKf=5hF%C~IzaKmdS2W(^*Unk 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 literal 20789 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 Date: Fri, 8 May 2026 12:17:37 -0400 Subject: [PATCH 6/6] publishing file --- .../bedrock-agent-openai-cdk.json | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 bedrock-agent-openai-cdk/bedrock-agent-openai-cdk.json diff --git a/bedrock-agent-openai-cdk/bedrock-agent-openai-cdk.json b/bedrock-agent-openai-cdk/bedrock-agent-openai-cdk.json new file mode 100644 index 000000000..5af20887f --- /dev/null +++ b/bedrock-agent-openai-cdk/bedrock-agent-openai-cdk.json @@ -0,0 +1,83 @@ +{ + "title": "Amazon Bedrock Agent with OpenAI model", + "description": "Deploy an Amazon Bedrock Agent powered by OpenAI GPT OSS with an AWS Lambda action group for tool use.", + "language": "TypeScript", + "level": "300", + "framework": "AWS CDK", + "services": { + "from": "bedrock", + "to": "lambda" + }, + "introBox": { + "headline": "How it works", + "text": [ + "This pattern deploys an Amazon Bedrock Agent that uses an OpenAI GPT OSS foundation model to orchestrate tool-use workflows. The agent reasons about user queries and invokes a Lambda action group to retrieve weather and time data.", + "OpenAI GPT OSS models are available on Amazon Bedrock with the same security, governance, and API experience as other Bedrock models. The agent uses the standard Bedrock Agent orchestration to plan and execute multi-step tool calls." + ] + }, + "gitHub": { + "template": { + "repoURL": "https://github.com/aws-samples/serverless-patterns/tree/main/bedrock-agent-openai-cdk", + "templateURL": "serverless-patterns/bedrock-agent-openai-cdk", + "projectFolder": "bedrock-agent-openai-cdk", + "templateFile": "lib/bedrock-agent-openai-stack.ts" + } + }, + "resources": { + "bullets": [ + { + "text": "Amazon Bedrock Agents", + "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html" + }, + { + "text": "OpenAI models on Amazon Bedrock", + "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-openai.html" + }, + { + "text": "Bedrock Agent action groups", + "link": "https://docs.aws.amazon.com/bedrock/latest/userguide/agents-action-create.html" + } + ] + }, + "deploy": { + "text": [ + "cdk deploy" + ], + "file": "lib/bedrock-agent-openai-stack.ts" + }, + "testing": { + "text": [ + "See the README for testing instructions." + ] + }, + "cleanup": { + "text": [ + "cdk destroy" + ] + }, + "authors": [ + { + "name": "Nithin Chandran R", + "bio": "Technical Account Manager at AWS", + "linkedin": "nithin-chandran-r" + } + ], + "patternArch": { + "icon1": { + "x": 20, + "y": 50, + "service": "bedrock", + "label": "Bedrock Agent" + }, + "icon2": { + "x": 50, + "y": 50, + "service": "lambda", + "label": "Lambda" + }, + "line1": { + "from": "icon1", + "to": "icon2" + } + } +}