Skip to content

Commit d247e7b

Browse files
committed
Enhance prompt handling: Convert escaped newlines to actual line breaks in rendering and format multiline prompts for storage with escaped newlines before saving.
1 parent 96de85b commit d247e7b

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

src/promptix/core/base.py

+3
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,7 @@ def get_prompt(cls, prompt_template: str, version: Optional[str] = None, **varia
187187
except TemplateError as e:
188188
raise ValueError(f"Error rendering template for '{prompt_template}': {str(e)}")
189189

190+
# Convert escaped newlines (\n) to actual line breaks
191+
result = result.replace("\\n", "\n")
192+
190193
return result

src/promptix/core/prompt_manager.py

+24-2
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,33 @@ def list_prompts(self) -> Dict[str, Any]:
2929
"""Return all available prompts."""
3030
return self.prompts
3131

32+
def _format_prompt_for_storage(self, prompt_data: Dict[str, Any]) -> Dict[str, Any]:
33+
"""Convert multiline prompts to single line with escaped newlines."""
34+
formatted_data = prompt_data.copy()
35+
36+
# Process each version's system_message
37+
if "versions" in formatted_data:
38+
for version in formatted_data["versions"].values():
39+
if "system_message" in version:
40+
# Convert multiline to single line with \n
41+
message = version["system_message"]
42+
if isinstance(message, str):
43+
lines = [line for line in message.strip().split("\n")]
44+
version["system_message"] = "\\n".join(lines)
45+
46+
return formatted_data
47+
3248
def save_prompts(self) -> None:
3349
"""Save prompts to local prompts.json file."""
3450
try:
3551
prompts_file = Path("prompts.json")
36-
with open(prompts_file, 'w') as f:
37-
json.dump(self.prompts, f, indent=2)
52+
53+
# Always format prompts before saving
54+
formatted_prompts = {}
55+
for prompt_id, prompt_data in self.prompts.items():
56+
formatted_prompts[prompt_id] = self._format_prompt_for_storage(prompt_data)
57+
58+
with open(prompts_file, 'w', encoding='utf-8') as f:
59+
json.dump(formatted_prompts, f, indent=2, ensure_ascii=False)
3860
except Exception as e:
3961
raise ValueError(f"Failed to save prompts: {str(e)}")

0 commit comments

Comments
 (0)