codewithkyrian/jinja-php
这是一个针对Jinja模板引擎的最简PHP实现,特别设计用于解析和渲染机器学习(ML)聊天模板。
1.0.0
2024-03-19 17:43 UTC
Requires
- php: ^8.1
Requires (Dev)
- pestphp/pest: ^2.34
- symfony/var-dumper: ^6.3|^7.0
README
这是一个针对Jinja模板引擎的最简无依赖PHP实现,特别设计用于解析和渲染机器学习(ML)聊天模板。该项目深受HuggingFace在JavaScript中Jinja模板引擎的启发,主要用于ML聊天模板,但足够灵活,可用于解析大多数Jinja模板的一般用途。
安装
通过Composer安装Jinja PHP
composer require codewithkyrian/jinja-php
使用方法
以下是如何使用Jinja PHP渲染模板的示例
$sourceString = "{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token + ' ' }}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}"; $args = [ 'messages' => [ ['role' => 'user', 'content' => 'Hello!'], ['role' => 'assistant', 'content' => 'Hi! How are you?'], ['role' => 'user', 'content' => 'I am doing great.'], ['role' => 'assistant', 'content' => 'That is great to hear.'], ], "add_generation_prompt" => true, "bos_token" => "<s>", "eos_token" => "</s>", "unk_token" => "<unk>", ]; $template = new Template($sourceString); $rendered = $template->render($args); // <s>[INST] Hello! [/INST]Hi! How are you?</s> [INST] I am doing great. [/INST]That is great to hear.</s>
高级使用
Jinja PHP支持Jinja模板中的各种控制结构。以下是一些示例
条件语句
{% if user.isActive %} "Hello," {{ user.name }}! {% else %} "Hello, Guest!" {% endif %}
循环
<ul> {% for user in users %} <li>{{ user.name }}</li> {% else %} <li>No users found.</li> {% endfor %} </ul>
{% for user in users %} {{ loop.index }} - {{ user.name }} {% endfor %}
变量过滤器
{{ "Hello World!"|lower }}
全面功能支持
Jinja PHP设计为强大且功能丰富,提供支持模板基础的广泛功能。这包括处理异常、使用默认字符串方法如strip()
或upper()
、处理字典等。如果您需要Jinja PHP尚未实现的功能,我们鼓励您提出请求。另外,如果您精通PHP且了解模板引擎的内部结构,请考虑通过提交包含您建议功能的pull request来为项目做出贡献。
测试
Jinja PHP附带一系列测试,以确保功能的一致性和可靠性。要运行测试
composer test
贡献者
- Kyrian Obikwelu
- 欢迎其他贡献者。
致谢
- Hugging Face 在ML聊天模板方面的工作。
- 作为该项目主要灵感的Python的Jinja模板引擎。
支持
如果您发现任何问题或有问题,请随时在仓库中提交问题。
许可证
本项目采用MIT许可证。有关更多信息,请参阅LICENSE文件。