From d09ca02d096465b6eda86168594b5e216d89876e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Sun, 26 May 2024 08:46:01 +0200 Subject: [PATCH 1/7] Render chat template tojson filter as unicode --- llama_cpp/llama_chat_format.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index e2d7e2785..afb322c28 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -192,11 +192,12 @@ def __init__( self.add_generation_prompt = add_generation_prompt self.stop_token_ids = set(stop_token_ids) if stop_token_ids is not None else None - self._environment = ImmutableSandboxedEnvironment( - loader=jinja2.BaseLoader(), + environment = ImmutableSandboxedEnvironment( trim_blocks=True, lstrip_blocks=True, - ).from_string(self.template) + ) + environment.policies['json.dumps_kwargs']['ensure_ascii'] = False + self._environment = environment.from_string(self.template) def __call__( self, From 40711cee71c4081029964d720088be2afc1f3c68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Wed, 29 May 2024 10:55:26 +0200 Subject: [PATCH 2/7] replace tojson with custom filter --- llama_cpp/llama_chat_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index afb322c28..d8d108602 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -196,7 +196,7 @@ def __init__( trim_blocks=True, lstrip_blocks=True, ) - environment.policies['json.dumps_kwargs']['ensure_ascii'] = False + environment.filters["tojson"] = lambda x: json.dumps(x, ensure_ascii=False) self._environment = environment.from_string(self.template) def __call__( From 09385dcf820e9f5142700d98a6fd39d5d88171e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Thu, 20 Jun 2024 21:44:27 +0200 Subject: [PATCH 3/7] add indent parameter --- llama_cpp/llama_chat_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index d8d108602..7a7f1dee1 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -196,7 +196,7 @@ def __init__( trim_blocks=True, lstrip_blocks=True, ) - environment.filters["tojson"] = lambda x: json.dumps(x, ensure_ascii=False) + environment.filters["tojson"] = lambda x, indent=None: json.dumps(x, indent=indent, ensure_ascii=False) self._environment = environment.from_string(self.template) def __call__( From 666724789707b8ed2c598417d064d2dd3d0a3920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Thu, 15 Aug 2024 09:55:20 +0200 Subject: [PATCH 4/7] add break, continue and strftime --- llama_cpp/llama_chat_format.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 7a7f1dee1..1da541b95 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -8,6 +8,7 @@ import string from contextlib import ExitStack +from datetime import datetime from typing import Any, Dict, Iterator, List, Literal, Optional, Tuple, Union, Protocol, cast import jinja2 @@ -195,8 +196,10 @@ def __init__( environment = ImmutableSandboxedEnvironment( trim_blocks=True, lstrip_blocks=True, + extensions=[jinja2.ext.loopcontrols], ) environment.filters["tojson"] = lambda x, indent=None: json.dumps(x, indent=indent, ensure_ascii=False) + environment.globals["strftime"] = lambda format: datetime.now().strftime(format) self._environment = environment.from_string(self.template) def __call__( From 102e3d3bf78aaf64484f7922577c5f6910516610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Thu, 15 Aug 2024 14:39:21 +0200 Subject: [PATCH 5/7] renamed to strftime_now --- llama_cpp/llama_chat_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 78a01a8a1..a29d4d966 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -214,7 +214,7 @@ def __init__( extensions=[jinja2.ext.loopcontrols], ) environment.filters["tojson"] = lambda x, indent=None: json.dumps(x, indent=indent, ensure_ascii=False) - environment.globals["strftime"] = lambda format: datetime.now().strftime(format) + environment.globals["strftime_now"] = lambda format: datetime.now().strftime(format) self._environment = environment.from_string(self.template) def __call__( From ea52ae8ed42cc1ac0414a183fd582ca1c97d8f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Tue, 8 Oct 2024 20:04:27 +0200 Subject: [PATCH 6/7] add separators and sort_keys plus import fix --- llama_cpp/llama_chat_format.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index a29d4d966..50ff84899 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -24,6 +24,7 @@ ) import jinja2 +import jinja2.ext as jinja2_ext from jinja2.sandbox import ImmutableSandboxedEnvironment import numpy as np @@ -211,9 +212,9 @@ def __init__( environment = ImmutableSandboxedEnvironment( trim_blocks=True, lstrip_blocks=True, - extensions=[jinja2.ext.loopcontrols], + extensions=[jinja2_ext.loopcontrols], ) - environment.filters["tojson"] = lambda x, indent=None: json.dumps(x, indent=indent, ensure_ascii=False) + environment.filters["tojson"] = lambda x, indent=None, separators=None, sort_keys=False: json.dumps(x, indent=indent, separators=separators, sort_keys=sort_keys, ensure_ascii=False) environment.globals["strftime_now"] = lambda format: datetime.now().strftime(format) self._environment = environment.from_string(self.template) From cbe1129eb4ceb3e57cd9c5319890b39c0552832b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sigbj=C3=B8rn=20Skj=C3=A6ret?= Date: Fri, 8 Aug 2025 11:38:31 +0200 Subject: [PATCH 7/7] allow ensure_ascii parameter as a few templates are using it now --- llama_cpp/llama_chat_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 50ff84899..312157e63 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -214,7 +214,7 @@ def __init__( lstrip_blocks=True, extensions=[jinja2_ext.loopcontrols], ) - environment.filters["tojson"] = lambda x, indent=None, separators=None, sort_keys=False: json.dumps(x, indent=indent, separators=separators, sort_keys=sort_keys, ensure_ascii=False) + environment.filters["tojson"] = lambda x, indent=None, separators=None, sort_keys=False, ensure_ascii=False: json.dumps(x, indent=indent, separators=separators, sort_keys=sort_keys, ensure_ascii=ensure_ascii) environment.globals["strftime_now"] = lambda format: datetime.now().strftime(format) self._environment = environment.from_string(self.template)