Module: Langfuse::TemplateCompiler
- Defined in:
- lib/langfuse/template_compiler.rb
Overview
Placeholder handling shared by Prompt, PromptTemplate and ChatPromptTemplate.
Both {{var}} and {var} are supported.
Constant Summary collapse
- VARIABLE_PATTERN =
/\{\{([a-zA-Z0-9_.]+)\}\}|\{([a-zA-Z0-9_.]+)\}/
Class Method Summary collapse
-
.compile(template, variables = {}) ⇒ Object
Substitutes every provided variable in a single pass, so a value that itself contains a placeholder is never expanded again (a value like "{admin_prompt}" stays literal).
- .compile_messages(messages, variables = {}) ⇒ Object
- .extract_message_variables(messages) ⇒ Object
- .extract_variables(text) ⇒ Object
Class Method Details
.compile(template, variables = {}) ⇒ Object
Substitutes every provided variable in a single pass, so a value that itself contains a placeholder is never expanded again (a value like "{admin_prompt}" stays literal). Placeholders without a matching variable are left untouched.
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/langfuse/template_compiler.rb', line 14 def compile(template, variables = {}) text = template.to_s return text if variables.nil? || variables.empty? values = variables.to_h { |key, value| [key.to_s, value.to_s] } text.gsub(placeholder_pattern(values.keys)) do values[Regexp.last_match(1) || Regexp.last_match(2)] end end |
.compile_messages(messages, variables = {}) ⇒ Object
25 26 27 28 29 30 31 |
# File 'lib/langfuse/template_compiler.rb', line 25 def (, variables = {}) .map do || role = [:role] || ['role'] content = compile([:content] || ['content'], variables) .merge(role: role, content: content) end end |
.extract_message_variables(messages) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/langfuse/template_compiler.rb', line 37 def () .flat_map do || content = [:content] || ['content'] extract_variables(content) end.uniq end |
.extract_variables(text) ⇒ Object
33 34 35 |
# File 'lib/langfuse/template_compiler.rb', line 33 def extract_variables(text) text.to_s.scan(VARIABLE_PATTERN).map { |double, single| double || single }.uniq end |