metaprompt
1.0.0
Metaprompt is a domain-specific language for LLM prompt engineering. It is a template engine for textual prompts, where expression expansion can depend on LLM outputs.
The goal is to extend the usual techniques of parametrized prompts with programmability, reusability and meta-prompting abilities.
The text you are reading right now is a valid metaprompt program.
[# this is a comment that is ignored by the interpreter, that can be
used to add some info for the human-developer]
[# This whole text is a parametrized prompt, one of the parameters
being [:subject]]
[# [:subject] here is a variable reference. Variables can be defined
in-place, or passed from the external environment]
Give me a detailed poetic description of [:subject], using one or more
of the following metaphoric expressions:
[# Now I want to specialize my prompt depending on the value of
[:subject]. The output of the prompt below will be included *instead*
of the [$ ... block]: ]
[$ Write me a bullet list of metaphors for [:subject]. Do not produce
any other output]
[# Conditionals allow for logic branching: ]
[:if [:subject] is a human
:then
Use jokingly exaggerated style
:else
Include some references to [$ List some people who have any
relation to [:subject], comma-separated]
]
See examples/ for more.
This is an early work-in-progress. Follow me on twitter for updates
[:variable] and [:variable=some value][:if ... :then ... :else ...]
true or false[$ meta-prompt]
$ output - for now [:_=...] works (assignment to the _ variable)[:use module :param1=value1][# comments][:STUATUS=some-status] - to show during prompt evaluation[@foreign_function arg1 :with arg2 :param1=foo :param2=bar]MODEL variable - example)[chat1$ the object is the moon][chat1$ what is the object?] (example)ROLE variable (example)[:use @ffi-function :param1=foo :param2=bar][:use ...]