codewithkyrian/jinja-php

这是一个针对Jinja模板引擎的最简PHP实现,特别设计用于解析和渲染机器学习(ML)聊天模板。

1.0.0 2024-03-19 17:43 UTC

This package is auto-updated.

Last update: 2024-09-19 19:07:31 UTC


README

Build Status GitHub source GitHub license GitHub release

这是一个针对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

贡献者

致谢

  • Hugging Face 在ML聊天模板方面的工作。
  • 作为该项目主要灵感的Python的Jinja模板引擎。

支持

如果您发现任何问题或有问题,请随时在仓库中提交问题

许可证

本项目采用MIT许可证。有关更多信息,请参阅LICENSE文件。