99logger = get_logger ()
1010
1111
12+ def _render_prompt (template_config : dict ) -> str :
13+ """
14+ Returns a unified prompt string regardless of template type.
15+ """
16+
17+ chat_cfg = template_config .get ("chat" )
18+ if chat_cfg :
19+ parts : list [str ] = []
20+
21+ system = (chat_cfg .get ("system" ) or "" ).strip ()
22+ if system :
23+ parts .append (system )
24+
25+ role_prefix = {
26+ "user" : "Human: " ,
27+ "assistant" : "Assistant: " ,
28+ }
29+
30+ for msg in chat_cfg .get ("messages" ) or []:
31+ role = (msg .get ("role" ) or "" ).lower ()
32+ content = (msg .get ("content" ) or "" ).strip ()
33+ prefix = role_prefix .get (role )
34+
35+ if not prefix or not content :
36+ continue
37+
38+ parts .append (prefix + content )
39+
40+ return "\n \n " .join (parts )
41+
42+ text_cfg = template_config .get ("text" )
43+ if isinstance (text_cfg , str ):
44+ return text_cfg
45+ if isinstance (text_cfg , dict ):
46+ return text_cfg .get ("text" , "" )
47+
48+ logger .error (
49+ "Unsupported prompt configuration encountered" ,
50+ extra = {"available_keys" : list (template_config .keys ())},
51+ )
52+ raise PromptLoadError (f"Unsupported prompt configuration. Keys: { list (template_config .keys ())} " )
53+
54+
1255def load_prompt (prompt_name : str , prompt_version : str = None ) -> str :
1356 """
1457 Load a prompt template from Amazon Bedrock Prompt Management.
1558
1659 Resolves prompt name to ID, then loads the specified version.
1760 Supports both DRAFT and numbered versions.
61+ Handles both text and chat prompt templates.
1862 """
1963 try :
2064 client : AgentsforBedrockClient = boto3 .client ("bedrock-agent" , region_name = os .environ ["AWS_REGION" ])
@@ -24,21 +68,21 @@ def load_prompt(prompt_name: str, prompt_version: str = None) -> str:
2468 if not prompt_id :
2569 raise PromptNotFoundError (f"Could not find prompt ID for name '{ prompt_name } '" )
2670
27- # Load the prompt with the specified version
28- if prompt_version and prompt_version != "DRAFT" :
29- logger .info (
30- f"Loading version { prompt_version } of prompt '{ prompt_name } ' (ID: { prompt_id } )" ,
31- extra = {"prompt_name" : prompt_name , "prompt_id" : prompt_id , "prompt_version" : prompt_version },
32- )
33- response = client .get_prompt (promptIdentifier = prompt_id , promptVersion = str (prompt_version ))
71+ is_explicit_version = prompt_version and prompt_version != "DRAFT"
72+ selected_version = str (prompt_version ) if is_explicit_version else "DRAFT"
73+
74+ logger .info (
75+ f"Loading prompt { prompt_name } ' (ID: { prompt_id } )" ,
76+ extra = {"prompt_name" : prompt_name , "prompt_id" : prompt_id , "prompt_version" : prompt_version },
77+ )
78+
79+ if is_explicit_version :
80+ response = client .get_prompt (promptIdentifier = prompt_id , promptVersion = selected_version )
3481 else :
35- logger .info (
36- f"Loading DRAFT version of prompt '{ prompt_name } ' (ID: { prompt_id } )" ,
37- extra = {"prompt_name" : prompt_name , "prompt_id" : prompt_id , "prompt_version" : "DRAFT" },
38- )
3982 response = client .get_prompt (promptIdentifier = prompt_id )
4083
41- prompt_text = response ["variants" ][0 ]["templateConfiguration" ]["text" ]["text" ]
84+ template_config = response ["variants" ][0 ]["templateConfiguration" ]
85+ prompt_text = _render_prompt (template_config )
4286 actual_version = response .get ("version" , "DRAFT" )
4387
4488 logger .info (
0 commit comments