Skip to content

Commit 7ebfc67

Browse files
refactor: adds chat type prompt parsing
1 parent 13fe3b1 commit 7ebfc67

File tree

1 file changed

+56
-12
lines changed

1 file changed

+56
-12
lines changed

packages/slackBotFunction/app/services/prompt_loader.py

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,56 @@
99
logger = 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+
1255
def 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

Comments
 (0)