From a493618f9cd1bd560c61046c22b9c1494502f940 Mon Sep 17 00:00:00 2001 From: Steve Liu Date: Thu, 25 Sep 2025 13:32:51 -0700 Subject: [PATCH] update pet clinic agents adot version and set region for invoking nutrition agent --- .../lambda/traffic-generator/traffic_generator.py | 8 ++++++-- .../lib/pet-clinic-agents-traffic-generator-stack.js | 4 +++- pet_clinic_ai_agents/nutrition_agent/requirements.txt | 2 +- .../primary_agent/pet_clinic_agent.py | 11 +++++++---- pet_clinic_ai_agents/primary_agent/requirements.txt | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/cdk/agents/lambda/traffic-generator/traffic_generator.py b/cdk/agents/lambda/traffic-generator/traffic_generator.py index d945e36b..5e424f20 100644 --- a/cdk/agents/lambda/traffic-generator/traffic_generator.py +++ b/cdk/agents/lambda/traffic-generator/traffic_generator.py @@ -1,6 +1,7 @@ import json import os import random +import uuid import urllib.parse as urlparse from urllib.request import Request, urlopen import boto3 @@ -15,6 +16,9 @@ def lambda_handler(event, context): primary_agent_arn = os.environ.get('PRIMARY_AGENT_ARN') nutrition_agent_arn = os.environ.get('NUTRITION_AGENT_ARN') num_requests = int(os.environ.get('REQUESTS_PER_INVOKE', '20')) + + # Use environment variable session ID or generate one + session_id = os.environ.get('SESSION_ID', f"pet-clinic-session-{str(uuid.uuid4())}") if not primary_agent_arn: return { @@ -30,10 +34,10 @@ def lambda_handler(event, context): if is_nutrition_query: query = random.choice(prompts['nutrition-queries']) - enhanced_query = f"{query}\n\nNote: Our nutrition specialist agent ARN is {nutrition_agent_arn}" if nutrition_agent_arn else query + enhanced_query = f"{query}\n\nSession ID: {session_id}\nNote: Our nutrition specialist agent ARN is {nutrition_agent_arn}" if nutrition_agent_arn else f"{query}\n\nSession ID: {session_id}" else: query = random.choice(prompts['non-nutrition-queries']) - enhanced_query = query + enhanced_query = f"{query}\n\nSession ID: {session_id}" try: encoded_arn = urlparse.quote(primary_agent_arn, safe='') diff --git a/cdk/agents/lib/pet-clinic-agents-traffic-generator-stack.js b/cdk/agents/lib/pet-clinic-agents-traffic-generator-stack.js index 8a9f4004..b94f6872 100644 --- a/cdk/agents/lib/pet-clinic-agents-traffic-generator-stack.js +++ b/cdk/agents/lib/pet-clinic-agents-traffic-generator-stack.js @@ -3,6 +3,7 @@ const lambda = require('aws-cdk-lib/aws-lambda'); const events = require('aws-cdk-lib/aws-events'); const targets = require('aws-cdk-lib/aws-events-targets'); const iam = require('aws-cdk-lib/aws-iam'); +const crypto = require('crypto'); /** * Lambda traffic generator for AI agents to simulate user interactions. @@ -20,7 +21,8 @@ class PetClinicAgentsTrafficGeneratorStack extends Stack { environment: { PRIMARY_AGENT_ARN: props?.primaryAgentArn || '', NUTRITION_AGENT_ARN: props?.nutritionAgentArn || '', - REQUESTS_PER_INVOKE: '20' + REQUESTS_PER_INVOKE: '20', + SESSION_ID: `pet-clinic-traffic-generator-${crypto.randomUUID()}` } }); diff --git a/pet_clinic_ai_agents/nutrition_agent/requirements.txt b/pet_clinic_ai_agents/nutrition_agent/requirements.txt index ca8e24d1..b4ba9c5a 100644 --- a/pet_clinic_ai_agents/nutrition_agent/requirements.txt +++ b/pet_clinic_ai_agents/nutrition_agent/requirements.txt @@ -4,4 +4,4 @@ uv boto3 bedrock-agentcore bedrock-agentcore-starter-toolkit -aws-opentelemetry-distro>=0.11.0 \ No newline at end of file +aws-opentelemetry-distro>=0.12.1 \ No newline at end of file diff --git a/pet_clinic_ai_agents/primary_agent/pet_clinic_agent.py b/pet_clinic_ai_agents/primary_agent/pet_clinic_agent.py index 50ece715..5094fd9e 100644 --- a/pet_clinic_ai_agents/primary_agent/pet_clinic_agent.py +++ b/pet_clinic_ai_agents/primary_agent/pet_clinic_agent.py @@ -43,12 +43,13 @@ def consult_nutrition_specialist(query, agent_arn, session_id=None): return "Nutrition specialist configuration error. Please call (555) 123-PETS ext. 201." try: - client = boto3.client('bedrock-agentcore') + region = os.environ.get('AWS_REGION') or os.environ.get('AWS_DEFAULT_REGION', 'us-east-1') + client = boto3.client('bedrock-agentcore', region_name=region) response = client.invoke_agent_runtime( agentRuntimeArn=agent_arn, runtimeSessionId=session_id, qualifier='DEFAULT', - payload=json.dumps({'prompt': query}) + payload=json.dumps({'prompt': query}).encode('utf-8') ) # Read the streaming response if 'response' in response: @@ -62,7 +63,7 @@ def consult_nutrition_specialist(query, agent_arn, session_id=None): agent = None agent_app = BedrockAgentCoreApp() -session_id = f"clinic-session-{str(uuid.uuid4())}" +session_id = f"pet-clinic-primary-agent-session-{str(uuid.uuid4())}" system_prompt = ( "You are a helpful pet clinic assistant. You can help with:\n" @@ -75,10 +76,12 @@ def consult_nutrition_specialist(query, agent_arn, session_id=None): "- ONLY use the consult_nutrition_specialist tool for EXPLICIT nutrition-related questions (diet, feeding, supplements, food recommendations, what to feed, can pets eat X, nutrition advice)\n" "- DO NOT use the nutrition agent for general clinic questions, appointments, hours, emergencies, or non-nutrition medical issues\n" "- NEVER expose or mention agent ARNs in your responses to users\n" + "- If the user query contains 'session id', extract and use that session ID when calling consult_nutrition_specialist\n" + "- If no session ID is provided in the query, use the default session ID\n" "- For medical concerns, provide general guidance and recommend scheduling a veterinary appointment\n" "- For emergencies, immediately provide emergency contact information\n" "- Always recommend consulting with a veterinarian for proper diagnosis and treatment\n\n" - f"Your session ID is: {session_id}. When calling consult_nutrition_specialist, use this session_id parameter." + f"Your default session ID is: {session_id}. When calling consult_nutrition_specialist, use the session ID from the query if provided, otherwise use this default session_id parameter." ) def create_clinic_agent(): diff --git a/pet_clinic_ai_agents/primary_agent/requirements.txt b/pet_clinic_ai_agents/primary_agent/requirements.txt index ca8e24d1..b4ba9c5a 100644 --- a/pet_clinic_ai_agents/primary_agent/requirements.txt +++ b/pet_clinic_ai_agents/primary_agent/requirements.txt @@ -4,4 +4,4 @@ uv boto3 bedrock-agentcore bedrock-agentcore-starter-toolkit -aws-opentelemetry-distro>=0.11.0 \ No newline at end of file +aws-opentelemetry-distro>=0.12.1 \ No newline at end of file