diff --git a/common/jinja/jinja-caps.h b/common/jinja/jinja-caps.h index eca5782903..a8e9c4a559 100644 --- a/common/jinja/jinja-caps.h +++ b/common/jinja/jinja-caps.h @@ -154,6 +154,28 @@ static void caps_apply_workarounds(context & ctx, const caps & c) { } ctx.set_val("messages", messages); + + // + // per-model workarounds + // + + // workaround for shieldgemma-2b-Q2_K + if (ctx.get_val("guideline")->is_undefined()) { + ctx.set_val("guideline", mk_val("")); + } + + // workaround for functionary models + if (ctx.get_val("functions")->is_undefined()) { + ctx.set_val("functions", mk_val("")); + } + if (ctx.get_val("datetime")->is_undefined()) { + ctx.set_val("datetime", mk_val("")); + } + + // workaround for Llama-3-5B-Sheard + if (ctx.get_val("system_message")->is_undefined()) { + ctx.set_val("system_message", mk_val("")); + } } } // namespace jinja diff --git a/common/jinja/jinja-parser.cpp b/common/jinja/jinja-parser.cpp index ed3604ea95..25dacfefa0 100644 --- a/common/jinja/jinja-parser.cpp +++ b/common/jinja/jinja-parser.cpp @@ -216,6 +216,12 @@ private: expect(token::close_statement, "Expected %}"); result = mk_stmt(std::move(filter_node), std::move(body)); + } else if (name == "generation" || name == "endgeneration") { + // Ignore generation blocks (transformers-specific) + // See https://github.com/huggingface/transformers/pull/30650 for more information. + result = mk_stmt(); + current++; + } else { throw std::runtime_error("Unknown statement: " + name); } diff --git a/common/jinja/jinja-value.cpp b/common/jinja/jinja-value.cpp index 4da4584e23..1e7ef96e04 100644 --- a/common/jinja/jinja-value.cpp +++ b/common/jinja/jinja-value.cpp @@ -197,6 +197,7 @@ const func_builtins & global_builtins() { {"test_is_integer", test_type_fn}, {"test_is_number", test_type_fn}, {"test_is_iterable", test_type_fn}, + {"test_is_sequence", test_type_fn}, {"test_is_mapping", test_type_fn}, {"test_is_lower", [](const func_args & args) -> value { args.ensure_vals(); @@ -655,6 +656,10 @@ const func_builtins & value_object_t::get_builtins() const { } return result; }}, + {"string", [](const func_args & args) -> value { + args.ensure_vals(); + return mk_val("TO BE IMPLEMENTED"); + }}, {"tojson", [](const func_args & args) -> value { args.ensure_vals(); // use global to_json diff --git a/common/jinja/jinja-vm.h b/common/jinja/jinja-vm.h index 099111db46..93c3ca91a5 100644 --- a/common/jinja/jinja-vm.h +++ b/common/jinja/jinja-vm.h @@ -203,6 +203,14 @@ struct continue_statement : public statement { } }; +// do nothing +struct noop_statement : public statement { + std::string type() const override { return "Noop"; } + value execute_impl(context &) override { + return mk_val(); + } +}; + struct set_statement : public statement { statement_ptr assignee; statement_ptr val;