|
2 | 2 | from pathlib import Path |
3 | 3 | from typing import Any, Protocol, runtime_checkable |
4 | 4 |
|
5 | | -from jinja2 import BaseLoader, Environment, StrictUndefined, nodes |
| 5 | +from jinja2 import BaseLoader, StrictUndefined, nodes |
6 | 6 | from jinja2.exceptions import TemplateNotFound |
7 | 7 | from jinja2.ext import Extension |
8 | 8 | from jinja2.loaders import FileSystemLoader, PrefixLoader |
| 9 | +from jinja2.sandbox import SandboxedEnvironment |
9 | 10 | from pydantic import BaseModel |
10 | 11 |
|
11 | 12 | from ..chat import Message, Role |
@@ -34,7 +35,7 @@ def _finalize_value(value: Any) -> Any: |
34 | 35 | return value |
35 | 36 |
|
36 | 37 |
|
37 | | -_inline_env = Environment( |
| 38 | +_inline_env = SandboxedEnvironment( |
38 | 39 | trim_blocks=True, |
39 | 40 | lstrip_blocks=True, |
40 | 41 | keep_trailing_newline=True, |
@@ -88,9 +89,9 @@ def get_loader(self, template: str) -> tuple[BaseLoader, str]: |
88 | 89 | return loader, name |
89 | 90 |
|
90 | 91 |
|
91 | | -def create_message_environment(loader_mapping: dict[str, Path]) -> Environment: |
| 92 | +def create_message_environment(loader_mapping: dict[str, Path]) -> SandboxedEnvironment: |
92 | 93 | """Create a Jinja2 environment with MessageExtension.""" |
93 | | - return Environment( |
| 94 | + return SandboxedEnvironment( |
94 | 95 | loader=PromptsLoader( |
95 | 96 | { |
96 | 97 | namespace: FileSystemLoader(path) |
|
0 commit comments