wip
This commit is contained in:
parent
7ed11f78f9
commit
da7bbe5813
|
|
@ -203,4 +203,24 @@ value filter_expression::execute(context & ctx) {
|
|||
}
|
||||
}
|
||||
|
||||
value if_statement::execute(context & ctx) {
|
||||
throw std::runtime_error("if_statement::execute not implemented");
|
||||
}
|
||||
|
||||
value for_statement::execute(context & ctx) {
|
||||
throw std::runtime_error("for_statement::execute not implemented");
|
||||
}
|
||||
|
||||
value break_statement::execute(context & ctx) {
|
||||
throw std::runtime_error("break_statement::execute not implemented");
|
||||
}
|
||||
|
||||
value continue_statement::execute(context & ctx) {
|
||||
throw std::runtime_error("continue_statement::execute not implemented");
|
||||
}
|
||||
|
||||
value set_statement::execute(context & ctx) {
|
||||
throw std::runtime_error("set_statement::execute not implemented");
|
||||
}
|
||||
|
||||
} // namespace jinja
|
||||
|
|
|
|||
|
|
@ -13,8 +13,17 @@
|
|||
namespace jinja {
|
||||
|
||||
struct context {
|
||||
std::ostringstream out;
|
||||
std::map<std::string, value> var;
|
||||
|
||||
context() = default;
|
||||
~context() = default;
|
||||
|
||||
context(const context & parent) {
|
||||
// inherit variables (for example, when entering a new scope)
|
||||
for (const auto & pair : parent.var) {
|
||||
var[pair.first] = pair.second->clone();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -59,7 +68,9 @@ struct program : public statement {
|
|||
|
||||
explicit program(statements && body) : body(std::move(body)) {}
|
||||
std::string type() const override { return "Program"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override {
|
||||
throw std::runtime_error("Cannot execute program directly, use jinja::vm instead");
|
||||
}
|
||||
};
|
||||
|
||||
struct if_statement : public statement {
|
||||
|
|
@ -73,7 +84,7 @@ struct if_statement : public statement {
|
|||
}
|
||||
|
||||
std::string type() const override { return "If"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override;
|
||||
};
|
||||
|
||||
struct identifier;
|
||||
|
|
@ -97,17 +108,17 @@ struct for_statement : public statement {
|
|||
}
|
||||
|
||||
std::string type() const override { return "For"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override;
|
||||
};
|
||||
|
||||
struct break_statement : public statement {
|
||||
std::string type() const override { return "Break"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override;
|
||||
};
|
||||
|
||||
struct continue_statement : public statement {
|
||||
std::string type() const override { return "Continue"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override;
|
||||
};
|
||||
|
||||
struct set_statement : public statement {
|
||||
|
|
@ -122,7 +133,7 @@ struct set_statement : public statement {
|
|||
}
|
||||
|
||||
std::string type() const override { return "Set"; }
|
||||
value execute(context & ctx) override {}
|
||||
value execute(context & ctx) override;
|
||||
};
|
||||
|
||||
struct macro_statement : public statement {
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@
|
|||
#include "jinja/jinja-lexer.h"
|
||||
|
||||
int main(void) {
|
||||
//std::string contents = "{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% 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'] == 'assistant') %}{% set role = 'model' %}{% else %}{% set role = message['role'] %}{% endif %}{{ '<start_of_turn>' + role + '\\n' + message['content'] | trim + '<end_of_turn>\\n' }}{% endfor %}{% if add_generation_prompt %}{{'<start_of_turn>model\\n'}}{% endif %}";
|
||||
std::string contents = "{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% 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'] == 'assistant') %}{% set role = 'model' %}{% else %}{% set role = message['role'] %}{% endif %}{{ '<start_of_turn>' + role + '\\n' + message['content'] | trim + '<end_of_turn>\\n' }}{% endfor %}{% if add_generation_prompt %}{{'<start_of_turn>model\\n'}}{% endif %}";
|
||||
|
||||
std::string contents = "{{ ('hi' + 'fi') | upper }}";
|
||||
//std::string contents = "{{ ('hi' + 'fi') | upper }}";
|
||||
|
||||
std::cout << "=== INPUT ===\n" << contents << "\n\n";
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue