feat(rnd): Integrate Jinja2 into TextFormatter (#7891)

Add Jinja2 to TextFormatter while maintaining backward compatibility.
This commit is contained in:
Zamil Majdy
2024-08-27 09:17:57 +02:00
committed by GitHub
parent 299530cf95
commit ea6f37bf98
3 changed files with 1459 additions and 1225 deletions

View File

@@ -1,11 +1,14 @@
import re
from typing import Any
from jinja2 import BaseLoader, Environment
from pydantic import Field
from autogpt_server.data.block import Block, BlockCategory, BlockOutput, BlockSchema
from autogpt_server.util import json
jinja = Environment(loader=BaseLoader())
class TextMatcherBlock(Block):
class Input(BlockSchema):
@@ -131,20 +134,25 @@ class TextFormatterBlock(Block):
test_input=[
{
"values": {"name": "Alice", "hello": "Hello", "world": "World!"},
"format": "{hello}, {world} {name}",
"format": "{hello}, {world} {{name}}",
},
{
"values": {"list": ["Hello", " World!"]},
"format": "{% for item in list %}{{ item }}{% endfor %}",
},
],
test_output=[
("output", "Hello, World! Alice"),
("output", "Hello World!"),
],
)
def run(self, input_data: Input) -> BlockOutput:
values = {
key: value if isinstance(value, str) else json.dumps(value)
for key, value in input_data.values.items()
}
yield "output", input_data.format.format(**values)
# For python.format compatibility: replace all {...} with {{..}}.
# But avoid replacing {{...}} to {{{...}}}.
fmt = re.sub(r"(?<!{){[ a-zA-Z0-9_]+}", r"{\g<0>}", input_data.format)
template = jinja.from_string(fmt)
yield "output", template.render(**input_data.values)
class TextCombinerBlock(Block):

File diff suppressed because it is too large Load Diff

View File

@@ -42,6 +42,7 @@ expiringdict = "^1.2.2"
discord-py = "^2.4.0"
autogpt-libs = {path = "../autogpt_libs"}
jinja2 = "^3.1.4"
[tool.poetry.group.dev.dependencies]
cx-freeze = { git = "https://github.com/ntindle/cx_Freeze.git", rev = "main", develop = true }
poethepoet = "^0.26.1"