Skip to content

Commit 0f9b8cb

Browse files
committed
Merge branch 'bugfix/config-agent-model-id' into 'develop'
Updating chat agent and error agents to use user configured model ID. See merge request genaiic-reusable-assets/engagement-artifacts/genaiic-idp-accelerator!421
2 parents 0493029 + e1b43d2 commit 0f9b8cb

File tree

12 files changed

+86
-136
lines changed

12 files changed

+86
-136
lines changed

lib/idp_common_pkg/idp_common/agents/analytics/agent.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,13 +298,11 @@ def run_athena_query_with_config(
298298
get_table_info, # Detailed schema for specific tables
299299
]
300300

301-
# Get model ID using configuration helper (checks env vars, config table, then defaults)
301+
# Get model ID using configuration system (reads user-changed values from DynamoDB)
302302
try:
303-
from ...config import ConfigurationManager
304303
from .config import get_analytics_model_id
305304

306-
config_manager = ConfigurationManager()
307-
model_id = get_analytics_model_id(config_manager=config_manager)
305+
model_id = get_analytics_model_id()
308306
except Exception as e:
309307
logger.warning(f"Failed to get analytics model ID, using default: {e}")
310308
model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"

lib/idp_common_pkg/idp_common/agents/analytics/config.py

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"""
77

88
import logging
9-
import os
109
from typing import Any, Dict
1110

1211
from ..common.config import configure_logging, get_environment_config
@@ -49,52 +48,44 @@ def get_analytics_config() -> Dict[str, Any]:
4948
return config
5049

5150

52-
def get_analytics_model_id(config_manager=None) -> str:
51+
def get_analytics_model_id() -> str:
5352
"""
5453
Get the analytics agent model ID from configuration.
5554
56-
Priority order:
57-
1. Environment variable CHAT_COMPANION_MODEL_ID
58-
2. Configuration table agents.analytics.model_id
59-
3. Default fallback
60-
61-
Args:
62-
config_manager: Optional ConfigurationManager instance
55+
Uses the modern configuration system that reads user-changed values from DynamoDB.
56+
Note: Analytics agents typically use the same model as chat companion.
6357
6458
Returns:
6559
Model ID string
6660
"""
67-
# First check environment variable
68-
model_id = os.environ.get("CHAT_COMPANION_MODEL_ID")
69-
if model_id:
70-
logger.info(f"Using analytics model ID from environment: {model_id}")
71-
return model_id
72-
73-
# Try to get from configuration table
74-
if config_manager:
75-
try:
76-
from ...config import get_merged_configuration
61+
try:
62+
from ...config import get_config
63+
64+
# Use the modern configuration system that reads from DynamoDB
65+
config = get_config(as_model=True)
66+
67+
# Analytics agents typically use the chat companion model
68+
# Check if there's a specific analytics model configured, otherwise use chat companion
69+
if hasattr(config.agents, "analytics") and hasattr(
70+
config.agents.analytics, "model_id"
71+
):
72+
model_id = config.agents.analytics.model_id
73+
logger.info(
74+
f"Using analytics-specific model ID from configuration: {model_id}"
75+
)
76+
else:
77+
model_id = config.agents.chat_companion.model_id
78+
logger.info(f"Using chat companion model ID for analytics: {model_id}")
7779

78-
merged_config = get_merged_configuration(config_manager)
79-
80-
# Navigate to agents.analytics.model_id
81-
agents_config = merged_config.get("agents", {})
82-
analytics_config = agents_config.get("analytics", {})
83-
config_model_id = analytics_config.get("model_id")
84-
85-
if config_model_id:
86-
logger.info(
87-
f"Using analytics model ID from configuration: {config_model_id}"
88-
)
89-
return config_model_id
80+
return model_id
9081

91-
except Exception as e:
92-
logger.warning(f"Failed to load model ID from configuration: {e}")
82+
except Exception as e:
83+
logger.warning(f"Failed to load model ID from configuration: {e}")
9384

94-
# Fallback to default
95-
default_model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
96-
logger.info(f"Using default analytics model ID: {default_model_id}")
97-
return default_model_id
85+
# Final fallback to default
86+
default_model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
87+
logger.info(f"Using default analytics model ID: {default_model_id}")
88+
return default_model_id
9889

9990

10091
def load_python_plot_generation_examples() -> str:

lib/idp_common_pkg/idp_common/agents/code_intelligence/agent.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,11 @@ def create_code_intelligence_agent(
8080
logger.info("Connected to DeepWiki via SSE transport (no authentication)")
8181
logger.info(f"Discovered {len(tools)} tools from DeepWiki: {tool_names}")
8282

83-
# Get model ID using configuration helper (checks env vars, config table, then defaults)
83+
# Get model ID using configuration system (reads user-changed values from DynamoDB)
8484
try:
85-
from ...config import ConfigurationManager
8685
from ..orchestrator.config import get_chat_companion_model_id
8786

88-
config_manager = ConfigurationManager()
89-
model_id = get_chat_companion_model_id(config_manager=config_manager)
87+
model_id = get_chat_companion_model_id()
9088
except Exception as e:
9189
logger.warning(
9290
f"Failed to get code intelligence model ID, using default: {e}"

lib/idp_common_pkg/idp_common/agents/error_analyzer/agent.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from idp_common.config import get_config
1515

1616
from ..common.strands_bedrock_model import create_strands_bedrock_model
17+
from .config import get_error_analyzer_model_id
1718
from .tools import (
1819
analyze_document_trace,
1920
analyze_system_performance,
@@ -57,8 +58,18 @@ def create_error_analyzer_agent(
5758
analyze_document_trace,
5859
analyze_system_performance,
5960
]
61+
62+
# Get model ID using modern configuration system (reads user-changed values from DynamoDB)
63+
try:
64+
model_id = get_error_analyzer_model_id()
65+
except Exception as e:
66+
logger.warning(f"Failed to get chat companion model ID, using default: {e}")
67+
model_id = config.get(
68+
"default_model_id", "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
69+
)
70+
6071
bedrock_model = create_strands_bedrock_model(
61-
model_id=config.agents.error_analyzer.model_id, boto_session=session
72+
model_id=model_id, boto_session=session
6273
)
6374

6475
return strands.Agent(

lib/idp_common_pkg/idp_common/agents/error_analyzer/config.py

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"""
77

