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

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 compile_messages(messages, variables = {})
  messages.map do |message|
    role = message[:role] || message['role']
    content = compile(message[:content] || message['content'], variables)
    message.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 extract_message_variables(messages)
  messages.flat_map do |message|
    content = message[:content] || message['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