|
8 | 8 | import uuid
|
9 | 9 |
|
10 | 10 | from jinja2 import Template
|
| 11 | +from jinja2.sandbox import SandboxedEnvironment |
11 | 12 | from openai import APIConnectionError, APIStatusError, APITimeoutError, BadRequestError, OpenAIError, RateLimitError
|
12 | 13 |
|
13 | 14 | from promptflow._cli._utils import get_workspace_triad_from_local
|
@@ -632,9 +633,16 @@ def to_bool(value) -> bool:
|
632 | 633 | return str(value).lower() == "true"
|
633 | 634 |
|
634 | 635 |
|
635 |
| -def render_jinja_template(prompt, trim_blocks=True, keep_trailing_newline=True, escape_dict={}, **kwargs): |
| 636 | +def render_jinja_template(template_content, trim_blocks=True, keep_trailing_newline=True, escape_dict={}, **kwargs): |
636 | 637 | try:
|
637 |
| - return Template(prompt, trim_blocks=trim_blocks, keep_trailing_newline=keep_trailing_newline).render(**kwargs) |
| 638 | + use_sandbox_env = os.environ.get("PF_USE_SANDBOX_FOR_JINJA", "true") |
| 639 | + if use_sandbox_env.lower() == "false": |
| 640 | + template = Template(template_content, trim_blocks=trim_blocks, keep_trailing_newline=keep_trailing_newline) |
| 641 | + return template.render(**kwargs) |
| 642 | + else: |
| 643 | + sandbox_env = SandboxedEnvironment(trim_blocks=trim_blocks, keep_trailing_newline=keep_trailing_newline) |
| 644 | + sanitized_template = sandbox_env.from_string(template_content) |
| 645 | + return sanitized_template.render(**kwargs) |
638 | 646 | except Exception as e:
|
639 | 647 | # For exceptions raised by jinja2 module, mark UserError
|
640 | 648 | exception_message = str(e)
|
|
0 commit comments