88
import logging
9-
import os
109
from typing import Any, Dict
1110

1211
from ..common.config import configure_logging, get_environment_config
@@ -41,52 +40,34 @@ def get_error_analyzer_config() -> Dict[str, Any]:
4140
return config
4241

4342

44-
def get_error_analyzer_model_id(config_manager=None) -> str:
43+
def get_error_analyzer_model_id() -> str:
4544
"""
4645
Get the error analyzer model ID from configuration.
4746
48-
Priority order:
49-
1. Environment variable CHAT_COMPANION_MODEL_ID (shared with chat companion)
50-
2. Configuration table agents.error_analyzer.model_id
51-
3. Default fallback
52-
53-
Args:
54-
config_manager: Optional ConfigurationManager instance
47+
Uses the modern configuration system that reads user-changed values from DynamoDB.
5548
5649
Returns:
5750
Model ID string
5851
"""
59-
# First check environment variable (shared with chat companion)
60-
model_id = os.environ.get("CHAT_COMPANION_MODEL_ID")
61-
if model_id:
62-
logger.info(f"Using error analyzer model ID from environment: {model_id}")
63-
return model_id
64-
65-
# Try to get from configuration table
66-
if config_manager:
67-
try:
68-
from ...config import get_merged_configuration
52+
try:
53+
from ...config import get_config
6954

70-
merged_config = get_merged_configuration(config_manager)
55+
# Use the modern configuration system that reads from DynamoDB
56+
config = get_config(as_model=True)
7157

72-
# Navigate to agents.error_analyzer.model_id
73-
agents_config = merged_config.get("agents", {})
74-
error_analyzer_config = agents_config.get("error_analyzer", {})
75-
config_model_id = error_analyzer_config.get("model_id")
58+
# Get model ID from configuration with type safety
59+
model_id = config.agents.chat_companion.model_id
7660

77-
if config_model_id:
78-
logger.info(
79-
f"Using error analyzer model ID from configuration: {config_model_id}"
80-
)
81-
return config_model_id
61+
logger.info(f"Using error analyzer model ID from configuration: {model_id}")
62+
return model_id
8263

83-
except Exception as e:
84-
logger.warning(f"Failed to load model ID from configuration: {e}")
64+
except Exception as e:
65+
logger.warning(f"Failed to load model ID from configuration: {e}")
8566

86-
# Fallback to default (same as chat companion default)
87-
default_model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0"
88-
logger.info(f"Using default error analyzer model ID: {default_model_id}")
89-
return default_model_id
67+
# Final fallback to default
68+
default_model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0"
69+
logger.info(f"Using default error analyzer model ID: {default_model_id}")
70+
return default_model_id
9071

9172

9273
def get_aws_service_capabilities() -> Dict[str, Any]:

lib/idp_common_pkg/idp_common/agents/external_mcp/agent.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"""
77

88
import logging
9-
import os
109
from typing import Any, Dict, Optional
1110

1211
import boto3
@@ -174,7 +173,7 @@ def create_external_mcp_agent(
174173
Args:
175174
config: Configuration dictionary (ignored - MCP agent uses its own config)
176175
session: Boto3 session for AWS operations. If None, creates default session
177-
model_id: Model ID to use. If None, reads from CHAT_COMPANION_MODEL_ID environment variable
176+
model_id: Model ID to use (required)
178177
mcp_server_config: Individual MCP server configuration dict (required)
179178
**kwargs: Additional arguments
180179
@@ -239,11 +238,9 @@ def create_external_mcp_agent(
239238

240239
# Get model ID from parameter or environment variable
241240
if model_id is None:
242-
model_id = os.environ.get("CHAT_COMPANION_MODEL_ID")
243-
if not model_id:
244-
error_msg = "CHAT_COMPANION_MODEL_ID environment variable not set"
245-
logger.error(error_msg)
246-
raise Exception(error_msg)
241+
error_msg = "model_id parameter is required"
242+
logger.error(error_msg)
243+
raise Exception(error_msg)
247244

248245
# Create Bedrock model
249246
bedrock_model = create_strands_bedrock_model(

lib/idp_common_pkg/idp_common/agents/orchestrator/agent.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,9 @@ async def tool_func(query: str) -> AsyncIterator:
278278
279279
"""
280280

281-
# Get model ID using configuration helper (checks env vars, config table, then defaults)
281+
# Get model ID using modern configuration system (reads user-changed values from DynamoDB)
282282
try:
283-
from ...config import ConfigurationManager
284-
285-
config_manager = ConfigurationManager()
286-
model_id = get_chat_companion_model_id(config_manager=config_manager)
283+
model_id = get_chat_companion_model_id()
287284
except Exception as e:
288285
logger.warning(f"Failed to get chat companion model ID, using default: {e}")
289286
model_id = config.get(
@@ -293,7 +290,7 @@ async def tool_func(query: str) -> AsyncIterator:
293290
# Create the orchestrator agent
294291
model = create_strands_bedrock_model(
295292
model_id=model_id,
296-
session=session,
293+
boto_session=session,
297294
)
298295

299296
# Get hooks from kwargs if provided

lib/idp_common_pkg/idp_common/agents/orchestrator/config.py

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
"""
77

88
import logging
9-
import os
109
from typing import Any, Dict
1110

1211
from ..common.config import configure_logging, get_environment_config
@@ -42,49 +41,31 @@ def get_orchestrator_config() -> Dict[str, Any]:
4241
return config
4342

4443

45-
def get_chat_companion_model_id(config_manager=None) -> str:
44+
def get_chat_companion_model_id() -> str:
4645
"""
4746
Get the chat companion model ID from configuration.
4847
49-
Priority order:
50-
1. Environment variable CHAT_COMPANION_MODEL_ID
51-
2. Configuration table agents.chat_companion.model_id
52-
3. Default fallback
53-
54-
Args:
55-
config_manager: Optional ConfigurationManager instance
48+
Uses the modern configuration system that reads user-changed values from DynamoDB.
5649
5750
Returns:
5851
Model ID string
5952
"""
60-
# First check environment variable (for backward compatibility)
61-
model_id = os.environ.get("CHAT_COMPANION_MODEL_ID")
62-
if model_id:
63-
logger.info(f"Using chat companion model ID from environment: {model_id}")
64-
return model_id
53+
try:
54+
from ...config import get_config
6555

66-
# Try to get from configuration table
67-
if config_manager:
68-
try:
69-
from ...config import get_merged_configuration
56+
# Use the modern configuration system that reads from DynamoDB
57+
config = get_config(as_model=True)
7058

71-
merged_config = get_merged_configuration(config_manager)
59+
# Get model ID from configuration with type safety
60+
model_id = config.agents.chat_companion.model_id
7261

73-
# Navigate to agents.chat_companion.model_id
74-
agents_config = merged_config.get("agents", {})
75-
chat_companion_config = agents_config.get("chat_companion", {})
76-
config_model_id = chat_companion_config.get("model_id")
77-
78-
if config_model_id:
79-
logger.info(
80-
f"Using chat companion model ID from configuration: {config_model_id}"
81-
)
82-
return config_model_id
62+
logger.info(f"Using chat companion model ID from configuration: {model_id}")
63+
return model_id
8364

84-
except Exception as e:
85-
logger.warning(f"Failed to load model ID from configuration: {e}")
65+
except Exception as e:
66+
logger.warning(f"Failed to load model ID from configuration: {e}")
8667

87-
# Fallback to default
88-
default_model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
89-
logger.info(f"Using default chat companion model ID: {default_model_id}")
90-
return default_model_id
68+
# Final fallback to default
69+
default_model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0:1m"
70+
logger.info(f"Using default chat companion model ID: {default_model_id}")
71+
return default_model_id

lib/idp_common_pkg/idp_common/agents/testing/test_orchestrator_with_subagents.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import argparse
1616
import logging
17-
import os
1817
import sys
1918

2019
import boto3
@@ -25,9 +24,6 @@
2524
)
2625
logger = logging.getLogger(__name__)
2726

28-
# Set required environment variable for Code Intelligence and other agents
29-
os.environ["CHAT_COMPANION_MODEL_ID"] = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
30-
3127

3228
def test_orchestrator_with_analytics_agent():
3329
"""Test that orchestrator properly delegates to analytics agent."""

patterns/pattern-1/template.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ Resources:
610610
model_id:
611611
type: string
612612
description: Model ID for the chat companion agents
613-
enum: ["us.amazon.nova-lite-v1:0", "us.amazon.nova-pro-v1:0", "us.amazon.nova-premier-v1:0", "us.anthropic.claude-3-haiku-20240307-v1:0", "us.anthropic.claude-haiku-4-5-20251001-v1:0", "us.anthropic.claude-3-5-sonnet-20241022-v2:0", "us.anthropic.claude-3-7-sonnet-20250219-v1:0", "us.anthropic.claude-sonnet-4-20250514-v1:0", "us.anthropic.claude-sonnet-4-20250514-v1:0:1m", "us.anthropic.claude-sonnet-4-5-20250929-v1:0", "us.anthropic.claude-sonnet-4-5-20250929-v1:0:1m", "us.anthropic.claude-opus-4-20250514-v1:0", "us.anthropic.claude-opus-4-1-20250805-v1:0", "eu.anthropic.claude-3-5-sonnet-20241022-v2:0", "eu.anthropic.claude-3-7-sonnet-20250219-v1:0", "eu.anthropic.claude-sonnet-4-20250514-v1:0"]
613+
enum: ["us.amazon.nova-lite-v1:0", "us.amazon.nova-pro-v1:0", "us.amazon.nova-premier-v1:0", "us.anthropic.claude-3-haiku-20240307-v1:0", "us.anthropic.claude-haiku-4-5-20251001-v1:0", "us.anthropic.claude-3-5-sonnet-20241022-v2:0", "us.anthropic.claude-3-7-sonnet-20250219-v1:0", "us.anthropic.claude-sonnet-4-20250514-v1:0", "us.anthropic.claude-sonnet-4-20250514-v1:0:1m", "us.anthropic.claude-sonnet-4-5-20250929-v1:0", "us.anthropic.claude-sonnet-4-5-20250929-v1:0:1m", "us.anthropic.claude-opus-4-20250514-v1:0", "us.anthropic.claude-opus-4-1-20250805-v1:0", "eu.amazon.nova-lite-v1:0", "eu.amazon.nova-pro-v1:0", "eu.anthropic.claude-3-haiku-20240307-v1:0", "eu.anthropic.claude-haiku-4-5-20251001-v1:0", "eu.anthropic.claude-3-5-sonnet-20241022-v2:0", "eu.anthropic.claude-3-7-sonnet-20250219-v1:0", "eu.anthropic.claude-sonnet-4-20250514-v1:0", "eu.anthropic.claude-sonnet-4-5-20250929-v1:0", "eu.anthropic.claude-sonnet-4-5-20250929-v1:0:1m"]
614614
default: "us.anthropic.claude-sonnet-4-20250514-v1:0"
615615
order: 0
616616
error_analyzer:

0 commit comments

Comments
 (0)